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