Табличная функция mysql
Позволяет выполнять запросы SELECT и INSERT к данным, хранящимся на удалённом сервере MySQL.
Синтаксис
Аргументы
| Аргумент | Описание |
|---|---|
host:port | Адрес сервера MySQL. |
database | Имя удалённой базы данных. |
table | Имя удалённой таблицы. |
user | Пользователь MySQL. |
password | Пароль пользователя. |
replace_query | Флаг, который преобразует запросы INSERT INTO в REPLACE INTO. Возможные значения:- 0 — запрос выполняется как INSERT INTO.- 1 — запрос выполняется как REPLACE INTO. |
on_duplicate_clause | Выражение ON DUPLICATE KEY on_duplicate_clause, которое добавляется к запросу INSERT. Может быть указано только при replace_query = 0 (если одновременно передать replace_query = 1 и on_duplicate_clause, ClickHouse сгенерирует исключение).Пример: 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. |
Аргументы также можно передавать с использованием именованных коллекций. В этом случае host и port должны указываться отдельно. Такой подход рекомендуется для продуктивной среды.
Простые выражения WHERE, такие как =, !=, >, >=, <, <=, в настоящее время выполняются на сервере MySQL.
Остальные условия и ограничение выборки LIMIT выполняются в ClickHouse только после завершения запроса к MySQL.
Поддерживается несколько реплик, которые должны быть перечислены через |. Например:
или
Возвращаемое значение
Объект таблицы с теми же столбцами, что и исходная таблица MySQL.
Некоторые типы данных MySQL могут сопоставляться с различными типами ClickHouse — это настраивается параметром уровня запроса mysql_datatypes_support_level
В запросе INSERT чтобы отличить табличную функцию mysql(...) от имени таблицы со списком имён столбцов, необходимо использовать ключевые слова FUNCTION или TABLE FUNCTION. См. примеры ниже.
Примеры
Таблица в MySQL:
Выбор данных из ClickHouse:
Или с помощью именованных коллекций:
Замена и вставка:
Копирование данных из таблицы MySQL в таблицу ClickHouse:
Или, если нужно копировать только инкрементальную партию данных из MySQL, опираясь на максимальное текущее значение id: