Настройка Redshift
profiles.yml предназначен только для пользователей dbt CoreЕсли вы используете dbt Cloud, вам не нужно создавать файл profiles.yml. Этот файл предназначен только для пользователей dbt Core. Чтобы подключить вашу платформу данных к dbt Cloud, обратитесь к разделу О платформах данных.
- Поддерживается: dbt Labs
- Авторы: core dbt maintainers
- Репозиторий на GitHub: dbt-labs/dbt-redshift
- Пакет на PyPI:
dbt-redshift - Канал в Slack: #db-redshift
- Поддерживаемая версия dbt Core: v0.10.0 и новее
- Поддержка dbt Cloud: Supported
- Минимальная версия платформы данных: n/a
Установка dbt-redshift
Используйте pip для установки адаптера. До версии 1.8 установка адаптера автоматически устанавливала dbt-core и любые дополнительные зависимости. Начиная с версии 1.8, установка адаптера не устанавливает автоматически dbt-core. Это связано с тем, что адаптеры и версии dbt Core были разделены, и мы больше не хотим перезаписывать существующие установки dbt-core.
Используйте следующую команду для установки:
Конфигурация dbt-redshift
Для конфигурации, специфичной для Redshift, пожалуйста, обратитесь к конфигурациям Redshift.
Конфигурации
| Поле профиля | Пример | Описание |
|---|---|---|
type | redshift | Тип хранилища данных, к которому вы подключаетесь |
host | hostname.region.redshift.amazonaws.com или workgroup.account.region.redshift-serverless.amazonaws.com | Хост кл астера |
port | 5439 | |
dbname | my_db | Имя базы данных |
schema | my_schema | Имя схемы |
connect_timeout | 30 | Количество секунд до истечения времени ожидания подключения. По умолчанию None |
sslmode | prefer | необязательно, установите sslmode для подключения к базе данных. По умолчанию prefer, который будет использовать 'verify-ca' для подключения. Для получения дополнительной информации о sslmode см. примечание о Redshift ниже |
role | None | Необязательно, идентификатор пользователя текущей сессии |
autocreate | false | Необязательно, по умолчанию false. Создает пользователя, если он не существует |
db_groups | ['ANALYSTS'] | Необязательно. Список существующих имен групп базы данных, к которым DbUser присоединяется для текущей сессии |
ra3_node | true | Необязательно, по умолчанию False. Включает источники из разных баз данных |
autocommit | true | Необязательно, по умолчанию True. Включает автокоммит после каждого оператора |
retries | 1 | Количество повтор ных попыток |
Параметры аутентификации
Методы аутентификации, которые поддерживает dbt Core на Redshift, включают:
Database— Аутентификация на основе пароля (по умолчанию, будет использоваться, еслиmethodне указан)IAM User— Аутентификация пользователя IAM через AWS Profile
Нажмите на один из этих методов аутентификации для получения более подробной информации о том, как настроить ваш профиль подключения. Каждая вкладка также включает пример конфигурационного файла profiles.yml для вашего ознакомления.
- Database
- IAM User via AWS Profile (Core)
Следующая таблица содержит параметры для метода подключения на основе базы данных (пароль).
| Поле пр офиля | Пример | Описание |
|---|---|---|
method | database | Оставьте этот параметр неконфигурированным или установите его в database |
user | username | Имя пользователя учетной записи для входа в ваш кластер |
password | password1 | Пароль для аутентификации |
Пример profiles.yml для аутентификации базы данных
company-name:
target: dev
outputs:
dev:
type: redshift
host: hostname.region.redshift.amazonaws.com
user: username
password: password1
dbname: analytics
schema: analytics
port: 5439
# Необязательные конфигурации Redshift:
sslmode: prefer
role: None
ra3_node: true
autocommit: true
threads: 4
connect_timeout: None
Следующая таблица перечисляет параметры аутентификации для использования аутентификации IAM.
Чтобы настроить профиль Redshift с использованием аутентификации IAM, установите параметр method в iam, как показано ниже. Обратите внимание, что пароль не требуется при использовании аутентификации IAM. Для получения дополнительной информации об этом типе аутентификации обратитесь к документации Redshift и документации boto3 о генерации учетных данных пользователя с помощью IAM Auth.
Если вы получаете ошибку "You must specify a region" при использовании аутентификации IAM, вероятно, ваши учетные данные AWS настроены неправильно. Попробуйте запустить aws configure, чтобы настроить ключи доступа AWS, и выберите регион по умолчанию. Если у вас есть вопросы, пожалу йста, обратитесь к официальной документации AWS о настройках конфигурации и файлов учетных данных.
| Поле профиля | Пример | Описание |
|---|---|---|
method | IAM | используйте IAM для аутентификации через аутентификацию пользователя IAM |
iam_profile | analyst | dbt будет использовать указанный профиль из вашего файла ~/.aws/config |
cluster_id | CLUSTER_ID | Требуется только для аутентификации IAM для предоставленного кластера, не для Serverless |
user | username | Пользователь, выполняющий запросы к базе данных, игнорируется для Serverless (но поле все равно требуется) |
region | us-east-1 | Регион вашего экземпляра Redshift |
Пример profiles.yml для IAM
my-redshift-db:
target: dev
outputs:
dev:
type: redshift
method: iam
cluster_id: CLUSTER_ID
host: hostname.region.redshift.amazonaws.com
user: alice
iam_profile: analyst
region: us-east-1
dbname: analytics
schema: analytics
port: 5439
# Необязательные конфигурации Redshift:
threads: 4
connect_timeout: None
retries: 1
role: None
sslmode: prefer
ra3_node: true
autocommit: true
autocreate: true
db_groups: ['ANALYSTS']
Указание профиля IAM
Когда установлена конфигурация iam_profile, dbt будет использовать указанный профиль из вашего файла ~/.aws/config вместо использования имени профиля default.
Примечания к Redshift
Изменение sslmode
До dbt-redshift 1.5 в качестве драйвера использовался psycopg2. psycopg2 принимает disable, prefer, allow, require, verify-ca, verify-full в качестве допустимых значений для sslmode и не имеет параметра ssl, как указано в документации PostgreSQL doc.
В dbt-redshift 1.5 мы перешли на использование redshift_connector, который принимает verify-ca и verify-full в качестве допустимых значений для sslmode и имеет параметр ssl со значением True или False, согласно документации redshift doc.
Для обратной совместимости dbt-redshift теперь поддерживает допустимые значения для sslmode в psycopg2. Мы добавили логику преобразования, сопоставляющую каждое из значений sslmode, принимаемых psycopg2, с соответствующими параметрами ssl и sslmode в redshift_connector.
Таблица ниже подробно описывает принимаемые параметры sslmode и то, как будет установлено соединение в соответствии с каждым вариантом:
Параметр sslmode | Ожидаемое поведение в dbt-redshift | Действия за кулисами |
|---|---|---|
| disable | Соединение будет установлено без использования ssl | Установить ssl = False |
| allow | Соединение будет установлено с использованием verify-ca | Установить ssl = True & sslmode = verify-ca |
| prefer | Соединение будет установлено с использованием verify-ca | Установить ssl = True & sslmode = verify-ca |
| require | Соединение будет установлено с использованием verify-ca | Установить ssl = True & sslmode = verify-ca |
| verify-ca | Соединение будет установлено с использованием verify-ca | Установить ssl = True & sslmode = verify-ca |
| verify-full | Соединение будет установлено с использованием verify-full | Установить ssl = True & sslmode = verify-full |
При установлении соединения с использованием verify-ca, будет искать сертификат CA в ~/redshift-ca-bundle.crt.
Для получения более подробной информации об изменениях sslmode, наших дизайнерских решениях и обоснованиях — пожалуйста, обратитесь к PR, касающемуся этого изменения.
Параметр autocommit
Режим автокоммита полезен для выполнения команд, которые выполняются вне транзакции. Объекты соединения, используемые в Python, должны иметь autocommit = True для выполнения операций, таких как CREATE DATABASE и VACUUM. По умолчанию autocommit отключен в redshift_connector, но мы изменили это значение по умолчанию на True, чтобы гарантиро вать успешное выполнение определенных макросов в вашем проекте dbt.
Если необходимо, вы можете определить отдельную цель с autocommit=True, как показано ниже:
profile-to-my-RS-target:
target: dev
outputs:
dev:
type: redshift
...
autocommit: False
profile-to-my-RS-target-with-autocommit-enabled:
target: dev
outputs:
dev:
type: redshift
...
autocommit: True
Чтобы запустить определенные макросы с автокоммитом, загрузите профиль с автокоммитом, используя флаг --profile. Для получения дополнительной информации, пожалуйста, обратитесь к этому PR.
Устаревшие параметры profile в 1.5
-
iam_duration_seconds -
keepalives_idle
Ключи sort и dist
Где это возможно, dbt позволяет использовать ключи sort и dist. См. раздел о специфических конфигурациях Redshift.
Повторные попытки
Если dbt-redshift сталкивается с операционной ошибкой или истечением времени ожидания при открытии нового соединения, он будет повторять попытку до количества раз, указанного в retries. Если установлено 2+ повторных попыток, dbt будет ждать 1 секунду перед повторной попыткой. Значение по умолчанию — 1 повторная попытка. Если установлено значение 0, dbt не будет повторять попытки вообще.