Merge
Движок Merge (не путайте с движком MergeTree) не хранит данные самостоятельно, а позволяет читать одновременно из произвольного количества других таблиц.
Чтение автоматически распараллеливается. Запись в таблицу не поддерживается. При чтении будут использованы индексы тех таблиц, из которых реально идёт чтение, если они существуют.
Создание таблицы
Параметры движка
-
db_name— Возможные варианты:- имя БД,
- выражение, возвращающее строку с именем БД, например,
currentDatabase(), REGEXP(expression), гдеexpression— регулярное выражение для отбора БД.
-
tables_regexp— регулярное выражение для имен таблиц в указанной БД или нескольких БД.
Использование
Регулярные выражения — re2 (поддерживает подмножество PCRE), регистрозависимые. Смотрите замечание об экранировании в регулярных выражениях в разделе «match».
При выборе таблиц для чтения сама Merge-таблица не будет выбрана, даже если попадает под регулярное выражение, чтобы не возникло циклов.
Впрочем, вы можете создать две Merge-таблицы, которые будут пытаться бесконечно читать данные друг друга, но делать этого не рекомендуется.
Типичный способ использования движка Merge — работа с большим количеством таблиц типа TinyLog как с одной.
Пример 1
Пусть есть две БД ABC_corporate_site и ABC_store. Таблица all_visitors будет содержать ID из таблиц visitors в обеих БД.
Пример 2
Пусть есть старая таблица WatchLog_old. Необходимо изменить партиционирование без перемещения данных в новую таблицу WatchLog_new. При этом в выборке должны участвовать данные обеих таблиц.
Виртуальные столбцы
-
_table— содержит имя таблицы, из которой данные были прочитаны. Тип — String.В секции
WHERE/PREWHEREможно установить константное условие на столбец_table(например,WHERE _table='xyz'). В этом случае операции чтения выполняются только для тех таблиц, для которых выполняется условие на значение_table, таким образом, столбец_tableработает как индекс.
См. также
- Виртуальные столбцы
- Табличная функция merge