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

Настройка 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 показаны ниже. Обратите внимание, что вам также следует указать конфигурации, связанные с аутентификацией, в зависимости от используемого метода аутентификации, как описано выше.

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

КонфигурацияОбязательно?Описание
accountYesАккаунт, к которому нужно подключаться, в соответствии с документацией Snowflake. См. примечания ниже
userYesПользователь, под которым выполняется вход
databaseYesБаза данных, в которой dbt должен создавать модели
warehouseYesWarehouse, который будет использоваться при сборке моделей
schemaYesСхема, в которую по умолчанию будут собираться модели. Может быть переопределена с помощью custom schemas
roleNo (but recommended)Роль, которая будет использоваться при выполнении запросов от имени указанного пользователя
client_session_keep_aliveNoЕсли True, клиент Snowflake будет поддерживать соединения дольше стандартных 4 часов. Это полезно при выполнении особенно длительных запросов (> 4 часов). По умолчанию: False (см. примечание ниже)
threadsNoКоличество моделей, которые dbt должен собирать параллельно. Увеличьте значение при использовании более крупного warehouse. По умолчанию = 1
query_tagNoЗначение, которым будут помечаться все запросы, для последующего поиска в представлении QUERY_HISTORY
retry_allNoБулев флаг, указывающий, следует ли выполнять повторные попытки при всех ошибках Snowflake connector
retry_on_database_errorsNoБулев флаг, указывающий, следует ли выполнять повторные попытки после возникновения ошибок типа snowflake.connector.errors.DatabaseError
connect_retriesNoКоличество повторных попыток после неудачного подключения
connect_timeoutNoКоличество секунд ожидания между неудачными попытками подключения
reuse_connectionsNoБулев флаг, указывающий, следует ли повторно использовать простаивающие соединения для уменьшения общего числа открытых соединений. По умолчанию False
platform_detection_timeout_secondsNoТайм-аут (в секундах) для определения платформы. По умолчанию 0.0. Установите положительное значение при использовании аутентификации Workload Identity Federation (WIF)
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 столкнётся с любой ошибкой.

Нашли ошибку?

0
Loading