Перейти к основному содержимому

Настройка Snowflake

Файл profiles.yml предназначен только для пользователей dbt Core

Если вы используете dbt Cloud, вам не нужно создавать файл profiles.yml. Этот файл предназначен только для пользователей dbt Core. Чтобы подключить вашу платформу данных к dbt Cloud, обратитесь к разделу О платформах данных.

  • Поддерживается: dbt Labs
  • Авторы: core dbt maintainers
  • Репозиторий на GitHub: dbt-labs/dbt-snowflake
  • Пакет на PyPI: dbt-snowflake
  • Канал в Slack: #db-snowflake
  • Поддерживаемая версия dbt Core: v0.8.0 и новее
  • Поддержка dbt Cloud: Supported
  • Минимальная версия платформы данных: n/a

Установка dbt-snowflake

Используйте pip для установки адаптера. До версии 1.8 установка адаптера автоматически устанавливала dbt-core и любые дополнительные зависимости. Начиная с версии 1.8, установка адаптера не устанавливает автоматически dbt-core. Это связано с тем, что адаптеры и версии dbt Core были разделены, и мы больше не хотим перезаписывать существующие установки dbt-core. Используйте следующую команду для установки:

Конфигурация dbt-snowflake

Для конфигурации, специфичной для Snowflake, пожалуйста, обратитесь к конфигурациям Snowflake.

Методы аутентификации

Аутентификация с использованием имени пользователя и пароля

Snowflake может быть настроен с использованием базовой аутентификации по имени пользователя и паролю, как показано ниже.

Вместе с добавлением параметра authenticator, обязательно выполните alter account set allow_client_mfa_caching = true; в вашем хранилище Snowflake. Это позволит вам легко проверять аутентификацию с помощью приложения DUO Mobile (если пропустить этот шаг, будут приходить push-уведомления для каждой модели, построенной при каждом dbt run).

Аутентификация с использованием пары ключей

Чтобы использовать аутентификацию с парой ключей, укажите private_key_path в вашей конфигурации, избегая использования password. При необходимости вы можете добавить private_key_passphrase. Примечание: принимаются незашифрованные закрытые ключи, поэтому добавляйте парольную фразу только при необходимости. Однако для версий dbt Core 1.5 и 1.6 конфигурации, использующие закрытый ключ в формате PEM (например, ключи, заключенные в теги BEGIN и END), не поддерживаются. В этих версиях вы должны использовать private_key_path для указания местоположения файла вашего закрытого ключа.

Начиная с версии dbt 1.7, dbt ввел возможность указывать private_key непосредственно в виде строки вместо private_key_path. Эта строка private_key может быть в формате DER, закодированном в Base64, представляющем байты ключа, или в формате PEM в виде обычного текста. Обратитесь к документации Snowflake для получения дополнительной информации о том, как они генерируют ключ.

Примечание: По умолчанию каждое подключение, которое открывает dbt, потребует повторной аутентификации в браузере. Пакет Snowflake connector поддерживает кэширование вашего токена сессии, но он в настоящее время поддерживает только Windows и Mac OS.

Обратитесь к документации Snowflake для получения информации о том, как включить эту функцию в вашем аккаунте.

Авторизация OAuth

Чтобы узнать, как настроить OAuth в Snowflake, обратитесь к их документации. Ваш администратор Snowflake должен сгенерировать OAuth токен для работы вашей конфигурации.

Укажите OAUTH_REDIRECT_URI в Snowflake: http://localhost:PORT_NUMBER. Например, http://localhost:8080.

После того, как ваш администратор Snowflake настроит OAuth, добавьте следующее в ваш файл profiles.yml:


my-snowflake-db:
target: dev
outputs:
dev:
type: snowflake
account: [account id]

# The following fields are retrieved from the Snowflake configuration
authenticator: oauth
oauth_client_id: [OAuth client id]
oauth_client_secret: [OAuth client secret]
token: [OAuth refresh token]

Конфигурации

"Базовые" конфигурации для целей Snowflake показаны ниже. Обратите внимание, что вам также следует указать конфигурации, связанные с аутентификацией, в зависимости от используемого метода аутентификации, как описано выше.

Все конфигурации

КонфигурацияОбязательно?Описание
accountДаАккаунт для подключения в соответствии с документацией Snowflake. См. примечания ниже
userДаПользователь для входа
databaseДаБаза данных, в которой dbt должен создавать модели
warehouseДаХранилище, используемое при построении моделей
schemaДаСхема, в которую по умолчанию строятся модели. Может быть переопределена с помощью пользовательских схем
roleНет (но рекомендуется)Роль, которую следует принять при выполнении запросов от имени указанного пользователя.
client_session_keep_aliveНетЕсли True, клиент Snowflake будет поддерживать соединения дольше, чем стандартные 4 часа. Это полезно при выполнении особенно длительных запросов (> 4 часов). По умолчанию: False (см. примечание ниже)
threadsНетКоличество параллельных моделей, которые должен строить dbt. Установите это значение выше, если используете большее хранилище. По умолчанию=1
query_tagНетЗначение, с которым будут помечены все запросы, для последующего поиска в представлении QUERY_HISTORY
retry_allНетЛогический флаг, указывающий, следует ли повторять попытки при всех ошибках Snowflake connector
retry_on_database_errorsНетЛогический флаг, указывающий, следует ли повторять попытки после возникновения ошибок типа snowflake.connector.errors.DatabaseError
connect_retriesНетКоличество попыток повторного подключения после неудачного соединения
connect_timeoutНетКоличество секунд ожидания между неудачными попытками подключения
reuse_connectionsНетЛогический флаг, указывающий, следует ли повторно использовать неактивные соединения для уменьшения общего количества открытых соединений. По умолчанию False.

account

Для AWS-аккаунтов в регионе US West по умолчанию можно использовать abc123 (без каких-либо других сегментов). Для некоторых AWS-аккаунтов вам придется добавить регион и/или облачную платформу. Например, abc123.eu-west-1 или abc123.eu-west-2.aws.

Для аккаунтов на базе GCP и Azure необходимо добавить регион и облачную платформу, такие как gcp или azure, соответственно. Например, abc123.us-central1.gcp. Для получения подробной информации см. документацию Snowflake: "Указание информации о регионе в имени хоста вашего аккаунта".

Также обратите внимание, что имя аккаунта Snowflake должно содержать только account_name без префикса organization_name. Чтобы определить, нужно ли добавлять регион и/или облачную платформу к локатору аккаунта в устаревшем формате, см. документацию Snowflake по "Форматы локаторов аккаунтов, не относящихся к VPS, по облачной платформе и региону".

client_session_keep_alive

Функция client_session_keep_alive предназначена для поддержания сессий Snowflake активными сверх типичного лимита тайм-аута в 4 часа. Реализация этой функции в snowflake-connector-python может предотвратить завершение процессов, которые ее используют (читайте: dbt) в определенных сценариях. Если вы столкнетесь с этим в вашем развертывании dbt, пожалуйста, сообщите нам в GitHub issue, и обойдите это, отключив keepalive.

query_tag

Теги запросов — это параметр Snowflake, который может быть весьма полезен в дальнейшем при поиске в представлении QUERY_HISTORY.

reuse_connections

Во время выполнения узлов (таких как модель и тест) dbt открывает соединения с хранилищем Snowflake. Установка этой конфигурации в True сокращает время выполнения, проверяя учетные данные только один раз для каждого потока.

retry_on_database_errors

Флаг retry_on_database_errors вместе с указанием количества connect_retries предназначен для настройки повторных попыток после того, как snowflake connector сталкивается с ошибками типа snowflake.connector.errors.DatabaseError. Эти повторные попытки могут быть полезны для обработки ошибок типа "JWT token is invalid" при использовании аутентификации с парой ключей.

retry_all

Флаг retry_all вместе с указанием количества connect_retries предназначен для настройки повторных попыток после того, как snowflake connector сталкивается с любой ошибкой.

0