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

Двигатель таблицы Merge

Двигатель Merge (не путать с MergeTree) сам по себе не хранит данные, но позволяет одновременно читать данные из любого количества других таблиц.

Чтение автоматически параллелизуется. Запись в таблицу не поддерживается. При чтении используются индексы таблиц, которые на самом деле читаются, если они существуют.

Создание таблицы

Параметры двигателя

db_name

db_name — Возможные значения:

  • имя базы данных,
  • константное выражение, возвращающее строку с именем базы данных, например, currentDatabase(),
  • REGEXP(expression), где expression является регулярным выражением для соответствия именам БД.

tables_regexp

tables_regexp — Регулярное выражение для соответствия именам таблиц в указанной БД или БД.

Регулярные выражения — re2 (поддерживает подмножество PCRE), чувствительны к регистру. См. примечания о экранировании символов в регулярных выражениях в разделе "соответствие".

Использование

При выборе таблиц для чтения сама таблица Merge не выбирается, даже если она соответствует регулярному выражению. Это сделано для предотвращения зацикливания. Возможно создание двух таблиц Merge, которые будут безконечно пытаться читать данные друг у друга, но это плохая идея.

Типичный способ использования двигателя Merge — это работа с большим количеством таблиц TinyLog, как если бы это была одна таблица.

Примеры

Пример 1

Рассмотрим две базы данных ABC_corporate_site и ABC_store. Таблица all_visitors будет содержать ID из таблиц visitors в обеих базах данных.

Пример 2

Предположим, у вас есть старая таблица WatchLog_old, и вы решили изменить партиционирование без перемещения данных в новую таблицу WatchLog_new, и вам нужно видеть данные из обеих таблиц.

Виртуальные столбцы

  • _table — Содержит имя таблицы, из которой были прочитаны данные. Тип: String.

    Вы можете установить постоянные условия на _table в условии WHERE/PREWHERE (например, WHERE _table='xyz'). В этом случае операция чтения выполняется только для тех таблиц, где условие на _table удовлетворяется, так что столбец _table действует как индекс.

См. также