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