Подключение внешних баз данных через 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 на клику.
|
Опция |
Описание |
|
|
Включает поддержку ODBC |
|
|
Директория в Кипарисе с предустановленными драйверами и файлом |
|
|
Дополнительные драйверы. Для каждого задаются |
|
|
Источники данных, из которых формируется |
|
|
Дополнительные файлы драйверов, например разделяемые библиотеки или сертификаты, которые копируются из Кипариса в песочницу джоба |
|
|
Путь в Кипарисе к бинарному файлу 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.