Материализованное представление
Содержание раздела
- Источники данных
- Поддерживаемые типы датасорсов
- Виды подзапросов в представлениях
- Действия с представлениями и их данными
- Представления на основе прокси-таблиц и standalone-таблиц
- Хранение данных на физическом уровне
- Синхронизация
- Статистика по представлению
Материализованное представление — набор записей, выбранных из источника данных по определенному запросу и сохраненных в одном или нескольких датасорсах.
Материализованные представления должны размещаться в логических БД, отдельных от логических таблиц.
Система автоматически поддерживает актуальность материализованных представлений, периодически синхронизируя их с источниками данных (можно отключить). Также доступна однократная синхронизация по запросу в любое время.
Если настроена публикация системных событий, по каждому успешно синхронизированному представлению публикуется событие SYNC_OK.
Источники данных
Источником данных материализованного представления может быть внешняя система или следующие сущности логических БД:
- логические таблицы,
- логические представления,
- материализованные представления,
- прокси-таблицы*,
- standalone-таблицы*.
* Прокси- и standalone-таблицы могут быть источниками данных для материализованных представлений, если они соединяются с сущностями, содержащими версионируемые данные (например, с логической таблицей).
Синтаксис создания представления на основе standalone-таблицы предполагает использование внешней readable-таблицы, указывающей на целевую standalone-таблицу.
Поддерживаемые типы датасорсов
Возможные комбинации источника и приемников данных материализованного представления (источник слева от стрелки, приемники — справа):
- внешняя система → представление в датасорсах (СУБД или кластер СУБД хранилища
) любых типов; - сущности логических БД → представление в том же датасорсе:
- ADB → ADB;
- ADP → ADP;
- ADG → ADG;
- сущности логических БД → представление в других датасорсах:
- ADB → ADP, ADQM и (или) ADG;
- ADP → ADP и (или) ADG.
Виды подзапросов в представлениях
Материализованное представление может быть подстроено на одном из следующих подзапросов:
- подзапрос к внешней системе;
- подзапрос к сущностям логических БД:
- обычный — включает сущности-источники, но не логику выбора изменений из них;
- инкрементальный — включает как сущности-источники, так и логику выбора изменений, определенную с помощью выражений FOR SYSTEM_TIME и именованных параметров в заданном формате.
При выборе подзапроса к сущностям логических БД учитывайте, что:
- обычный проще — система сама определяет, как выбрать изменения;
- инкрементальный гибче и может быть быстрее для больших источников (от тысячи строк), если учтен характер данных.
Действия с представлениями и их данными
Материализованные представления можно создавать и удалять. Их синхронизацию можно отслеживать и запускать однократно по запросу.
Данные материализованного представления можно читать и выгружать. По умолчанию возвращаются данные на момент последней синхронизации представления. Выбрать данные другой версии можно с помощью ключевого слова 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, не восстанавливаются при синхронизациях.
Порядок синхронизации
Система синхронизирует материализованные представления логической БД в следующем порядке:
- Получает информацию из источника об изменениях, произошедших по запросам представлений с момента последней синхронизации.
- Открывает дельту.
- Сохраняет изменения данных из источника в представлениях:
- (Для внешнего источника) Выбирает случайный узел из списка
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
Отключение периодической автоматической синхронизации
При необходимости можно отключить периодическую автоматическую синхронизацию всех материализованных представлений окружения, установив для параметра конфигурации MATERIALIZED_VIEWS_SYNC_ENABLED значение false на всех нодах кластера. Однократная синхронизация по запросу при этом остается доступна.
Статистика по представлению
По умолчанию система собирает статистику по логическим сущностям. Подробнее о просмотре, отключении и обнулении статистики см. в разделе Управление статистикой.