Partager via


Lire et écrire des données à partir de Snowflake

Azure Databricks fournit un connecteur Snowflake dans Databricks Runtime pour prendre en charge la lecture et l’écriture de données à partir de Snowflake.

Important

Les configurations décrites dans cet article sont Expérimentales. Les fonctionnalités expérimentales sont fournies en l’état et ne sont pas prises en charge par Databricks via le support technique client. Pour bénéficier d’une prise en charge complète de la fédération de requêtes, vous devez plutôt utiliser Lakehouse Federation, qui permet à vos utilisateurs Azure Databricks de profiter de la syntaxe Unity Catalog et des outils de gouvernance des données.

Interroger une table Snowflake dans Azure Databricks

Vous pouvez configurer une connexion à Snowflake, puis interroger des données. Avant de commencer, vérifiez la version de Databricks Runtime sur laquelle votre cluster s’exécute. Le code suivant fournit un exemple de syntaxe en Python, SQL et 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()

Exemple de notebook : Connecteur Snowflake pour Spark

Les notebooks suivants fournissent des exemples simples de la manière d’écrire des données dans Snowflake et de lire des données à partir de Snowflake. Pour plus d’informations, consultez Connecteur Snowflake pour Spark.

Conseil

Évitez d’exposer votre nom d’utilisateur et votre mot de passe Snowflake dans les notebooks en utilisant des secrets, dont la démonstration est faite dans les notebooks.

Notebook Snowflake en Python

Obtenir le notebook

Exemple de notebook : Enregistrer les résultats de l’apprentissage du modèle dans Snowflake

Le notebook suivant présente les meilleures pratiques d’utilisation du connecteur Snowflake pour Spark. Il écrit des données dans Snowflake, utilise Snowflake pour une manipulation de base des données, effectue l’apprentissage d’un modèle Machine Learning dans Azure Databricks et réécrit les résultats dans Snowflake.

Notebook pour stocker les résultats de la formation ML dans Snowflake

Obtenir le notebook

Forum Aux Questions (FAQ)

Pourquoi les colonnes de mon DataFrame Spark n’apparaissent-elles pas dans le même ordre dans Snowflake ?

Le connecteur Snowflake pour Spark ne respecte pas l’ordre des colonnes de la table dans laquelle les données sont écrites ; vous devez spécifier explicitement le mappage entre les colonnes du DataFrame et celles de Snowflake. Pour spécifier ce mappage, utilisez le paramètre columnmap.

Pourquoi les données INTEGERécrites dans Snowflake sont-elles toujours lues en DECIMAL ?

Snowflake représente tous les types INTEGER en tant que NUMBER, ce qui peut entraîner un changement de type de données lorsque vous écrivez et lisez des données dans Snowflake. Par exemple, les données INTEGER peuvent être converties en DECIMAL lors de l’écriture dans Snowflake, car INTEGER et DECIMAL sont sémantiquement équivalents dans Snowflake (voir la page Snowflake Numeric Data Types).

Pourquoi les champs de mon schéma de table Snowflake sont-ils toujours en majuscules ?

Snowflake utilise des champs en majuscules par défaut, ce qui signifie que le schéma de la table est converti en majuscules.