(Версии dbt: v2.0 и новее)

# Подключение Redshift к dbt v2

Локальная разработка

Настройте адаптер Redshift командой `dbt init` или вручную создайте `profiles.yml` с полями для выбранного способа аутентификации.

Адаптер Redshift для dbt v2 поддерживает следующие [способы аутентификации](#supported-authentication-types):

* Password
* IAM profile
* IAM Identity Center (browser)

## Разрешения в хранилище

Пользователь базы данных Redshift, которого использует dbt v2, должен иметь возможность выполнять рабочие нагрузки dbt и читать метаданные каталога, используемые для интроспекции.

### Необходимые объекты Redshift

Перед подключением следующие объекты должны существовать или быть доступны:

| Объект                                                        | Назначение                                  |
| ------------------------------------------------------------- | ------------------------------------------- |
| **Кластер** (provisioned) или **рабочая группа** (serverless) | Вычислительный ресурс                       |
| **База данных**                                               | Целевая база данных                         |
| **Схема**                                                     | Целевая схема в базе данных                 |
| **Пользователь**                                              | Пользователь базы данных для аутентификации |
| **Роль или профиль IAM** (необязательно)                      | Для аутентификации на основе IAM            |

### Основные разрешения

Для базовых функций dbt необходимы следующие разрешения:

| Разрешение | Объект                    | Назначение                              |
| ---------- | ------------------------- | --------------------------------------- |
| `USAGE`    | Схема                     | Доступ к схеме                          |
| `CREATE`   | Схема                     | Создание таблиц и представлений в схеме |
| `SELECT`   | Таблицы или представления | Чтение данных                           |
| `INSERT`   | Таблицы                   | Вставка данных                          |
| `UPDATE`   | Таблицы                   | Обновление данных                       |
| `DELETE`   | Таблицы                   | Удаление данных                         |
| `DROP`     | Таблицы или представления | Удаление или замена объектов            |
| `TRUNCATE` | Таблицы                   | Очистка таблиц                          |

### Операции с метаданными

dbt v2 запрашивает следующие системные отношения Redshift:

| Системное отношение | Назначение                                                                | Необходимое разрешение              |
| ------------------- | ------------------------------------------------------------------------- | ----------------------------------- |
| `SVV_ALL_COLUMNS`   | Метаданные столбцов                                                       | SELECT для системного представления |
| `pg_class`          | Получение списка отношений                                                | Доступ к системному каталогу        |
| `pg_namespace`      | Информация о схемах                                                       | Доступ к системному каталогу        |
| `sys_query_detail`  | Проверка актуальности источников (время последней вставки)                | SELECT для системного представления |
| `svv_table_info`    | Получение списка материализованных представлений, если они есть в проекте | SELECT для системного представления |
| `svv_mv_info`       | Получение списка материализованных представлений, если они есть в проекте | SELECT для системного представления |

### Управление схемами

Разрешения для управления схемами, необходимые при определённых условиях

| Разрешение      | Объект      | Когда требуется              |
| --------------- | ----------- | ---------------------------- |
| `CREATE SCHEMA` | База данных | Автоматическое создание схем |

Примеры выдачи прав через SQL приведены в разделе [Разрешения Redshift](https://docs.getdbt.tech/reference/database-permissions/redshift-permissions.md).

## Настройка dbt v2

При запуске `dbt init` в CLI укажите следующие данные:

* **Host:** имя хоста кластера Redshift.
* **User:** имя пользователя для подключения к базе данных.
* **Database:** имя базы данных.
* **Schema:** имя схемы.
* **Port (по умолчанию 5439):** порт среды Redshift.

Файл `profiles.yml` также можно создать вручную. Формат полей показан в разделе [Способы аутентификации](#supported-authentication-types). Если файл уже существует, можно сохранить текущие поля или перезаписать их.

Выберите способ аутентификации и заполните запрошенные поля.

## Поддерживаемые способы аутентификации

### Password

Для входа используйте пароль пользователя Redshift. Его также можно указать открытым текстом в `profiles.yml`.

#### Пример настройки с паролем

profiles.yml

```yml
default:
  target: dev
  outputs:
    dev:
      type: redshift
      port: 5439
      database: JAFFLE_SHOP
      schema: JAFFLE_TEST
      ra3_node: true
      method: database
      host: ABC123.COM
      user: JANE.SMITH@YOURCOMPANY.COM
      password: ABC123
      threads: 16
```

### IAM profile

Укажите IAM-профиль для подключения сеансов dbt v2:

* **IAM Profile:** имя профиля.
* **Cluster ID:** уникальный идентификатор кластера AWS.
* **Region:** регион AWS, например us-east-1.
* **Use RA3 node type (y/n):** использовать высокопроизводительный узел AWS RA3.

#### Пример настройки IAM-профиля

profiles.yml

```yml
default:
  target: dev
  outputs:
    dev:
      type: redshift
      port: 5439
      database: JAFFLE_SHOP
      schema: JAFFLE_TEST
      ra3_node: false
      method: iam
      host: YOURHOSTNAME.COM
      user: JANE.SMITH@YOURCOMPANY.COM
      iam_profile: YOUR_PROFILE_NAME
      cluster_id: ABC123
      region: us-east-1
      threads: 16
```

### IAM Identity Center (browser)

Войдите через [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) и задайте для `method` значение `browser_identity_center`. dbt откроет окно браузера для аутентификации без необходимости указывать пароль или профиль IAM в файле `profiles.yml`.

Только локально

Этот метод работает при локальном запуске dbt из командной строки. В dbt platform он пока не поддерживается.

Перед началом убедитесь, что ваш кластер или рабочая группа Redshift настроены для [интеграции с IAM Identity Center](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html). Вам понадобятся следующие поля:

| Поле профиля              | Обязательное | По умолчанию             | Описание                                                                                                                       |
| ------------------------- | ------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| `method`                  | Да           | —                        | Задайте значение `browser_identity_center`.                                                                                    |
| `idc_region`\*            | Да           | —                        | Регион AWS, в котором находится ваш экземпляр IAM Identity Center (например, `us-east-1`).                                     |
| `issuer_url`              | Да           | —                        | URL издателя вашего экземпляра IAM Identity Center (например, `https://identitycenter.amazonaws.com/ssoins-1234567890abcdef`). |
| `idp_listen_port`         | Нет          | `7890`                   | Локальный порт, на котором dbt ожидает перенаправление из браузера после входа.                                                |
| `idc_client_display_name` | Нет          | `Amazon Redshift driver` | Имя приложения, отображаемое в запросе согласия в браузере.                                                                    |
| `idp_response_timeout`    | Нет          | `60`                     | Время в секундах, в течение которого dbt ожидает завершения входа до истечения времени ожидания.                               |

\*`idc_region` — это не то же самое, что регион вашей учетной записи AWS. dbt пока не поддерживает указание `region` вместе с `browser_identity_center` в `profiles.yml`, поэтому считывает регион AWS из файла конфигурации AWS (`~/.aws/config`). Убедитесь, что в нем задан регион по умолчанию (например, выполнив `aws configure`).

#### Пример конфигурации IAM Identity Center

profiles.yml

```yml
default:
  target: dev
  outputs:
    dev:
      type: redshift
      method: browser_identity_center
      host: hostname.region.redshift.amazonaws.com
      port: 5439
      dbname: analytics
      schema: analytics
      idc_region: us-east-1
      issuer_url: https://identitycenter.amazonaws.com/ssoins-1234567890abcdef

      # Необязательные параметры
      idp_listen_port: 7890
      idc_client_display_name: Amazon Redshift driver
      idp_response_timeout: 60
      threads: 4
```

## Регистр идентификаторов

Redshift приводит имена к нижнему регистру, включая имена в кавычках, если для параметра `enable_case_sensitive_identifier` не установлено значение `true` в группе параметров кластера или в конфигурации рабочей группы Serverless. dbt не включает этот параметр. См. [Настройка заключения в кавычки](https://docs.getdbt.tech/reference/project-configs/quoting.md#redshift).

## Дополнительные сведения

Настройки Redshift описаны в [справочнике адаптера](https://docs.getdbt.tech/reference/resource-configs/redshift-configs.md).
