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

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

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

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

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

Если настроена публикация системных событий, по каждому успешно синхронизированному представлению публикуется событие SYNC_OK.

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

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

* Прокси- и standalone-таблицы могут быть источниками данных для материализованных представлений, если они соединяются с сущностями, содержащими версионируемые данные (например, с логической таблицей).

Синтаксис создания представления на основе standalone-таблицы предполагает использование внешней readable-таблицы, указывающей на целевую standalone-таблицу.

Поддерживаемые типы датасорсов

Возможные комбинации источника и приемников данных материализованного представления (источник слева от стрелки, приемники — справа):

  • внешняя система → представление в датасорсах (СУБД или кластер СУБД хранилища
    )
    любых типов;
  • сущности логических БД → представление в том же датасорсе:
    • ADB → ADB;
    • ADP → ADP;
    • ADG → ADG;
  • сущности логических БД → представление в других датасорсах:
    • ADB → ADP, ADQM и (или) ADG;
    • ADP → ADP и (или) ADG.

Виды подзапросов в представлениях

Материализованное представление может быть подстроено на одном из следующих подзапросов:

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

  • обычный проще — система сама определяет, как выбрать изменения;
  • инкрементальный гибче и может быть быстрее для больших источников (от тысячи строк), если учтен характер данных.

Действия с представлениями и их данными

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

Данные материализованного представления можно читать и выгружать. По умолчанию возвращаются данные на момент последней синхронизации представления. Выбрать данные другой версии можно с помощью ключевого слова FOR SYSTEM_TIME.

Загрузка и обновление данных материализованных представлений недоступны.

Представления на основе прокси-таблиц и standalone-таблиц

Если материализованное представление построено на соединении с прокси-таблицами или standalone-таблицами, часть их данных может не попадать в представление. Это происходит потому, что система не версионирует данные прокси- и standalone-таблиц и обновляет связанные материализованные представления только при наличии изменений в версионируемых данных источника.

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

Хранение данных на физическом уровне

Данные материализованного представления хранятся аналогично данным логических таблиц — в физических таблицах хранилища данных, создаваемых системой при создании представления.

Синхронизация

По умолчанию (если синхронизация включена) система периодически синхронизирует материализованные представления окружения с их источниками данных. Синхронизация также может быть запущена однократно в любой момент, без привязки к обычной периодичности.

Процесс синхронизации представления схематично показан на рисунке ниже: лидер кластера запрашивает изменения данных по запросу, на котором построено представление, из источника (других сущностей логических БД или внешней системы) и, если такие изменения есть, сохраняет их в представлении.

Синхронизация материализованных представлений

Периодическая автоматическая синхронизация

Периодичность синхронизации

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

  • индивидуальных значений matview.sync.period.ms представлений;
  • значения параметра конфигурации MATERIALIZED_VIEWS_SYNC_PERIOD_MS (учитывается, если есть хотя бы одно представление без matview.sync.period.ms).

Запуск синхронизации

Первая синхронизация созданного представления обычно запускается в ближайшем цикле синхронизации. Если это первое материализованное представление в логической БД, синхронизация запускается сразу после его создания.

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

Однократная синхронизация по запросу

Синхронизацию можно запустить однократно, не дожидаясь очередного цикла периодической автоматической синхронизации, с помощью запроса SYNC_MATERIALIZED_VIEWS или HTTP-метода /entities/sync.

После запуска однократная синхронизация исполняется в том же порядке, что и периодическая синхронизация, но без повторных попыток синхронизации при ошибках.

Параллельная синхронизация

Количество параллельно синхронизируемых представлений ограничено параметром конфигурации MATERIALIZED_VIEWS_CONCURRENT (по умолчанию — 20). Остальные представления ждут своей очереди в текущем цикле периодической синхронизации или текущем вызове однократной синхронизации.

Синхронизация при отключенных датасорсах

Синхронизация представления возможна, если для него включен хотя бы один датасорс (СУБД или кластер СУБД хранилища
)
-источник и необходимые датасорсы-приемники. Если датасорсов не хватает, периодическая синхронизация приостанавливается до восстановления и включения недостающих датасорсов, а однократная синхронизация завершается с ошибкой.

Синхронизируемые данные

По умолчанию при первой синхронизации в представление загружается снимок данных источника (можно отключить). При последующих синхронизациях загружаются изменения данных, появившиеся в источнике с момента последней синхронизации представления.

Данные, удаленные из материализованных представлений запросами 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

Отключение периодической автоматической синхронизации

При необходимости можно отключить периодическую автоматическую синхронизацию всех материализованных представлений окружения, установив для параметра конфигурации MATERIALIZED_VIEWS_SYNC_ENABLED значение false на всех нодах кластера. Однократная синхронизация по запросу при этом остается доступна.

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

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