SELECT и INSERT к данным, которые хранятся на удалённом сервере MySQL.
Создание таблицы
- Имена столбцов должны совпадать с именами в исходной таблице MySQL, но можно использовать только часть этих столбцов и в любом порядке.
- Типы столбцов могут отличаться от типов в исходной таблице MySQL. ClickHouse пытается преобразовать значения в типы данных ClickHouse.
- Настройка external_table_functions_use_nulls определяет, как обрабатывать столбцы Nullable. Значение по умолчанию: 1. Если установлено значение 0, функция таблицы не создаёт столбцы типа Nullable и вместо NULL выполняет вставку значений по умолчанию. Это также применимо к значениям NULL внутри массивов.
host:port— адрес сервера MySQL.database— имя удалённой базы данных.table— имя удалённой таблицы или запрос, передаваемый в MySQL как есть (см. Передача запроса вместо имени таблицы).user— пользователь MySQL.password— пароль пользователя.replace_query— флаг, преобразующий запросыINSERT INTOвREPLACE INTO. Еслиreplace_query=1, запрос заменяется.on_duplicate_clause— выражениеON DUPLICATE KEY on_duplicate_clause, которое добавляется к запросуINSERT. Пример:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1, гдеon_duplicate_clause— этоUPDATE c2 = c2 + 1. См. документацию MySQL, чтобы узнать, какиеon_duplicate_clauseможно использовать с секциейON DUPLICATE KEY. Чтобы указатьon_duplicate_clause, нужно передать0в параметрreplace_query. Если одновременно передатьreplace_query = 1иon_duplicate_clause, ClickHouse сгенерирует исключение.
host и port следует указывать отдельно. Этот подход рекомендуется для продакшн-среды.
Простые условия WHERE, такие как =, !=, >, >=, <, <=, выполняются на сервере MySQL.
Остальные условия и ограничение выборки LIMIT выполняются в ClickHouse только после завершения запроса к MySQL.
Передача запроса вместо имени таблицы
table может представлять собой запрос SELECT, который передаётся в MySQL как есть. Структура таблицы определяется по результату запроса. Запрос можно записать либо как подзапрос, либо обернуть в функцию query:
INSERT в неё не допускается. Тот же синтаксис поддерживает табличная функция mysql.
Форма подзапроса
(SELECT ...) разбирается в ClickHouse и перед отправкой на сервер повторно сериализуется в диалекте MySQL (с экранированием идентификаторов обратными кавычками). Поэтому она должна быть корректным ClickHouse SQL. Чтобы передать синтаксис, специфичный для MySQL и не разбираемый ClickHouse, используйте форму query('...'), текст которой отправляется в MySQL дословно.Любые внешние WHERE, LIMIT, агрегация и т. д. из окружающего запроса к ClickHouse не проталкиваются в переданный запрос — они применяются в ClickHouse после получения полного результата запроса. Чтобы ограничить объём данных, читаемых из MySQL, поместите фильтр внутрь переданного запроса. При external_table_strict_query = 1 внешний фильтр, который нельзя протолкнуть, приводит к исключению вместо локального применения.|. Например:
Пример использования
Настройки
connection_auto_close
- 1 — автоматическое закрытие соединения разрешено, поэтому его повторное использование отключено
- 0 — автоматическое закрытие соединения не разрешено, поэтому его повторное использование включено
1.
connection_max_tries
- Положительное целое число.
- 0 — Для пула с failover повторные попытки не выполняются.
3.
connection_pool_size
- Положительное целое число.
16.
connection_wait_timeout
connection_pool_size активных соединений), 0 — не ждать.
Возможные значения:
- Положительное целое число.
5.
connect_timeout
- Положительное целое число.
10.
read_write_timeout
- Положительное целое число.
300.
enable_compression
false.
Этот параметр применяется к:
- движку таблицы
MySQL; - движку базы данных
MySQL; - табличной функции
mysql; - именованным коллекциям, используемым в интеграциях MySQL.