Чтение и запись данных из Snowflake
Azure Databricks предоставляет соединитель Snowflake в среде выполнения Databricks для поддержки чтения и записи данных из Snowflake.
Внимание
Конфигурации, описанные в этой статье, являются экспериментальными. Экспериментальные функции предоставляются как есть и не поддерживаются Databricks через техническую поддержку клиентов. Чтобы обеспечить get полную поддержку федерации запросов, вместо этого следует использовать федерацию Lakehouse , что позволяет пользователям Azure Databricks воспользоваться преимуществами синтаксиса и средств управления данными Unity Catalog.
Запрос в Snowflake table на платформе Azure Databricks
Вы можете настроить подключение к Snowflake, а затем запросить данные. Перед началом работы проверьте, какая версия Databricks Runtime работает в кластере. Следующий код содержит пример синтаксиса в Python, SQL и 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()
Пример записной книжки: Соединитель Snowflake для Spark
В следующих записных книжках содержатся простые примеры записи и чтения данных в Snowflake. Дополнительные сведения см. в соединителе Snowflake для Spark .
Совет
Старайтесь не указывать в записных книжках имя пользователя и пароль Snowflake. Для этого используйте секреты, которые в них демонстрируются.
Записная книжка Python для Snowflake
Пример записной книжки: сохранение результатов обучения модели в Snowflake
В следующей записной книжке приведены рекомендации по использованию соединителя Snowflake для Spark. Он записывает данные в Snowflake, использует Snowflake для некоторой базовой обработки данных, обучает модель машинного обучения в Azure Databricks и записывает результаты обратно в Snowflake.
Хранение результатов машинного обучения в записной книжке Snowflake
Вопросы и ответы
Почему кадр данных Spark columns не отображается в Snowflake в том же порядке?
Соединитель Snowflake для Spark не учитывает порядок columns в table, в который производится запись; следует явно указать сопоставление между DataFrame и Snowflake columns. Чтобы указать это сопоставление, используйте параметр columnmap.
Почему данные записываются INTEGER
обратно в Snowflake DECIMAL
?
Snowflake представляет все типы INTEGER
как NUMBER
, что может привести к изменению типа данных при их записи и чтении в Snowflake. Например, данные INTEGER
могут быть преобразованы в DECIMAL
при записи в Snowflake, поскольку типы INTEGER
и DECIMAL
в Snowflake семантически эквивалентны (см. статью Числовые типы данных в Snowflake).
Почему поля в Snowflake tableschema всегда в заглавных буквах?
Snowflake использует поля верхнего регистра по умолчанию, что означает, что tableschema преобразуется в верхний регистр.