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.

Hinweis

Möglicherweise bevorzugen Sie Lakehouse Federation für die Verwaltung von Abfragen von Snowflake-Daten. Weitere Informationen unter Was ist Lakehouse Federation.

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 Verwenden des Spark-Connectors. Informationen zu allen Konfigurationsoptionen finden Sie insbesondere in Festlegen von Konfigurationsoptionen für den Connector.

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

Notebook abrufen

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

Notebook abrufen

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.