SELECT и INSERT к данным, хранящимся на удаленном сервере MySQL.
Синтаксис
Аргументы
Аргументы также можно передавать с помощью именованных коллекций. В этом случае
host и port нужно указывать отдельно. Такой подход рекомендуется для продакшн-среды.
Простые секции WHERE, такие как =, !=, >, >=, <, <=, в настоящее время выполняются на сервере MySQL.
Остальные условия и ограничение выборки LIMIT выполняются в ClickHouse только после завершения запроса к MySQL.
TLS/SSL
Значениями служит содержимое соответствующих PEM-файлов, которое можно скопировать в именованную коллекцию или запрос. Они маскируются в журналах и в запросах
SHOW так же, как пароли.
Эти же учётные данные можно также указать как пути к файлам на сервере в ssl_ca, ssl_cert и ssl_key — но только в именованной коллекции, определённой в файле конфигурации сервера; такое значение нельзя переопределить в запросе. Сервер открывает эти файлы со своими привилегиями, поэтому приём пути из SQL позволил бы любому пользователю, способному определить источник MySQL, исследовать локальную файловую систему и проходить аутентификацию с сертификатом и ключом, к которым у него нет доступа на чтение.
Передача запроса вместо имени таблицы
SELECT, который передаётся в MySQL как есть. Структура результирующей таблицы определяется по результату запроса. Запрос можно записать либо как подзапрос, либо обернуть в функцию query:
INSERT в неё не поддерживается. Тот же синтаксис поддерживает движок таблицы MySQL.
Форма подзапроса
(SELECT ...) разбирается ClickHouse и перед отправкой на сервер повторно сериализуется в диалекте MySQL (с экранированием идентификаторов обратными кавычками). Поэтому она должна быть корректным ClickHouse SQL. Чтобы передать синтаксис, специфичный для MySQL, который ClickHouse не разбирает, используйте форму query('...'), текст которой отправляется в MySQL без изменений.Любой внешний WHERE, LIMIT, агрегация и т. д. из окружающего запроса к ClickHouse не проталкиваются в переданный запрос — они применяются в ClickHouse после получения полного результата запроса. Чтобы ограничить объём данных, считываемых из MySQL, поместите фильтр внутрь передаваемого запроса. При external_table_strict_query = 1 внешний фильтр, который нельзя протолкнуть, вызывает исключение вместо локального применения.|. Например:
Возвращаемое значение
Некоторые типы данных MySQL могут сопоставляться с разными типами ClickHouse — это регулируется настройкой уровня запроса mysql_datatypes_support_level
В запросе
INSERT, чтобы отличить табличную функцию mysql(...) от имени таблицы со списком имён столбцов, необходимо использовать ключевые слова FUNCTION или TABLE FUNCTION. См. примеры ниже.Примеры
enable_compression
false.
Этот параметр применяется к:
- табличной функции
mysql; - движку таблицы
MySQL; - движку базы данных
MySQL; - именованным коллекциям, используемым в интеграциях MySQL.