# Подключение Cloudera Impala к dbt v1

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

* **Поддерживается**: Cloudera
* **Авторы**: Cloudera
* **Репозиторий GitHub**: [cloudera/dbt-impala](https://github.com/cloudera/dbt-impala) [![](https://img.shields.io/github/stars/cloudera/dbt-impala?style=for-the-badge)](https://github.com/cloudera/dbt-impala)
* **Пакет PyPI**: `dbt-impala` [![](https://badge.fury.io/py/dbt-impala.svg)](https://badge.fury.io/py/dbt-impala)
* **Канал Slack**: [#db-impala](https://getdbt.slack.com/archives/C01PWAH41A5)
* **Поддерживаемая версия dbt**: v1.1.0 и новее
* **Поддержка dbt**: Not Supported
* **Минимальная версия платформы данных**: n/a

## Установка dbt-impala

Установите адаптер с помощью \`pip\`: `python -m pip install dbt-impala`

## Настройка dbt-impala

Конфигурацию, специфичную для Impala, см. на странице [настроек Impala.](https://docs.getdbt.tech/reference/resource-configs/impala-configs.md)

## Методы подключения

dbt-impala может подключаться к кластерам Apache Impala и Cloudera Data Platform.

Для установления соединений с Impala используется библиотека [Impyla](https://github.com/cloudera/impyla/).

Поддерживаются два механизма передачи данных:

* binary
* HTTP(S)

Механизм по умолчанию — `binary`. Чтобы использовать HTTP-транспорт, используйте булевую опцию `use_http_transport: [true / false]`.

## Методы аутентификации

dbt-impala поддерживает три механизма аутентификации:

* [`insecure`](#insecure) Без аутентификации, рекомендуется только для тестирования.
* [`ldap`](#ldap) Аутентификация через LDAP
* [`kerberos`](#kerberos) Аутентификация через Kerberos (GSSAPI)

### Небезопасно

Этот метод рекомендуется только в случае, если у вас установлена локальная версия Impala и вы хотите протестировать адаптер dbt-impala.

\~/.dbt/profiles.yml

```yaml
your_profile_name:
  target: dev
  outputs:
    dev:
      type: impala
      host: [host] # значение по умолчанию: localhost
      port: [port] # значение по умолчанию: 21050
      dbname: [db name]  # это должно совпадать с именем схемы, указанным ниже, начиная с версии 1.1.2 этот параметр является необязательным
      schema: [schema name]
      
```

### LDAP

LDAP позволяет вам аутентифицироваться с помощью имени пользователя и пароля, когда Impala [настроена с аутентификацией LDAP](https://impala.apache.org/docs/build/html/topics/impala_ldap.html). LDAP поддерживается через механизмы подключения Binary и HTTP.

Это рекомендуемый механизм аутентификации для использования с Cloudera Data Platform (CDP).

\~/.dbt/profiles.yml

```yaml
your_profile_name:
  target: dev
  outputs:
    dev:
      type: impala
      host: [host name]
      http_path: [optional, http path to Impala]
      port: [port] # значение по умолчанию: 21050
      auth_type: ldap
      use_http_transport: [true / false] # значение по умолчанию: true
      use_ssl: [true / false] # при работе с LDAP всегда следует использовать TLS для обеспечения безопасной передачи учетных данных, значение по умолчанию: true
      user: [username]
      password: [password]
      dbname: [db name]  # это должно совпадать с именем схемы, указанным ниже, начиная с версии 1.1.2 этот параметр является необязательным
      schema: [schema name]
      retries: [retries] # количество попыток, которые Impala делает для повторного подключения к хранилищу; значение по умолчанию: 3
```

Примечание: при создании пользователя workload в CDP убедитесь, что у этого пользователя есть права CREATE, SELECT, ALTER, INSERT, UPDATE, DROP, INDEX, READ и WRITE. Если пользователю требуется выполнять операторы GRANT, см., например, (/reference/resource-configs/grants) или (/reference/project-configs/on-run-start-on-run-end) — там описано, как настроить соответствующие права GRANT. При использовании Apache Ranger разрешения на выполнение GRANT обычно настраиваются с помощью опции **“Delegate Admin”**.

### Kerberos

Механизм аутентификации Kerberos использует GSSAPI для передачи учетных данных Kerberos, когда Impala [настроена с аутентификацией Kerberos](https://impala.apache.org/docs/build/html/topics/impala_kerberos.html).

\~/.dbt/profiles.yml

```yaml
your_profile_name:
  target: dev
  outputs:
    dev:
      type: impala
      host: [hostname]
      port: [port] # значение по умолчанию: 21050
      auth_type: [GSSAPI]
      kerberos_service_name: [kerberos service name] # значение по умолчанию: None
      use_http_transport: true # значение по умолчанию: true
      use_ssl: true # TLS всегда должен использоваться с LDAP для обеспечения безопасной передачи учетных данных, значение по умолчанию: true
      dbname: [db name]  # это должно совпадать с именем схемы, указанным ниже, начиная с версии 1.1.2 этот параметр является необязательным
      schema: [schema name]
      retries: [retries] # количество попыток, которые Impala предпринимает для повторного подключения к хранилищу; значение по умолчанию: 3
  
```

Примечание: Типичная настройка Cloudera EDH будет включать следующие шаги для настройки Kerberos перед выполнением команд dbt:

* Получите правильный файл конфигурации realm для вашей установки (krb5.conf)
* Установите переменную окружения, чтобы указать на файл конфигурации (export KRB5\_CONFIG=/path/to/krb5.conf)
* Установите правильные разрешения для файла конфигурации (sudo chmod 644 /path/to/krb5.conf)
* Получите keytab с помощью kinit (kinit <username@YOUR_REALM.YOUR_DOMAIN>)
* Keytab действителен в течение определенного периода, после чего вам нужно будет снова запустить kinit для обновления его действительности.

### Инструментирование

По умолчанию адаптер будет отправлять события инструментирования в Cloudera, чтобы помочь улучшить функциональность и понять ошибки. Если вы хотите специально отключить это, например, в производственной среде, вы можете явно установить флаг `usage_tracking: false` в вашем файле `profiles.yml`.

Чтобы отключить сбор анонимной статистики использования dbt Labs, обратитесь к разделу [Анонимная статистика использования](https://docs.getdbt.tech/reference/global-configs/usage-stats.md) за подробной информацией.

### Поддерживаемая функциональность

| Название                                       | Поддерживается |
| ---------------------------------------------- | -------------- |
| Материализация: Table                          | Да             |
| Материализация: View                           | Да             |
| Материализация: Incremental - Append           | Да             |
| Материализация: Incremental - Insert+Overwrite | Да             |
| Материализация: Incremental - Merge            | Нет            |
| Материализация: Ephemeral                      | Нет            |
| Seed-файлы                                     | Да             |
| Тесты                                          | Да             |
| Снимки                                         | Да             |
| Документация                                   | Да             |
| Аутентификация: LDAP                           | Да             |
| Аутентификация: Kerberos                       | Да             |
