Материализованное представление
Содержание раздела
Материализованное представление — набор записей, выбранных из источника данных по определенному запросу и сохраненных в одном или нескольких датасорсах.
Система поддерживает актуальность материализованных представлений, периодически синхронизируя их с источниками данных. Представления каждой логической БД синхронизируются с одинаковой периодичностью.
Материализованные представления должны размещаться в логических БД, отдельных от логических таблиц.
Источники данных
Источником данных материализованного представления может быть внешняя система или следующие сущности логических БД:
- логические таблицы,
- логические представления,
- материализованные представления,
- прокси-таблицы*,
- standalone-таблицы*.
* Прокси- и standalone-таблицы могут быть источниками данных для материализованных представлений, если они соединяются с сущностями, содержащими версионируемые данные (например, с логической таблицей).
Синтаксис создания представления на основе standalone-таблицы предполагает использование внешней readable-таблицы, указывающей на целевую standalone-таблицу.
Поддерживаемые типы датасорсов
Возможные комбинации источника и приемников данных материализованного представления (источник слева от стрелки, приемники — справа):
- внешняя система → представление в датасорсах любых типов;
- сущности логических БД → представление в том же датасорсе:
- ADB → ADB;
- ADP → ADP;
- ADG → ADG;
- сущности логических БД → представление в других датасорсах:
- ADB → ADP, ADQM и (или) ADG;
- ADP → ADP и (или) ADG.
Действия с представлениями и их данными
Материализованные представления можно создавать и удалять.
Данные материализованного представления можно читать и выгружать. По умолчанию возвращаются данные на момент последней синхронизации представления. Выбрать данные другой версии можно с помощью ключевого слова FOR SYSTEM_TIME.
Загрузка и обновление данных материализованных представлений недоступны.
Хранение данных на физическом уровне
Данные материализованного представления хранятся аналогично данным логических таблиц — в физических таблицах хранилища данных, создаваемых системой при создании представления.
Синхронизация материализованных представлений
Система периодически синхронизирует материализованные представления окружения с их источниками данных. Процесс синхронизации схематично показан на рисунке ниже: лидер кластера запрашивает из источника изменения данных по запросу, на котором построено представление, и, если такие изменения есть, сохраняет их в представлении.
Синхронизация материализованных представлений
Периодичность синхронизации
Система периодически проверяет необходимость синхронизации представлений с источниками данных. Интервал проверки в логической БД равен минимальному из интервалов ее материализованных представлений, каждый из которых определяется:
- индивидуальной настройкой matview.sync.period.ms — если она задана для представления;
- параметром конфигурации
MATERIALIZED_VIEWS_SYNC_PERIOD_MS
— иначе.
Интервал MATERIALIZED_VIEWS_SYNC_PERIOD_MS
, равный 0, означает непрерывную синхронизацию материализованных представлений. Отключение синхронизации недоступно.
Запуск синхронизации
Первая синхронизация представления запускается:
- сразу после создания представления — если это первое материализованное представление в логической БД;
- в ближайшем цикле синхронизации — иначе.
Следующие синхронизации запускаются, если периодическая проверка показала, что в источниках появились новые данные по запросу хотя бы одного материализованного представления в логической БД.
Количество одновременно синхронизируемых представлений ограничено параметром конфигурации MATERIALIZED_VIEWS_CONCURRENT
(по умолчанию — 20). Остальные представления ожидают своей очереди в текущем цикле синхронизации.
Синхронизация представлений приостанавливается в случае отключения датасорса-источника и возобновляется после его включения.
Синхронизируемые данные
При первой синхронизации в представление загружается снимок данных источника, если опция matview.sync.snapshot.enable включена или не задана. При последующих синхронизациях загружаются изменения данных, появившиеся в источнике с момента последней синхронизации представления.
Данные, удаленные из материализованных представлений запросами TRUNCATE ACTUAL, TRUNCATE HISTORY и ERASE DELTA, не восстанавливаются при синхронизациях.
Порядок синхронизации
Система синхронизирует материализованные представления логической БД в следующем порядке:
- Получает информацию из источника об изменениях, произошедших по запросам представлений с момента последней синхронизации.
- Открывает дельту.
- Сохраняет изменения данных из источника в представлениях:
- (Для внешнего источника) Выбирает случайный узел из списка
AGENT_ENDPOINT_URL
в конфигурации, при его недоступности пробует другие узлы. - Получает изменения из источника, выполненные по запросам представлений в закрытых дельтах и отдельных операциях записи (вне дельт).
- Сохраняет изменения, создавая одну операцию записи на каждое представление.
- (Для внешнего источника) Выбирает случайный узел из списка
- Если есть ошибки синхронизации, повторяет попытки в следующих циклах синхронизации, сохраняя промежуточные результаты.
- Если все представления успешно синхронизировались, закрывает дельту.
Нумерация операций записи и дельт, создаваемых при синхронизации материализованных представлений, отражает историю синхронизаций и не связана с источником.
Процесс синхронизации материализованных представлений можно отследить с помощью запроса CHECK_MATERIALIZED_VIEW.
Пример синхронизации
Рассмотрим порядок синхронизации представления на следующем примере:
- В логическую таблицу добавили записи с идентификаторами 100 и 101.
- Обновили запись 101, поменяв значение
store_id
. - Создали материализованное представление, построенное на подзапросе к таблице.
- Добавили в таблицу записи с идентификаторами 102 и 103.
- Удалили запись 103.
Синхронизация со снимком состояния источника
На рисунке ниже показан пример синхронизации материализованного представления, созданного с опцией matview.sync.snapshot.enable=true
.
В первом цикле синхронизации система загружает снимок текущего состояния данных таблицы — запись 100 и текущую версию записи 101. Во втором цикле синхронизации загружаются изменения, произошедшие с предыдущей синхронизации, — запись 102; история по записи 103 не загружается. В обоих циклах система также получает информацию о номерах операций записи (CN) в источнике.
Синхронизация представления с опцией matview.sync.snapshot.enable=true
Синхронизация без снимка состояния источника
На рисунке ниже показан пример синхронизации материализованного представления, созданного с опцией matview.sync.snapshot.enable=false
.
Загрузка снимка данных (записей 100 и 101) в первом цикле пропускается, так как опция matview.sync.snapshot.enable
выключена. Во втором цикле синхронизации загружаются изменения, произошедшие с предыдущей синхронизации, — запись 102; история по записи 103 не загружается. В обоих циклах система также получает информацию о номерах операций записи (CN) в источнике.
Синхронизация представления с опцией matview.sync.snapshot.enable=false
Статистика по представлению
По умолчанию система собирает статистику по логическим сущностям. Подробнее о просмотре, отключении и обнулении статистики см. в разделе Управление статистикой.