Partilhar via


Ler e gravar dados do Snowflake

O Azure Databricks fornece um conector Snowflake no Databricks Runtime para dar suporte à leitura e gravação de dados do Snowflake.

Importante

A documentação de federação de consultas herdada foi desativada e pode não ser atualizada no futuro. As configurações mencionadas neste conteúdo não são oficialmente endossadas ou testadas pela Databricks. Se a Lakehouse Federation oferecer suporte ao seu banco de dados de origem, o Databricks recomenda usá-lo.

Consultar uma tabela Snowflake no Azure Databricks

Você pode configurar uma conexão com o Snowflake e, em seguida, consultar dados. Antes de começar, verifique em qual versão do Databricks Runtime seu cluster é executado. O código a seguir fornece sintaxe de exemplo em 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;

Escala


# 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()

Exemplo de caderno: "Snowflake Connector for Spark"

Os blocos de anotações a seguir fornecem exemplos simples de como gravar e ler dados do Snowflake. Consulte Snowflake Connector for Spark para obter mais detalhes.

Sugestão

Evite expor seu nome de usuário e senha do Snowflake em blocos de anotações usando Segredos, que são demonstrados nos blocos de anotações.

Caderno Snowflake Python

Obter caderno

Exemplo de bloco de anotações: salvar resultados de treinamento de modelo no Snowflake

O bloco de anotações a seguir apresenta as práticas recomendadas para usar o Snowflake Connector for Spark. Ele grava dados no Snowflake, usa o Snowflake para alguma manipulação básica de dados, treina um modelo de aprendizado de máquina no Azure Databricks e grava os resultados no Snowflake.

Armazene os resultados do treinamento de ML no notebook do Snowflake

Obter caderno

Perguntas frequentes (FAQ)

Por que minhas colunas do Spark DataFrame não aparecem na mesma ordem no Snowflake?

O Snowflake Connector for Spark não respeita a ordem das colunas na tabela que está sendo gravada; você deve especificar explicitamente o mapeamento entre as colunas DataFrame e Snowflake. Para especificar esse mapeamento, use o parâmetro columnmap.

Por que os dados gravados no Snowflake são INTEGER lidos como DECIMAL?

Snowflake representa todos os INTEGER tipos como NUMBER, o que pode causar uma alteração no tipo de dados quando você grava e lê dados do Snowflake. Por exemplo, INTEGER os dados podem ser convertidos em DECIMAL ao gravar em Snowflake, porque INTEGER e DECIMAL são semanticamente equivalentes em Snowflake (consulte Snowflake Numeric Data Types).

Por que os campos no meu esquema de tabela do Snowflake são sempre maiúsculos?

O Snowflake usa campos maiúsculos por padrão, o que significa que o esquema da tabela é convertido em maiúsculas.