Merge (не путать с MergeTree) не хранит данные самостоятельно, но позволяет одновременно читать данные из любого количества других таблиц.
Чтение автоматически распараллеливается. Запись в таблицу не поддерживается. При чтении используются индексы таблиц, из которых фактически выполняется чтение, если они существуют.
Создание таблицы
Параметры движка
db_name
db_name — Возможные значения:
- имя базы данных,
- константное выражение, возвращающее строку с именем базы данных, например,
currentDatabase(), REGEXP(expression), гдеexpression— регулярное выражение для сопоставления имён баз данных.
- константное выражение, возвращающее строку с именем базы данных, например,
tables_regexp
tables_regexp — регулярное выражение для сопоставления с именами таблиц в указанной DB или нескольких DB.
Регулярные выражения — re2 (поддерживает подмножество PCRE), с учетом регистра.
См. примечания об экранировании символов в регулярных выражениях в разделе “match”.
Использование
Merge не выбирается, даже если она соответствует регулярному выражению. Это сделано во избежание циклов.
Можно создать две таблицы Merge, которые будут бесконечно пытаться читать данные друг у друга, но это плохая идея.
Обычно движок Merge используют для работы с большим количеством таблиц TinyLog как с одной.
Примеры
ABC_corporate_site и ABC_store. Таблица all_visitors будет содержать идентификаторы из таблиц visitors в обеих базах данных.
WatchLog_old, и вы решили изменить схему партиционирования, не перенося данные в новую таблицу WatchLog_new, при этом вам нужно видеть данные из обеих таблиц.
Виртуальные столбцы
-
_table— Имя таблицы, из которой были прочитаны данные. Тип: String. Если фильтрация выполняется по_table(например,WHERE _table='xyz'), читаются только те таблицы, которые удовлетворяют условию фильтрации. -
_database— Содержит имя базы данных, из которой были прочитаны данные. Тип: String.
- Виртуальные столбцы
- табличная функция merge