Ler e gravar dados do Snowflake
O Azure Databricks fornece um conector do Snowflake no Databricks Runtime para dar suporte à leitura e à gravação de dados do Snowflake.
Importante
As configurações descritas nesse artigo são Experimentais. Recursos experimentais são fornecidos no estado em que se encontram e não têm suporte do Databricks por meio do suporte técnico para clientes. Para obter suporte completo à federação de consultas, você deve usar a Federação do Lakehouse, que permite que os usuários do Azure Databricks aproveitem a sintaxe do Catálogo do Unity e as ferramentas de governança de dados.
Consultar uma tabela do 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 no 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 do Notebook: conector do Snowflake para Spark
Os notebooks a seguir fornecem exemplos simples de como gravar e ler dados do Snowflake. Consulte Conector do Snowflake para Spark para obter mais detalhes.
Dica
Evite expor seu nome de usuário e senha do Snowflake em notebooks usando Segredos, que são demonstrados nos notebooks.
Notebook Snowflake Python
Exemplo do Notebook: salvar resultados de treinamento de modelo no Snowflake
O notebook a seguir mostra práticas recomendadas de uso do Snowflake Connector for Spark. Ele grava dados no Snowflake, usa o Snowflake para uma manipulação básica de dados, treina um modelo de aprendizado de máquina no Azure Databricks e grava os resultados de volta no Snowflake.
Armazenar resultados de treinamento de ML no notebook Snowflake
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á recebendo gravações; 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
?
O Snowflake representa todos os tipos INTEGER
como NUMBER
, o que pode causar 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, pois INTEGER
e DECIMAL
são semanticamente equivalentes no Snowflake (consulte Numeric Data Types, no site da Snowflake).
Por que os campos no meu esquema de tabela Snowflake estão sempre em maiúsculas?
A Snowflake usa campos em maiúsculas por padrão, o que significa que o esquema de tabela é convertido em maiúsculas.