Настройка 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 не будет повторять попытки вообще.