Перейти к основному содержимому
Перейти к основному содержимому

Движок таблиц 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 действует как индекс.

См. также