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 get suporte completo à federação de consultas, você deve usar Lakehouse Federation, que permite que os usuários do Azure Databricks aproveitem as ferramentas de sintaxe e governança de dados do Unity Catalog.
Consultar um Snowflake table 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 o meu Spark DataFrame columns não aparece na mesma ordem no Snowflake?
O Snowflake Connector para Spark não respeita a ordem do columns no table para o qual se está a escrever; deve-se especificar claramente o mapeamento entre o DataFrame e o Snowflake columns. 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).
Porque é que os campos no meu Snowflake tableschema estão sempre em maiúsculas?
O Snowflake usa campos maiúsculos por padrão, o que significa que o tableschema é convertido em maiúsculas.