Delen via


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.

Belangrijk

De configuraties die in dit artikel worden beschreven, zijn experimenteel. Experimentele functies worden geleverd als zodanig en worden niet ondersteund door Databricks via technische ondersteuning van klanten. Als u volledige ondersteuning voor queryfederatie wilt krijgen, moet u in plaats daarvan Lakehouse Federation gebruiken, zodat uw Azure Databricks-gebruikers kunnen profiteren van de syntaxis van Unity Catalog en hulpprogramma's voor gegevensbeheer.

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-connector voor Spark

De volgende notebooks bieden eenvoudige voorbeelden van het schrijven van gegevens naar en het lezen van gegevens uit Snowflake. Zie Snowflake Connector voor Spark voor meer informatie.

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