Настройка Snowflake
profiles.yml предназначен только для dbt Core и dbt FusionЕсли вы используете dbt platform, вам не нужно создавать файл profiles.yml. Этот файл требуется только в том случае, если вы используете dbt Core или dbt Fusion локально. Чтобы узнать больше о требованиях к Fusion, см. раздел Supported features. Чтобы подключить вашу платформу данных к dbt, см. раздел About data platforms.
- Поддерживается: dbt Labs
- Авторы: core dbt maintainers
- Репозиторий GitHub: dbt-labs/dbt-adapters
- Пакет PyPI:
dbt-snowflake - Канал в Slack: #db-snowflake
- Поддерживаемая версия dbt Core: v0.8.0 и новее
- Поддержка dbt: Supported
- Минимальная версия платформы данных: n/a
Установка dbt-snowflake
Установите адаптер с помощью pip. До версии 1.8 установка адаптера автоматически устанавливала dbt-core и любые дополнительные зависимости. Начиная с 1.8 установка адаптера не устанавливает dbt-core автоматически. Это потому, что версии адаптеров и dbt Core были развязаны, и мы больше не хотим перезаписывать существующие установки dbt-core.
Используйте следующую команду для установки:
python -m pip install dbt-core dbt-snowflake
Настройка dbt-snowflake
Конфигурацию, специфичную для Snowflake, см. на странице настроек Snowflake.
Методы аутентификации
Аутентификация с использованием имени пользователя и пароля
Snowflake может быть настроен с использованием базовой аутентификации по имени пользователя и паролю, как показано ниже.
Примечание: Чтобы не получать push-уведомления Duo при каждом запуске сборки моделей, включите кэширование MFA-токенов в вашем Snowflake warehouse, выполнив команду alter account set allow_client_mfa_caching = true; с ролью ACCOUNTADMIN.
Аутентификация с использованием пары ключей
Чтобы использовать аутентификацию с парой ключей, укажите private_key_path в вашей конфигурации, избегая использования password. При необходимости вы можете добавить private_key_passphrase. Примечание: принимаются незашифрованные закрытые ключи, поэтому добавляйте парольную фразу только при необходимости. Однако для версий dbt Core 1.5 и 1.6 конфигурации, использующие закрытый ключ в формате PEM (например, ключи, заключенные в теги BEGIN и END), не поддерживаются. В этих версиях вы должны использовать private_key_path для указания местоположения файла вашего закрытого ключа.
dbt может указывать private_key напрямую в виде строки вместо использования private_key_path. Эта строка private_key может быть либо в формате DER, закодированном в Base64 (представляющем байты ключа), либо в текстовом формате PEM. Подробнее о том, как Snowflake генерирует ключи, см. в документации Snowflake.
Примечание: Чтобы избежать запросов аутентификации для каждого подключения dbt (что может приводить к открытию десятков вкладок SSO), включите кэширование подключений в вашем хранилище Snowflake, выполнив команду alter account set allow_id_token = true; с ролью ACCOUNTADMIN.
Авторизация 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 показаны ниже. Обратите внимание, что вам также следует указать конфигурации, связанные с аутентификацией, в зависимости от используемого метода аутентификации, как описано выше.
Все конфигурации
| Loading table... |
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.
platform_detection_timeout_seconds
Коннектор Snowflake использует параметр platform_detection_timeout_seconds, чтобы определить, сколько времени он будет ждать при попытке определить облачную платформу для подключения. Этот параметр доступен начиная с версии dbt Core v1.10.
- Установите значение
0.0(по умолчанию), чтобы отключить определение облачной платформы и ускорить установление соединения. - Устанавливайте положительное значение только в том случае, если вы используете аутентификацию WIF, которая требует, чтобы коннектор определял облачное окружение.
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_on_database_errors имеет значение False при использовании dbt Core (например, если вы запускаете dbt локально с помощью pip install dbt-core dbt-snowflake).
However, in the dbt platform, this setting is automatically set to True, unless the user explicitly configures it.
retry_all
Флаг retry_all вместе с указанием количества connect_retries предназначен для того, чтобы сделать повторы попыток подключения настраиваемыми после того, как коннектор Snowflake столкнётся с любой ошибкой.