Lesen und Schreiben von Daten aus Snowflake
Azure Databricks stellt einen Snowflake-Connector in Databricks Runtime bereit, um das Lesen und Schreiben von Daten aus Snowflake zu unterstützen.
Wichtig
Die in diesem Artikel beschriebenen Konfigurationen sind experimentell. Experimentelle Funktionen werden ohne Mängelgewähr („wie besehen“) bereitgestellt und nicht von Databricks über Kanäle des technischen Kundensupports unterstützt. Um vollständige Unterstützung für den Abfrageverbund zu erhalten, sollten Sie stattdessen Lakehouse-Verbund verwenden, wodurch Ihre Azure Databricks-Benutzer die Vorteile der Unity Catalog-Syntax und der Datengovernancetools nutzen können.
Abfragen einer Snowflake-Tabelle in Azure Databricks
Sie können eine Verbindung mit Snowflake konfigurieren und dann Daten abfragen. Bevor Sie beginnen, überprüfen Sie, auf welcher Version von Databricks Runtime Ihr Cluster ausgeführt wird. Der folgende Code bietet eine Beispielsyntax in Python, SQL und 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()
Notebookbeispiel: Snowflake Connector für Spark
Die folgenden Notebooks enthalten einfache Beispiele für das Schreiben von Daten in Snowflake und das Lesen von Daten aus Snowflake. Weitere Informationen finden Sie in Snowflake-Konnektor für Spark.
Tipp
Vermeiden Sie die Offenlegung Ihres Snowflake-Benutzernamens und -Kennworts in Notebooks, indem Sie Geheimnisse verwenden, wie es in den Notebooks gezeigt wird.
Snowflake Python-Notebook
Notebookbeispiel: Speichern von Modelltrainingsergebnissen in Snowflake
Das folgende Notebook führt Sie durch die bewährten Methoden zur Verwendung des Snowflake-Connectors für Spark. Es schreibt Daten in Snowflake, verwendet Snowflake für einige grundlegende Datenbearbeitungen, trainiert ein Machine Learning-Modell in Azure Databricks und schreibt die Ergebnisse zurück in Snowflake.
Speichern von ML-Trainingsergebnissen im Snowflake-Notebook
Häufig gestellte Fragen (FAQ)
Warum werden meine Spark DataFrame-Spalten in Snowflake nicht in der gleichen Reihenfolge angezeigt?
Der Snowflake-Connector für Spark beachtet nicht die Reihenfolge der Spalten in der Tabelle, in die geschrieben wird. Sie müssen die Zuordnung zwischen DataFrame- und Snowflake-Spalten explizit angeben. Um diese Zuordnung anzugeben, verwenden Sie den Parameter „columnmap“.
Warum werden INTEGER
-Daten als DECIMAL
-Daten in Snowflake zurückgelesen?
Snowflake stellt alle INTEGER
-Typen als NUMBER
dar, was zu einer Änderung des Datentyps führen kann, wenn Sie Daten in Snowflake schreiben und daraus lesen. Beispielsweise können INTEGER
-Daten beim Schreiben in Snowflake in DECIMAL
konvertiert werden, da INTEGER
und DECIMAL
in Snowflake semantisch gleichwertig sind (siehe Numerische Datentypen in Snowflake).
Warum werden die Felder in meinem Snowflake-Tabellenschema immer in Großbuchstaben geschrieben?
Snowflake verwendet standardmäßig Felder in Großbuchstaben, was bedeutet, dass das Tabellenschema in Großbuchstaben konvertiert wird.