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
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
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.