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: