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

Merge Table Engine

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

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

Creating a Table

Engine Parameters

db_name

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

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

tables_regexp

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

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

Usage

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

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

Examples

Example 1

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

Example 2

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

Virtual Columns

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

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

See Also