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

As configurações descritas neste artigo são experimentais. Os recursos experimentais são fornecidos no estado em que se encontram e não são suportados pelo Databricks por meio do suporte técnico ao cliente. Para obter suporte completo à federação de consultas, você deve usar a Lakehouse Federation, que permite que os usuários do Azure Databricks aproveitem a sintaxe do Catálogo Unity e as ferramentas de governança de dados.

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;

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

Exemplo de bloco de anotações: 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.

Gorjeta

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 Python Snowflake

Obter o bloco de notas

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.

Resultados do treinamento de ML da loja no notebook Snowflake

Obter o bloco de notas

Perguntas mais 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.