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
- Virtual columns
- merge функция таблицы