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