Материализованное представление

Содержание раздела
  1. Источники данных
  2. Поддерживаемые типы датасорсов
  3. Действия с представлениями и их данными
  4. Хранение данных на физическом уровне
  5. Синхронизация материализованных представлений
    1. Периодичность синхронизации
    2. Запуск синхронизации
    3. Синхронизируемые данные
    4. Порядок синхронизации
    5. Пример синхронизации
      1. Синхронизация со снимком состояния источника
      2. Синхронизация без снимка состояния источника
  6. Статистика по представлению

Материализованное представление — набор записей, выбранных из источника данных по определенному запросу и сохраненных в одном или нескольких датасорсах.

Система поддерживает актуальность материализованных представлений, периодически синхронизируя их с источниками данных. Представления каждой логической БД синхронизируются с одинаковой периодичностью.

Материализованные представления должны размещаться в логических БД, отдельных от логических таблиц.

Источники данных

Источником данных материализованного представления может быть внешняя система или следующие сущности логических БД:

* Прокси- и 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, не восстанавливаются при синхронизациях.

Порядок синхронизации

Система синхронизирует материализованные представления логической БД в следующем порядке:

  1. Получает информацию из источника об изменениях, произошедших по запросам представлений с момента последней синхронизации.
  2. Открывает дельту.
  3. Сохраняет изменения данных из источника в представлениях:
    1. (Для внешнего источника) Выбирает случайный узел из списка AGENT_ENDPOINT_URL в конфигурации, при его недоступности пробует другие узлы.
    2. Получает изменения из источника, выполненные по запросам представлений в закрытых дельтах и отдельных операциях записи (вне дельт).
    3. Сохраняет изменения, создавая одну операцию записи на каждое представление.
  4. Если есть ошибки синхронизации, повторяет попытки в следующих циклах синхронизации, сохраняя промежуточные результаты.
  5. Если все представления успешно синхронизировались, закрывает дельту.

Нумерация операций записи и дельт, создаваемых при синхронизации материализованных представлений, отражает историю синхронизаций и не связана с источником.

Процесс синхронизации материализованных представлений можно отследить с помощью запроса CHECK_MATERIALIZED_VIEW.

Пример синхронизации

Рассмотрим порядок синхронизации представления на следующем примере:

  1. В логическую таблицу добавили записи с идентификаторами 100 и 101.
  2. Обновили запись 101, поменяв значение store_id.
  3. Создали материализованное представление, построенное на подзапросе к таблице.
  4. Добавили в таблицу записи с идентификаторами 102 и 103.
  5. Удалили запись 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

Статистика по представлению

По умолчанию система собирает статистику по логическим сущностям. Подробнее о просмотре, отключении и обнулении статистики см. в разделе Управление статистикой.