Ler e gravar dados do Snowflake

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

Observação

O senhor pode preferir o lakehouse Federation para gerenciar consultas sobre os dados do Snowflake. Veja o que é lakehouse Federation.

Consultar uma tabela Snowflake no Databricks

Você pode configurar uma conexão com o Snowflake e depois query os dados. Antes de começar, verifique em qual versão do Databricks Runtime seus clusters são executados. O código a seguir fornece exemplo de sintaxe em Python, SQL e Scala.


# 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()
)
/* 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;
# 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 Notebook : Conector Snowflake para Spark

O Notebook a seguir fornece exemplos simples de como gravar e ler dados do Snowflake. Consulte Usando o Spark Connector para obter mais detalhes. Em particular, consulte Definindo opções de configuração para o conector para todas as opções de configuração.

Dica

Evite expor seu nome de usuário e senha do Snowflake no Notebook usando Secrets, que são demonstrados no Notebook.

Snowflake Python Notebook

Abra o bloco de anotações em outra guia

Exemplo Notebook : Salvar resultados de treinamento de modelo no Snowflake

O Notebook a seguir apresenta as práticas recomendadas para usar o Snowflake Connector para Spark. Ele grava dados no Snowflake, usa o Snowflake para alguma manipulação básica de dados, ensina um modelo de aprendizado de máquina no Databricks e grava os resultados de volta no Snowflake.

Armazene resultados de treinamento de ML no Snowflake Notebook

Abra o bloco de anotações em outra guia

Perguntas frequentes (FAQ)

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

O Snowflake Connector para 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 INTEGER gravados no Snowflake são lidos como DECIMAL?

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

Por que os campos em meu esquema de tabela Snowflake estão sempre em letras maiúsculas?

Snowflake usa campos maiúsculos por default, o que significa que o esquema da tabela é convertido em letras maiúsculas.