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