Dela via


Läsa och skriva data från Snowflake

Azure Databricks tillhandahåller en Snowflake-anslutning i Databricks Runtime för att stödja läsning och skrivning av data från Snowflake.

Viktigt!

De konfigurationer som beskrivs i den här artikeln är Experimentella. Experimentella funktioner tillhandahålls som de är och stöds inte av Databricks via teknisk kundsupport. För att få fullständigt stöd för frågefederation bör du i stället använda Lakehouse Federation, vilket gör att dina Azure Databricks-användare kan dra nytta av Unity Catalog-syntaxen och datastyrningsverktygen.

Fråga en Snowflake-tabell i Azure Databricks

Du kan konfigurera en anslutning till Snowflake och sedan fråga efter data. Innan du börjar kontrollerar du vilken version av Databricks Runtime klustret körs på. Följande kod innehåller exempelsyntax i Python, SQL och Scala.

Python


# The following example applies to Databricks Runtime 11.3 LTS and above.

snowflake_table = (spark.read
  .format("snowflake")
  .option("host", "hostname")
  .option("port", "port") # Optional - will use default port 443 if not specified.
  .option("user", "username")
  .option("password", "password")
  .option("sfWarehouse", "warehouse_name")
  .option("database", "database_name")
  .option("schema", "schema_name") # Optional - will use default schema "public" if not specified.
  .option("dbtable", "table_name")
  .load()
)

# The following example applies to Databricks Runtime 10.4 and below.

snowflake_table = (spark.read
  .format("snowflake")
  .option("dbtable", table_name)
  .option("sfUrl", database_host_url)
  .option("sfUser", username)
  .option("sfPassword", password)
  .option("sfDatabase", database_name)
  .option("sfSchema", schema_name)
  .option("sfWarehouse", warehouse_name)
  .load()
)

SQL


/* The following example applies to Databricks Runtime 11.3 LTS and above. */

DROP TABLE IF EXISTS snowflake_table;
CREATE TABLE snowflake_table
USING snowflake
OPTIONS (
    host '<hostname>',
    port '<port>', /* Optional - will use default port 443 if not specified. */
    user '<username>',
    password '<password>',
    sfWarehouse '<warehouse_name>',
    database '<database-name>',
    schema '<schema-name>', /* Optional - will use default schema "public" if not specified. */
    dbtable '<table-name>'
);
SELECT * FROM snowflake_table;

/* The following example applies to Databricks Runtime 10.4 LTS and below. */

DROP TABLE IF EXISTS snowflake_table;
CREATE TABLE snowflake_table
USING snowflake
OPTIONS (
    dbtable '<table-name>',
    sfUrl '<database-host-url>',
    sfUser '<username>',
    sfPassword '<password>',
    sfDatabase '<database-name>',
    sfSchema '<schema-name>',
    sfWarehouse '<warehouse-name>'
);
SELECT * FROM snowflake_table;

Scala


# The following example applies to Databricks Runtime 11.3 LTS and above.

val snowflake_table = spark.read
  .format("snowflake")
  .option("host", "hostname")
  .option("port", "port") /* Optional - will use default port 443 if not specified. */
  .option("user", "username")
  .option("password", "password")
  .option("sfWarehouse", "warehouse_name")
  .option("database", "database_name")
  .option("schema", "schema_name") /* Optional - will use default schema "public" if not specified. */
  .option("dbtable", "table_name")
  .load()

# The following example applies to Databricks Runtime 10.4 and below.

val snowflake_table = spark.read
  .format("snowflake")
  .option("dbtable", table_name)
  .option("sfUrl", database_host_url)
  .option("sfUser", username)
  .option("sfPassword", password)
  .option("sfDatabase", database_name)
  .option("sfSchema", schema_name)
  .option("sfWarehouse", warehouse_name)
  .load()

Notebook-exempel: Snowflake Connector för Spark

Följande notebook-filer innehåller enkla exempel på hur du skriver data till och läser data från Snowflake. Mer information finns i Snowflake Connector för Spark .

Dricks

Undvik att exponera ditt Användarnamn och lösenord för Snowflake i notebook-filer med hjälp av Hemligheter, som visas i notebook-filerna.

Snowflake Python Notebook

Hämta notebook-fil

Notebook-exempel: Spara modellträningsresultat till Snowflake

Följande notebook-fil går igenom metodtips för att använda Snowflake Connector för Spark. Den skriver data till Snowflake, använder Snowflake för viss grundläggande datamanipulering, tränar en maskininlärningsmodell i Azure Databricks och skriver resultatet tillbaka till Snowflake.

Lagra ML-utbildningsresultat i Snowflake Notebook

Hämta notebook-fil

Vanliga frågor och svar

Varför visas inte mina Spark DataFrame-kolumner i samma ordning i Snowflake?

Snowflake Connector för Spark respekterar inte ordningen på kolumnerna i tabellen som skrivs till. du måste uttryckligen ange mappningen mellan Kolumnerna DataFrame och Snowflake. Om du vill ange den här mappningen använder du parametern columnmap.

Varför skrivs INTEGER data till Snowflake tillbaka som DECIMAL?

Snowflake representerar alla INTEGER typer som NUMBER, vilket kan orsaka en ändring i datatypen när du skriver data till och läser data från Snowflake. Data kan till exempel konverteras till DECIMAL när du skriver till Snowflake, eftersom INTEGER och DECIMAL är semantiskt likvärdiga i Snowflake (se Snowflake Numeriska datatyper). INTEGER

Varför är fälten i mitt Snowflake-tabellschema alltid versaler?

Snowflake använder versaler som standard, vilket innebär att tabellschemat konverteras till versaler.