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:
См. Также