Skip to main content
Skip to main content

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 работает как индекс.

См. также