Настройка 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 сталкивается с любой ошибкой.