Подключение к Snowflake Общедоступно (GA) Совместимо с dbt v2
Snowflake планирует увеличить размер столбцов по умолчанию для строковых и двоичных типов данных в сентябре 2026 года. После внедрения этого изменения в версиях dbt-snowflake ниже v1.10.6 могут возникать ошибки при построении некоторых инкрементальных моделей.
Подключения и учётные данные в dbt platform наследуют права доступа настроенных учётных записей. Вы можете настроить роли и связанные с ними права доступа в Snowflake в соответствии с требованиями вашей компании и детально настроить доступ к объектам баз данных в вашей учётной записи.
Подробнее о настройке ролей в Snowflake см. в разделе Права доступа в Snowflake. Сведения о том, какие функции Snowflake поддерживаются в dbt v2 в режиме strict, см. в разделе Поддержка функций Snowflake.
Права доступа к вычислительному складу для dbt v2
Пользователь или служебная учётная запись 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 |
Примеры ролей в Snowflake см. в разделе Права доступа в Snowflake.
Поля подключения
При создании подключения к Snowflake необходимо заполнить следующие поля:
| Поле | Описание | Примеры |
|---|---|---|
| Account | Учётная запись Snowflake, к которой нужно подключиться. Посмотрите здесь, как должно выглядеть значение поля Account в зависимости от вашего региона. | |
| Role | Обязательное поле, указывающее роль, которую следует использовать после подключения к Snowflake | transformer |
| Database | Логическая база данных, к которой нужно подключиться и в которой будут выполняться запросы. | analytics |
| Warehouse | Виртуальный вычислительный склад, используемый для выполнения запросов. | transforming |
Методы аутентификации
В этом разделе описаны различные методы аутентификации для подключения dbt к Snowflake. Учётные данные сред развёртывания (Production, Staging, General) настраиваются глобально в разделе Connections настроек Account settings. Отдельные пользователи настраивают свои учётные данные в разделе Credentials своего профиля.
В dbt platform нельзя создавать новые учётные данные Snowflake с использованием имени пользователя и пароля. Для новых учётных данных разработки и развёртывания по умолчанию используется аутентификация с помощью пары ключей. Для пользовательских учётных данных на тарифах уровня Enterprise также доступен Snowflake OAuth, если он настроен для подключения. Чтобы обновить существующие учётные данные с паролем, см. раздел Имя пользователя и пароль с MFA.
Пара ключей
Доступно в: средах разработки, средах развёртывания
Если вы впервые создаёте учётные данные Snowflake в dbt platform, по умолчанию используется аутентификация с помощью пары ключей. Используйте её для учётных данных как разработки, так и развёртывания. Метод аутентификации Keypair использует аутентификацию с помощью пары ключей Snowflake для проверки учётных данных разработки или развёртывания проекта dbt.
-
После создания зашифрованной пары ключей обязательно задайте
rsa_public_keyдля пользователя Snowflake, который будет проходить аутентификацию в dbt:alter user jsmith set rsa_public_key='MIIBIjANBgkqh...'; -
Затем заполните поля Private Key и Private Key Passphrase на странице Credentials, чтобы завершить настройку аутентификации dbt в Snowflake с помощью пары ключей.
- Примечание: допускается использование незашифрованных закрытых ключей. Используйте парольную фразу только при необходимости. В dbt можно указать
private_keyнепосредственно в виде строки вместоprivate_key_path. Эта строкаprivate_keyможет содержать ключ в формате DER с кодировкой Base64, представляющий байты ключа, или в текстовом формате PEM. Подробнее о создании ключей см. в документации Snowflake. - Указание закрытого ключа с помощью переменной окружения (например,
{{ env_var('DBT_PRIVATE_KEY') }}) не поддерживается.
- Примечание: допускается использование незашифрованных закрытых ключей. Используйте парольную фразу только при необходимости. В dbt можно указать
-
Для правильного заполнения поля Private Key обязательно включите строки-комментарии. Если вы получаете ошибку
Could not deserialize key dataилиJWT token, подробнее см. в разделе Устранение неполадок.
Пример:
-----BEGIN ENCRYPTED PRIVATE KEY-----
< encrypted private key contents here - line 1 >
< encrypted private key contents here - line 2 >
< ... >
-----END ENCRYPTED PRIVATE KEY-----
Пара ключей в dbt v2
Мы рекомендуем использовать формат 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-----
Snowflake OAuth
Доступно в: средах разработки, только на тарифах уровня Enterprise
Метод аутентификации OAuth позволяет dbt выполнять запросы в среде разработки от имени пользователя Snowflake без настройки пароля Snowflake в dbt.
Подробнее о настройке подключения Snowflake OAuth в dbt см. в документации по настройке Snowflake OAuth.
Если ваши учётные данные по-прежнему используют имя пользователя и пароль, вы можете просмотреть существующую конфигурацию в разделе Credentials, профилях подключений или формах учётных данных развёртывания, но не сможете сохранить изменения, пока не переключите Auth method на пару ключей или OAuth. Если учётные данные с паролем всё ещё используются, в верхней части вашей учётной записи также может отображаться предупреждающий баннер.
Чтобы отказаться от использования имени пользователя и пароля, выполните действия из раздела Пара ключей или Snowflake OAuth.
Имя пользователя и пароль с MFA
Доступно для: только существующих учётных данных разработки и развёртывания
Если при планировании перехода вы всё ещё используете имя пользователя и пароль, Snowflake требует MFA для всех входов с паролем. Поддержка MFA в Snowflake обеспечивается сервисом Duo Security.
-
В dbt задайте следующий расширенный атрибут на странице General settings среды разработки в разделе Extended attributes:
authenticator: username_password_mfa -
Чтобы уменьшить количество запросов подтверждения при подключении к Snowflake с MFA, включите кэширование токенов в Snowflake.
-
Если пользователи пропускают запросы подтверждения и их учётные записи Snowflake блокируются, при необходимости можно отключить автоматические повторные попытки, добавив следующую настройку в тот же раздел Extended attributes:
connect_retries: 0
Конфигурация
Сведения об оптимизации производительности с помощью настроек dbt, специфичных для платформы данных, см. в разделе Конфигурация для Snowflake.
URL с пользовательским доменом
Чтобы подключиться к Snowflake через пользовательский домен (vanity URL), а не через идентификатор учётной записи (account locator), используйте расширенные атрибуты, указав пользовательский домен в параметре host:
host: https://custom_domain_to_snowflake.com
Эта конфигурация может конфликтовать со Snowflake OAuth при использовании PrivateLink. Если пользователи не могут получить доступ к серверам аутентификации Snowflake из-за сетевых ограничений, обратитесь в службу поддержки dbt, чтобы найти обходное решение для такой архитектуры.
Устранение неполадок
Если вы получаете ошибку Could not deserialize key data или JWT token, ознакомьтесь со следующими причинами и решениями:


