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

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

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

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

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

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

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

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

dbt-hive может подключаться к кластерам Apache Hive и Cloudera Data Platform. Для установления соединений с Hive используется библиотека [Impyla](https://github.com/cloudera/impyla/).

dbt-hive поддерживает два механизма передачи данных:

* бинарный
* HTTP(S)

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

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

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

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

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

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

\~/.dbt/profiles.yml

```yaml
your_profile_name:
  target: dev
  outputs:
    dev:
      type: hive
      host: localhost
      port: PORT # значение по умолчанию: 10000
      schema: SCHEMA_NAME
      
```

### LDAP

LDAP позволяет аутентифицироваться с помощью имени пользователя и пароля, когда Hive [настроен с LDAP Auth](https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2). LDAP поддерживается через механизмы подключения Binary и HTTP.

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

\~/.dbt/profiles.yml

````yaml
your_profile_name:
  target: dev
  outputs:
    dev:
     type: hive
     host: HOST_NAME
     http_path: YOUR/HTTP/PATH # необязательно, http путь к Hive, значение по умолчанию: None
     port: PORT # значение по умолчанию: 10000
     auth_type: ldap
```yaml
use_http_transport: BOOLEAN # значение по умолчанию: true
use_ssl: BOOLEAN # TLS всегда следует использовать с LDAP, чтобы обеспечить безопасную передачу учетных данных; значение по умолчанию: true
user: USERNAME
````

password: PASSWORD schema: SCHEMA\_NAME

````text

</File>

Примечание: При создании workload-пользователя в CDP убедитесь, что у пользователя есть права CREATE, SELECT, ALTER, INSERT, UPDATE, DROP, INDEX, READ и WRITE. Если пользователю требуется выполнять операторы GRANT, необходимо дополнительно настроить соответствующие права на GRANT. При использовании Apache Ranger разрешения, позволяющие выполнять GRANT, обычно настраиваются с помощью опции «Delegate Admin». Подробнее см. в разделе `grants` и on-run-start & on-run-end.

### Kerberos \{#kerberos}

Механизм аутентификации Kerberos использует GSSAPI для обмена учетными данными Kerberos, когда Hive настроен с Kerberos Auth.

<File name='~/.dbt/profiles.yml'>

```yaml
your_profile_name:
  target: dev
  outputs:
    dev:
      type: hive
      host: HOSTNAME
      port: PORT # значение по умолчанию: 10000
      auth_type: GSSAPI
      kerberos_service_name: KERBEROS_SERVICE_NAME # значение по умолчанию: None
      use_http_transport: BOOLEAN # значение по умолчанию: true
      use_ssl: BOOLEAN # TLS всегда должен использоваться для обеспечения безопасной передачи учетных данных, значение по умолчанию: true
      schema: SCHEMA_NAME
````

Примечание: Типичная настройка Cloudera Private Cloud будет включать следующие шаги для настройки 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 для обновления его действительности.
* Пользователю потребуются разрешения CREATE, DROP, INSERT на схему, указанную в profiles.yml

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

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

## Установка и распространение

Адаптер dbt для Cloudera Hive поддерживается в отдельном репозитории — [dbt-hive](https://github.com/cloudera/dbt-hive).<br />Чтобы использовать его, необходимо установить плагин `dbt-hive`.

### Использование pip

Следующие команды установят последнюю версию `dbt-hive`, а также необходимую версию `dbt-core` и драйвер `impyla`, используемый для подключений.

```text
python -m pip install dbt-hive
```

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

| Название                                             | Поддерживается |
| ---------------------------------------------------- | -------------- |
| Материализация: Таблица                              | Да             |
| Материализация: Представление                        | Да             |
| Материализация: Инкрементальная - Добавление         | Да             |
| Материализация: Инкрементальная - Вставка+Перезапись | Да             |
| Материализация: Инкрементальная - Слияние            | Нет            |
| Материализация: Эфемерная                            | Нет            |
| Семена                                               | Да             |
| Тесты                                                | Да             |
| Снимки                                               | Нет            |
| Документация                                         | Да             |
| Аутентификация: LDAP                                 | Да             |
| Аутентификация: Kerberos                             | Да             |
