# Подключение Amazon Athena

Платформа dbt

Чтобы использовать подключение к Amazon Athena, ваши среды должны использовать поддерживаемый [канал выпуска](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md).

Подключите dbt к сервису интерактивных запросов Amazon Athena для создания проекта dbt. Ниже приведены обязательные и необязательные поля для настройки подключения к Athena:

| Поле                          | Вариант               | Описание                                                                                                        | Тип     | Обязательное? | Пример                |
| ----------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------- | ------- | ------------- | --------------------- |
| AWS region name               | region\_name          | Регион AWS, в котором развернут ваш экземпляр Athena                                                            | String  | Required      | eu-west-1             |
| Database (catalog)            | database              | Укажите базу данных (Data Catalog), в которую будут собираться модели (только в нижнем регистре)                | String  | Required      | awsdatacatalog        |
| AWS S3 staging directory      | s3\_staging\_dir      | S3‑расположение для хранения результатов запросов Athena и метаданных                                           | String  | Required      | s3://bucket/dbt/      |
| Athena workgroup              | work\_group           | Идентификатор workgroup в Athena                                                                                | String  | Optional      | my-custom-workgroup   |
| Athena Spark workgroup        | spark\_work\_group    | Идентификатор Athena Spark workgroup для запуска Python‑моделей                                                 | String  | Optional      | my-spark-workgroup    |
| AWS S3 data directory         | s3\_data\_dir         | Префикс для хранения таблиц, если он отличается от s3\_staging\_dir подключения                                 | String  | Optional      | s3://bucket2/dbt/     |
| AWS S3 data naming convention | s3\_data\_naming      | Способ генерации путей к таблицам в s3\_data\_dir                                                               | String  | Optional      | schema\_table\_unique |
| AWS S3 temp tables prefix     | s3\_tmp\_table\_dir   | Префикс для хранения временных таблиц, если он отличается от s3\_data\_dir подключения                          | String  | Optional      | s3://bucket3/dbt/     |
| Poll interval                 | poll\_interval        | Интервал в секундах для опроса статуса выполнения запросов в Athena                                             | Integer | Optional      | 5                     |
| Query retries                 | num\_retries          | Количество попыток повторного выполнения запроса в случае ошибки                                                | Integer | Optional      | 3                     |
| Boto3 retries                 | num\_boto3\_retries   | Количество повторных попыток для запросов boto3 (например, при удалении файлов S3 для материализованных таблиц) | Integer | Optional      | 5                     |
| Iceberg retries               | num\_iceberg\_retries | Количество повторных попыток выполнения iceberg commit‑запросов для исправления ICEBERG\_COMMIT\_ERROR          | Integer | Optional      | 0                     |

### Учетные данные для разработки

Введите ваши учетные данные для *разработки* (не для развертывания) с использованием следующих полей:

| Поле                  | Параметр                 | Описание                                                                                          | Тип     | Обязательность | Пример                                   |
| --------------------- | ------------------------ | ------------------------------------------------------------------------------------------------- | ------- | -------------- | ---------------------------------------- |
| AWS Access Key ID     | aws\_access\_key\_id     | Идентификатор ключа доступа пользователя, выполняющего запросы                                    | String  | Обязательно    | AKIAIOSFODNN7EXAMPLE                     |
| AWS Secret Access Key | aws\_secret\_access\_key | Секретный ключ доступа пользователя, выполняющего запросы                                         | String  | Обязательно    | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
| Схема                 | schema                   | Укажите схему (базу данных Athena), в которой будут создаваться модели (только в нижнем регистре) | String  | Обязательно    | dbt                                      |
| Потоки                | threads                  |                                                                                                   | Integer | Необязательно  | 3                                        |

### Временные учетные данные

Если вы предпочитаете не хранить долгосрочные AWS Access Key ID и AWS Secret Access Key пользователя IAM в dbt platform, вместо этого можно использовать `aws_session_token`, который входит в состав [временных учетных данных AWS Security Token Service (STS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html). При таком подходе сохраняются долгосрочные разрешения пользователя или роли.

Чтобы использовать временные учетные данные:

1. Введите **AWS Access Key ID** и **AWS Secret Access Key** в интерфейсе dbt platform:

   * Для среды развертывания задайте их в [профиле подключения](https://docs.getdbt.tech/docs/platform/about-profiles.md).
   * Для среды разработки задайте их в [настройках среды разработки](https://docs.getdbt.tech/docs/dbt-platform-environments.md#create-a-development-environment).

2. Поскольку в интерфейсе dbt platform нет поля `aws_session_token`, добавьте его с помощью [расширенных атрибутов](https://docs.getdbt.tech/docs/dbt-platform-environments.md#extended-attributes). В этом разделе описано, где их настраивать для сред развертывания и разработки.

   При настройке `aws_session_token` в разделе **Extended attributes** учитывайте, что имя ключа чувствительно к регистру и должно быть в точности `aws_session_token`.

   Например, можно использовать [переменную окружения](https://docs.getdbt.tech/docs/build/environment-variables.md), чтобы не хранить токен в текстовом поле интерфейса:

   ```yaml
   aws_session_token: '{{ env_var(''DBT_ENV_AWS_SESSION_TOKEN'') }}'
   ```

3. [Задайте значение](https://docs.getdbt.tech/docs/build/environment-variables.md#setting-environment-variables) `DBT_ENV_AWS_SESSION_TOKEN`:

   * Для профиля подключения среды развертывания задайте значение в столбце **Project default**. Для проверки подключения ссылки `env_var()`, используемые в профиле, требуют значения, заданного на уровне проекта.
   * Для среды разработки можно задать переменную для этой среды.

   Поскольку срок действия временных учетных данных ограничен, необходимо обновить учетные данные STS и значение переменной до истечения этого срока.
