---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/user-guide/data-processing/chyt/reference/odbc.md
  - https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/reference/odbc.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

<!-- source: ru/_includes/user-guide/data-processing/chyt/reference/odbc.md -->
# Подключение внешних баз данных через ODBC

CHYT умеет выступать в роли ODBC-клиента и обращаться из SQL-запроса к внешней базе данных через [ClickHouse ODBC bridge](https://clickhouse.com/docs/concepts/features/interfaces/odbc). Это работает с MySQL, PostgreSQL, MariaDB и другими базами, для которых существует ODBC-драйвер под Linux.


## Как это работает { #how-it-works }

При запуске клики контроллер объединяет драйверы из `drivers_dir` с настройками `odbc_config` и помещает бинарный файл bridge, библиотеки драйверов и сгенерированную конфигурацию unixODBC в песочницу каждого джоба. Каждый инстанс запускает собственный локальный bridge; перед стартом trampoline раскрывает переменные окружения и настраивает пути к конфигурации ODBC и библиотекам.

Состав драйверов и источников данных фиксируется при запуске клики. Изменения конфигурации вступают в силу после перезапуска клики.

## Настройка клики { #speclet }

ODBC настраивается через `odbc_config` в [спеклете](https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/cliques/configs.md#speclet) клики. Для изменения опции требуется право `manage` на клику.

#|
|| **Опция** | **Описание** ||

|| `enable` [`false`] | Включает поддержку ODBC ||

|| `drivers_dir` [`//sys/bin/odbc-drivers`] | Директория в Кипарисе с предустановленными драйверами и файлом `config.yson`, который содержит их описание ||

|| `drivers` | Дополнительные драйверы. Для каждого задаются `name`, `description`, путь `path` к `.so`-файлу драйвера и необязательные `options` для его секции в `odbcinst.ini` ||

|| `sources` | Источники данных, из которых формируется `odbc.ini`. Для каждого задаются `name`, `description`, `driver` и параметры подключения `options`, зависящие от драйвера ||

|| `extra_files` | Дополнительные файлы драйверов, например разделяемые библиотеки или сертификаты, которые копируются из Кипариса в песочницу джоба ||

|| `bridge_path` [`//sys/bin/odbc-drivers/clickhouse-odbc-bridge`] | Путь в Кипарисе к бинарному файлу ODBC bridge ||

|#

В большинстве клик достаточно настроить `enable` и `sources`. Опции `drivers_dir`, `drivers`, `extra_files` и `bridge_path` предназначены для администраторов и нестандартных наборов драйверов; не переопределяйте их без необходимости.

Первая буква каждого ключа в `options` приводится к верхнему регистру, поэтому `password` и `Password` эквивалентны.

В следующем примере используется предустановленный драйвер MySQL:

```yson
{
    odbc_config = {
        enable = %true;
        sources = [
            {
                name = "my_mysql";
                description = "My MySQL database";
                driver = "MySQL";
                options = {
                    Server = "mysql.example.com";
                    Port = "3306";
                    Database = "mydb";
                    User = "reader";
                    Password = "${YT_SECURE_VAULT_mysql_password}";
                };
            };
        ];
    };
}
```

Все файлы из `drivers` и `extra_files` должны иметь уникальные базовые имена, поскольку они попадают в одну песочницу джоба.

## Пароли и другие секреты { #secrets }

Не указывайте пароли напрямую в спеклете. Сохраните их как секреты клики и ссылайтесь из `options` на соответствующие переменные окружения `YT_SECURE_VAULT_*`:

```bash
yt clickhouse ctl set-secrets --alias my_clique --secrets '{mysql_password="password"}'
```

В приведённом выше спеклете хранится только ссылка `${YT_SECURE_VAULT_mysql_password}`. Trampoline подставляет её значение внутри джоба клики перед запуском ClickHouse.

## Запросы { #queries }

Для обращения к настроенному источнику используйте табличную функцию [odbc](https://clickhouse.com/docs/sql-reference/table-functions/odbc):

```sql
SELECT * FROM odbc('DSN=my_mysql', 'my_table')
```

Чтобы явно указать внешнюю базу данных:

```sql
SELECT * FROM odbc('DSN=my_mysql', 'mydb', 'my_table')
```

Данные из внешней базы читает координатор запроса; чтение не распределяется между инстансами клики. Поэтому ODBC предназначен для справочников и небольших таблиц, а не для больших сканирований.

## Ограничения { #limitations }

- Любой пользователь с правом `use` на клику может обращаться ко всем настроенным в ней источникам данных.
- Доступ к внешним данным определяется учётной записью в конфигурации источника, а не пользователем, выполняющим запрос CHYT.
<!-- endsource: ru/_includes/user-guide/data-processing/chyt/reference/odbc.md -->
