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: