Condividi tramite


Leggere e scrivere dati da Snowflake

Azure Databricks fornisce un connettore Snowflake in Databricks Runtime per supportare la lettura e la scrittura di dati da Snowflake.

Importante

Le configurazioni descritte in questo articolo sono sperimentali. Le caratteristiche sperimentali vengono fornite come sono e non sono supportate da Databricks tramite il supporto tecnico del cliente. Per ottenere il supporto completo della federazione delle query, è consigliabile usare invece Lakehouse Federation, che consente agli utenti di Azure Databricks di sfruttare la sintassi di Unity Catalog e gli strumenti di governance dei dati.

Eseguire query su una tabella Snowflake in Azure Databricks

È possibile configurare una connessione a Snowflake e quindi eseguire query sui dati. Prima di iniziare, controllare la versione di Databricks Runtime in cui viene eseguito il cluster. Il codice seguente fornisce una sintassi di esempio in Python, SQL e 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()

Esempio di Notebook: connettore Snowflake per Spark

I Notebook seguenti forniscono semplici esempi di come scrivere e leggere i dati da Snowflake. Per altri dettagli, vedere Connettore Snowflake per Spark.

Suggerimento

Evitare di esporre il nome utente e la password Snowflake nei Notebooks usando i Segreti, illustrati nei Notebooks.

Notebook Python Snowflake

Ottenere il notebook

Esempio di Notebook: salvare i risultati del training del modello in Snowflake

Il Notebook seguente illustra le procedure consigliate per l'uso del connettore Snowflake per Spark. Scrive i dati in Snowflake, usa Snowflake per una manipolazione dei dati di base, esegue il training di un modello di Machine Learning in Azure Databricks e scrive i risultati in Snowflake.

Archiviare i risultati del training ml nel Notebook Snowflake

Ottenere il notebook

Domande frequenti

Perché le colonne del DataFrame Spark non vengono visualizzate nello stesso ordine in Snowflake?

Il connettore Snowflake per Spark non rispetta l'ordine delle colonne nella tabella in cui viene scritto; è necessario specificare in modo esplicito il mapping tra le colonne DataFrame e Snowflake. Per specificare questo mapping, usare il parametro columnmap.

Perché i dati INTEGER scritti in Snowflake sono letti come DECIMAL?

Snowflake rappresenta tutti i tipi INTEGER come NUMBER, ciò che può causare una modifica del tipo di dati quando si scrivono e si leggono dati da Snowflake. Ad esempio, i dati INTEGER possono essere convertiti DECIMAL in durante la scrittura in Snowflake, perché INTEGER e DECIMAL sono semanticamente equivalenti in Snowflake (vedere Tipi di dati numerici Snowflake).

Perché i campi nello schema della tabella Snowflake sono sempre in maiuscolo?

Snowflake usa campi in maiuscolo per impostazione predefinita, il che significa che lo schema della tabella viene convertito in maiuscolo.