Skip to main content
Позволяет выполнять запросы SELECT и INSERT к данным, хранящимся на удаленном сервере MySQL.

Синтаксис

Аргументы

Аргументы также можно передавать с помощью именованных коллекций. В этом случае host и port нужно указывать отдельно. Такой подход рекомендуется для продакшн-среды. Простые секции WHERE, такие как =, !=, >, >=, <, <=, в настоящее время выполняются на сервере MySQL. Остальные условия и ограничение выборки LIMIT выполняются в ClickHouse только после завершения запроса к MySQL.

Передача запроса вместо имени таблицы

Вместо имени таблицы в качестве третьего аргумента можно указать запрос SELECT, который передаётся в MySQL как есть. Структура результирующей таблицы определяется по результату запроса. Запрос можно записать либо как подзапрос, либо обернуть в функцию query:
Это позволяет проталкивать JOIN, агрегации и любую другую обработку в MySQL. Такая таблица доступна только для чтения: INSERT в неё не поддерживается. Тот же синтаксис поддерживает движок таблицы MySQL.
Форма подзапроса (SELECT ...) разбирается ClickHouse и перед отправкой на сервер повторно сериализуется в диалекте MySQL (с экранированием идентификаторов обратными кавычками). Поэтому она должна быть корректным ClickHouse SQL. Чтобы передать синтаксис, специфичный для MySQL, который ClickHouse не разбирает, используйте форму query('...'), текст которой отправляется в MySQL без изменений.Любой внешний WHERE, LIMIT, агрегация и т. д. из окружающего запроса к ClickHouse не проталкиваются в переданный запрос — они применяются в ClickHouse после получения полного результата запроса. Чтобы ограничить объём данных, считываемых из MySQL, поместите фильтр внутрь передаваемого запроса. При external_table_strict_query = 1 внешний фильтр, который нельзя протолкнуть, вызывает исключение вместо локального применения.
Поддерживается несколько реплик, которые должны быть перечислены через |. Например:
или

Возвращаемое значение

Объект table с теми же столбцами, что и исходная таблица MySQL.
Некоторые типы данных MySQL могут сопоставляться с разными типами ClickHouse — это регулируется настройкой уровня запроса mysql_datatypes_support_level
В запросе INSERT, чтобы отличить табличную функцию mysql(...) от имени таблицы со списком имён столбцов, необходимо использовать ключевые слова FUNCTION или TABLE FUNCTION. См. примеры ниже.

Примеры

Таблица в MySQL:
Выборка данных из ClickHouse:
Или с помощью именованных коллекций:

enable_compression

Включает сжатие для подключения по протоколу MySQL. Значение по умолчанию: false. Этот параметр применяется к:
  • табличной функции mysql;
  • движку таблицы MySQL;
  • движку базы данных MySQL;
  • именованным коллекциям, используемым в интеграциях MySQL.
Когда параметр включен, ClickHouse запрашивает сжатие для соединения. Пример:
Замена и вставка данных:
Копирование данных из таблицы MySQL в таблицу ClickHouse:
Или, если копируете только инкрементный батч из MySQL на основе текущего максимального значения id:
Последнее изменение 23 июля 2026 г.