Gegevens lezen en schrijven uit Snowflake

Azure Databricks biedt een Snowflake-connector in de Databricks Runtime ter ondersteuning van het lezen en schrijven van gegevens uit Snowflake.

Notitie

U kunt de voorkeur geven aan Lakehouse Federation voor het beheren van query's op Snowflake-gegevens. Zie Wat is Lakehouse Federation.

Een query uitvoeren op een Snowflake-tabel in Azure Databricks

U kunt een verbinding met Snowflake configureren en vervolgens gegevens opvragen. Voordat u begint, controleert u op welke versie van Databricks Runtime uw cluster wordt uitgevoerd. De volgende code bevat een voorbeeldsyntaxis in Python, SQL en 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()

Voorbeeld van notebook: Snowflake Verbinding maken or voor Spark

De volgende notebooks bieden eenvoudige voorbeelden van het schrijven van gegevens naar en het lezen van gegevens uit Snowflake. Zie De Spark-Verbinding maken or gebruiken voor meer informatie. Zie Met name Configuratieopties instellen voor de Verbinding maken or voor alle configuratieopties.

Tip

Vermijd het blootstellen van uw Snowflake-gebruikersnaam en -wachtwoord in notebooks met behulp van Geheimen, die worden gedemonstreerd in de notebooks.

Snowflake Python-notebook

Notebook downloaden

Notebook-voorbeeld: Trainingsresultaten van model opslaan in Snowflake

In het volgende notebook worden aanbevolen procedures beschreven voor het gebruik van de Snowflake-Verbinding maken or voor Spark. Het schrijft gegevens naar Snowflake, maakt gebruik van Snowflake voor enkele eenvoudige gegevensmanipulatie, traint een machine learning-model in Azure Databricks en schrijft de resultaten terug naar Snowflake.

Ml-trainingsresultaten opslaan in Snowflake-notebook

Notebook downloaden

Veelgestelde vragen

Waarom worden mijn Spark DataFrame-kolommen niet weergegeven in dezelfde volgorde in Snowflake?

De Snowflake-Verbinding maken or voor Spark respecteert niet de volgorde van de kolommen in de tabel waarnaar wordt geschreven. U moet expliciet de toewijzing opgeven tussen DataFrame- en Snowflake-kolommen. Als u deze toewijzing wilt opgeven, gebruikt u de parameter columnmap.

Waarom worden INTEGER gegevens die naar Snowflake worden geschreven, teruggelezen als DECIMAL?

Snowflake vertegenwoordigt alle INTEGER typen als NUMBER, wat kan leiden tot een wijziging in het gegevenstype wanneer u gegevens schrijft naar en gegevens uit Snowflake leest. Gegevens kunnen bijvoorbeeld INTEGER worden geconverteerd DECIMAL bij het schrijven naar Snowflake, omdat INTEGER en DECIMAL semantisch gelijkwaardig zijn in Snowflake (zie Numeric Data Types van Snowflake).

Waarom zijn de velden in mijn Snowflake-tabelschema altijd hoofdletters?

Snowflake maakt standaard gebruik van hoofdlettervelden, wat betekent dat het tabelschema wordt geconverteerd naar hoofdletters.