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.
Experimental
As configurações descritas neste artigo são Experimentais. Os recursos experimentais são fornecidos como estão e não são suportados pelo Databricks por meio do suporte técnico ao cliente. Para obter suporte completo à federação query , você deve usar lakehouse Federation, que permite que os usuários do Databricks aproveitem a sintaxe do Unity Catalog e as ferramentas de governança de dados.
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 no site Snowflake. Para obter mais detalhes, consulte Snowflake Connector for Spark.
Dica
Evite expor seu nome de usuário e senha do Snowflake no Notebook usando Secrets, que são demonstrados no Notebook.
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.
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).