Подключение Snowflake к dbt v2
Настройте адаптер Snowflake командой dbt init или вручную создайте profiles.yml с полями для выбранного способа аутентификации. Список функций Snowflake, поддерживаемых в режиме strict в dbt v2, приведён в разделе Поддержка функций Snowflake.
Адаптер Snowflake для dbt v2 поддерживает следующие способы аутентификации:
- Password
- Key pair
- Single sign-on (SSO)
- Password with MFA
- Workload Identity Federation
Snowflake прекращает поддержку входа только по паролю. Разработчикам следует использовать MFA или SSO. Вход по паролю остаётся доступным для сервисных пользователей Snowflake типа LEGACY_SERVICE.
Разрешения в хранилище
Пользователь или служебная учётная запись Snowflake, от имени которых подключается dbt v2, должны иметь возможность выполнять рабочие нагрузки dbt (запросы, операции с метаданными и стандартные материализации). Предоставьте привилегии через роль Snowflake, назначенную этому пользователю.
Необходимые объекты Snowflake
Перед подключением должны существовать следующие объекты:
| Объект | Назначение |
|---|---|
| Аккаунт | Идентификатор вашего аккаунта Snowflake |
| Пользователь | Служебная учётная запись или пользователь для dbt v2 |
| Роль | Роль с необходимыми привилегиями, назначенная пользователю |
| Виртуальный склад | Виртуальный склад для выполнения вычислений |
| База данных | Целевая база данных или базы данных для моделей dbt |
| Схема | Целевая схема или схемы в базе данных |
Основные операции
Для основных операций dbt необходимы следующие разрешения:
| Разрешение | Объект | Назначение |
|---|---|---|
USAGE | Виртуальный склад | Выполнение запросов |
USAGE | База данных | Доступ к базе данных |
USAGE | Схема | Доступ к схемам |
SELECT | Таблицы или представления | Чтение существующих данных и источников |
CREATE TABLE | Схема | Создание моделей, материализованных в виде таблиц |
CREATE VIEW | Схема | Создание моделей, материализованных в виде представлений |
INSERT | Таблицы | Загрузка данных в таблицы |
UPDATE | Таблицы | Обновление инкрементальных моделей |
DELETE | Таблицы | Инкрементальные модели с удалением и вставкой данных |
TRUNCATE | Таблицы | Полное обновление инкрементальных моделей |
DROP | Таблицы или представления | Замена существующих объектов |
Операции с метаданными
Для операций dbt с метаданными необходимы следующие разрешения:
| Разрешение | Объект | Назначение |
|---|---|---|
USAGE | INFORMATION_SCHEMA | Запрос метаданных таблиц и столбцов |
DESCRIBE TABLE | Таблицы | Получение информации о структуре таблиц |
SHOW OBJECTS | Схема | Получение списка отношений в схеме |
SHOW USER FUNCTIONS | Схема | Обнаружение UDF (если используются) |
Управление схемами и базами данных
Следующие разрешения для управления схемами и базами данных необходимы при определённых условиях:
| Разрешение | Объект | Когда требуется |
|---|---|---|
CREATE SCHEMA | База данных | Если dbt должен автоматически создавать схемы |
CREATE DATABASE | Аккаунт | Если dbt должен автоматически создавать базы данных |
Расширенные возможности
Для расширенных возможностей доступны следующие необязательные разрешения:
| Разрешение | Объект | Возможность |
|---|---|---|
CREATE STAGE | Схема | Промежуточное размещение файлов для seeds или снимков |
CREATE FILE FORMAT | Схема | Пользовательские форматы файлов |
CREATE SEQUENCE | Схема | Последовательности |
EXECUTE TASK | Схема | Задачи Snowflake |
Примеры ролей и выдачи прав через SQL приведены в разделе Разрешения Snowflake.
Параметры подключения Snowflake
Данные для настройки адаптера можно найти в меню аккаунта Snowflake:
- Нажмите на своё имя в боковой панели Snowflake.
- Наведите указатель на Account.
- Рядом с именем аккаунта нажмите View account details.
- Нажмите Config file и выберите нужные Warehouse и Database.
Настройка dbt v2
При запуске dbt init в CLI укажите следующие данные:
- Account: номер аккаунта Snowflake.
- User: имя пользователя Snowflake.
- Database: база данных Snowflake, которую нужно подключить к проекту.
- Warehouse: вычислительное хранилище для выполнения задач проекта.
- Schema: схема для разработки, промежуточной среды или развёртывания.
- Role (необязательно): роль, которую dbt принимает при подключении к хранилищу.
Файл profiles.yml также можно создать вручную. Формат полей показан в разделе Способы аутентификации. Если файл уже существует, можно сохранить текущие поля или перезаписать их.
Выберите способ аутентификации и заполните запрошенные поля.
Поддерживаемые способы аутентификации
- Password
- Key pair
- Single sign-on
- Workload Identity Federation
При аутентификации по паролю Snowflake запрашивает пароль аккаунта. Организации всё реже используют этот способ, переходя на более безопасные варианты.
Если выбрать Password with MFA, откроется страница входа в Snowflake, где нужно использовать ключ доступа или ввести код из приложения-аутентификатора.
Пример настройки с паролем
default:
target: dev
outputs:
dev:
type: snowflake
threads: 16
account: ABC123
user: JANE.SMITH@YOURCOMPANY.COM
database: JAFFLE_SHOP
warehouse: TRANSFORM
schema: JANE_SMITH
password: THISISMYPASSWORD
Пример настройки с паролем и MFA
default:
target: dev
outputs:
dev:
type: snowflake
threads: 16
authenticator: username_password_mfa
account: ABC123
user: JANE.SMITH@YOURCOMPANY.COM
database: JAFFLE_SHOP
warehouse: TRANSFORM
schema: JANE_SMITH
При аутентификации по паре ключей можно:
- Указать путь к файлу ключа.
- Вставить ключ в формате PEM непосредственно в конфигурацию.
Мы рекомендуем использовать формат PKCS#8 с шифрованием AES-256 для аутентификации с помощью пары ключей в dbt v2. dbt v2 не поддерживает устаревшее шифрование 3DES и форматы ключей без заголовка. Использование устаревших форматов ключей может привести к сбоям аутентификации.
Если вы столкнулись с ошибкой Key is PKCS#1 (RSA private key). Snowflake requires PKCS#8, ваш закрытый ключ имеет неверный формат. У вас есть два варианта:
-
(Рекомендуемое решение) Повторно экспортируйте ключ с использованием современного шифрования:
# Convert to PKCS#8 with AES-256 encryption
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 aes-256-cbc -inform PEM -out rsa_key.p8 -
(Временное решение) Добавьте заголовок
BEGINи завершающую строкуENDк телу PEM:-----BEGIN ENCRYPTED PRIVATE KEY-----
< Your existing encrypted private key contents >
-----END ENCRYPTED PRIVATE KEY-----
После настройки ключа можно указать парольную фразу, если она нужна.
Пример настройки пары ключей
default:
target: dev
outputs:
dev:
type: snowflake
threads: 16
account: ABC123
user: JANE.SMITH@YOURCOMPANY.COM
database: JAFFLE_SHOP
warehouse: TRANSFORM
schema: JANE_SMITH
private_key: '<Your existing encrypted private key contents>'
private_key_passphrase: YOURPASSPHRASEHERE
При едином входе сеанс Snowflake подтверждается в браузере.
По умолчанию для каждого нового подключения dbt нужно заново пройти аутентификацию в браузере. Коннектор Snowflake умеет кэшировать токен сеанса, но пока только на Windows и macOS.
Как включить эту функцию для своего аккаунта, описано в документации Snowflake.
Пример настройки SSO
default:
target: dev
outputs:
dev:
type: snowflake
threads: 16
authenticator: externalbrowser
account: ABC123
user: JANE.SMITH@YOURCOMPANY.COM
database: JAFFLE_SHOP
warehouse: TRANSFORM
schema: JANE_SMITH
Workload Identity Federation (WIF) позволяет входить в Snowflake из облачной среды с удостоверением этой среды. Snowflake сопоставляет удостоверение с сервисным пользователем, поэтому хранить пароль или ключ не нужно. Можно использовать токен OpenID Connect (OIDC), например выданный процессу GitHub Actions, или удостоверение AWS, Azure либо GCP.
Перед настройкой dbt создайте сервисного пользователя Snowflake с удостоверением рабочей нагрузки. См. документацию Snowflake.
Для аутентификации через WIF укажите следующие поля в profiles.yml:
| Параметр | Обязательный? | Описание |
|---|---|---|
method | Да | Укажите workload_identity. |
workload_identity_provider | Да | Поставщик удостоверения. Допустимые значения: OIDC, AWS, AZURE или GCP. |
token | Нет | Обязательно для OIDC. Передайте токен через env_var(). Для AWS, Azure и GCP поле не задаётся. |
workload_identity_entra_resource | Нет | Только для Azure. Задайте поле, если Snowflake ожидает пользовательское приложение Entra в качестве аудитории токена. Значение — URI идентификатора приложения, например api://APPLICATION_ID. |
Не задавайте authenticator вместе с method: профиль с обоими полями не будет работать.
Поле user необязательно. Snowflake использует сервисного пользователя, сопоставленного с удостоверением облачной среды.
Пример с OIDC:
default:
target: dev
outputs:
dev:
type: snowflake
threads: 16
account: ACCOUNT_ID # Snowflake account identifier
role: USER_ROLE # Snowflake role to assume
database: DATABASE_NAME # Snowflake database
warehouse: WAREHOUSE_NAME # Snowflake warehouse
schema: SCHEMA_NAME # dbt schema
method: workload_identity
workload_identity_provider: OIDC # Or AWS, AZURE, or GCP
token: "{{ env_var('SNOWFLAKE_TOKEN') }}" # OIDC token
Для AWS, Azure или GCP используйте ту же конфигурацию, изменив workload_identity_provider и убрав token. Эти варианты работают только при запуске dbt в соответствующей облачной среде.
Дополнительные сведения
Настройки Snowflake описаны в справочнике адаптера.
