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

La documentation de fédération de requête héritée a été supprimée et peut ne pas être mise à jour. Les configurations mentionnées dans ce contenu ne sont pas officiellement approuvées ou testées par Databricks. Si Lakehouse Federation prend en charge votre base de données source, Databricks recommande d’utiliser cela à la place.

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 dans 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;

Langage de programmation 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 bloc-notes : Snowflake Connector pour Spark

Les notebooks suivants fournissent des exemples simples pour écrire et lire des données depuis Snowflake. Pour plus d’informations, consultez Le connecteur Snowflake pour Spark .

Conseil / Astuce

Évitez d’exposer votre nom d’utilisateur et mot de passe Snowflake dans les blocs-notes à l’aide de secrets, qui sont présentés dans les blocs-notes.

Notebook Snowflake Python

Obtenir un ordinateur portable

Exemple de bloc-notes : Enregistrer les résultats d’entraînement du modèle dans Snowflake

Le notebook suivant décrit les meilleures pratiques pour l’utilisation du connecteur Snowflake pour Spark. Il écrit des données dans Snowflake, utilise Snowflake pour certaines manipulations de données de base, entraîne un modèle Machine Learning dans Azure Databricks et écrit les résultats dans Snowflake.

Stocker les résultats de l’apprentissage ML dans le notebook Snowflake

Obtenir un ordinateur portable

Questions fréquemment posées (FAQ)

Pourquoi mes colonnes DataFrame Spark ne s’affichent-elles pas dans le même ordre dans Snowflake ?

Le connecteur Snowflake pour Spark ne respecte pas l’ordre des colonnes de la table en cours d’écriture ; vous devez spécifier explicitement le mappage entre les colonnes DataFrame et Snowflake. Pour spécifier ce mappage, utilisez le paramètre columnmap.

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

Snowflake représente tous les INTEGER types sous forme de NUMBER, ce qui peut entraîner une modification du type de données lorsque vous écrivez des données dans et lisez des données depuis 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 équivalentes dans Snowflake (voir Types de données numériques Snowflake).

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

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