Ler e gravar dados do Snowflake
A 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 no estado em que se encontram e não recebem suporte do site Databricks por meio do suporte técnico ao cliente. Para obter suporte completo à federação de consultas, o senhor deve usar a lakehouse Federation, que permite que os usuários do Databricks aproveitem as ferramentas de sintaxe e governança de dados do Unity Catalog.
Consultar uma tabela Snowflake no Databricks
O senhor pode configurar uma conexão com o Snowflake e, em seguida, consultar os dados. Antes de começar, verifique em qual versão do Databricks Runtime o senhor executa o clustering. O código a seguir fornece exemplos de sintaxe em Python, SQL e Scala.
- Python
- SQL
- 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()
Notebook exemplo: Conector para Snowflake 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.
Evite expor o nome de usuário e a senha do Snowflake no Notebook usando Secrets, que são demonstrados no Notebook.
Snowflake Python Caderno de anotações
Notebook exemplo: Salvar os resultados do treinamento do modelo no Snowflake
O seguinte Notebook apresenta as práticas recomendadas para usar o Conector Snowflake para Spark. Ele grava dados em Snowflake, usa Snowflake para algumas manipulações básicas de dados, treina um modelo de aprendizado de máquina em Databricks e grava os resultados de volta em Snowflake.
Armazene os resultados do ML treinamento no Snowflake Notebook
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; o senhor deve especificar explicitamente o mapeamento entre as colunas do DataFrame e do Snowflake. Para especificar esse mapeamento, use o parâmetro columnmap.
Por que os dados do INTEGER
gravados no Snowflake são lidos de volta como DECIMAL
?
O Snowflake representa todos os tipos de INTEGER
como NUMBER
, o que pode causar uma alteração no tipo de dados quando o senhor grava e lê dados do Snowflake. Por exemplo, os dados de INTEGER
podem ser convertidos para DECIMAL
ao serem gravados 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 em maiúsculas pelo site default, o que significa que o esquema da tabela é convertido em maiúsculas.