Подключение внешних баз данных через ODBC

CHYT умеет выступать в роли ODBC-клиента и обращаться из SQL-запроса к внешней базе данных через ClickHouse ODBC bridge. Это работает с MySQL, PostgreSQL, MariaDB и другими базами, для которых существует ODBC-драйвер под Linux.

Как это работает

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

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

Настройка клики

ODBC настраивается через odbc_config в спеклете клики. Для изменения опции требуется право 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:

{
    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 должны иметь уникальные базовые имена, поскольку они попадают в одну песочницу джоба.

Пароли и другие секреты

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

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

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

Запросы

Для обращения к настроенному источнику используйте табличную функцию odbc:

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

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

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

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

Ограничения

  • Любой пользователь с правом use на клику может обращаться ко всем настроенным в ней источникам данных.
  • Доступ к внешним данным определяется учётной записью в конфигурации источника, а не пользователем, выполняющим запрос CHYT.
Следующая