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