Движок таблицы Merge
Движок Merge
(не путать с MergeTree
) не хранит данные сам, но позволяет одновременно читать из любого количества других таблиц.
Чтение автоматически параллелизуется. Запись в таблицу не поддерживается. При чтении используются индексы таблиц, которые фактически читаются, если они существуют.
Создание таблицы
Параметры движка
db_name
db_name
— Возможные значения:
- название базы данных,
- константное выражение, возвращающее строку с названием базы данных, например,
currentDatabase()
, REGEXP(выражение)
, гдевыражение
— регулярное выражение для соответствия названиям БД.
tables_regexp
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.Вы можете установить константные условия для
_table
в условииWHERE/PREWHERE
(например,WHERE _table='xyz'
). В этом случае операция чтения выполняется только для тех таблиц, где выполнено условие по_table
, так что колонка_table
действует как индекс.
Смотрите также
- Виртуальные колонки
- merge функция таблицы