Перейти к содержанию

Обновление представлений витрин

Материализованное представление или таблица, опубликованные для витрины, содержат снимок результата и устаревают по мере изменения исходных данных. DataForge может поддерживать эти объекты в актуальном состоянии: правила обновления задают, когда объект обновляется, а календарь обновлений показывает, что запланировано и что уже выполнено.

Где настраиваются обновления

  • На экране «Витрины» — вкладки «Правила обновления» и «Календарь обновлений», охватывающие все витрины открытой версии проекта
  • В диалоге с информацией о представлении («Открыть информацию о представлении») — вкладки «Назначенные правила обновления» и «Календарь обновлений», охватывающие только эту витрину

Создание и изменение правил, отмена запланированного обновления и повтор прошедшего доступны ролям Суперадминистратор, Администратор компании и Разработчик и только при действующей лицензии компании. Читать оба календаря может каждый, кому доступна витрина.

Что делает обновление

Обновление всегда приводит развёрнутый объект в соответствие с витриной, а конкретные действия зависят от состояния этого объекта:

Состояние объекта Что выполняет обновление
Витрина изменилась после развёртывания объекта (статус «Устарело») Объект удаляется и создаётся заново по текущей конфигурации витрины
Объект соответствует витрине и является материализованным представлением или таблицей Его данные перезагружаются по развёрнутому определению
Объект соответствует витрине и является обычным представлением В базе данных ничего не выполняется — обычное представление всегда выполняет свой запрос, поэтому его данные не устаревают. Запуск фиксируется как «Определение актуально»

Во время обновления представление имеет статус «Обновляется», а по завершении переходит в «Актуально» или в «Ошибка обновления».

Обновление перезагружает данные объекта по тому определению, которое развёрнуто в базе данных. Если конфигурация витрины изменилась после развёртывания этого определения, перезагрузка данных не может применить такие изменения, поэтому представление остаётся устаревшим — календарь отмечает такой запуск как «Успешно, витрина устарела» и поясняет, что для применения изменений объект нужно пересоздать.

Правила обновления

Правило обновления описывает, когда обновляются объекты одной или нескольких витрин. Правила перечислены на вкладке «Правила обновления» и создаются кнопкой «Добавить правило».

Поле Описание
Название правила Название правила. Обязательное поле
Описание правила Необязательное описание назначения правила
Тип обновления «По расписанию» — обновление выполняется в заданное время; «По событию» — обновление выполняется после изменения витрины
Частота обновления Для правила по расписанию: «Каждый день» или «Каждую неделю»
День обновления Для еженедельного правила по расписанию: день недели, в который выполняется обновление
Время обновления Для правила по расписанию: время суток, в которое выполняется обновление, в формате ЧЧ:ММ:СС. Недопустимое значение отмечается сообщением «Укажите время в формате ЧЧ:ММ:СС»
Тип события Для правила по событию: «Изменение конфигурации витрины»
Отсрочка обновления Для правила по событию: сколько система ждёт после изменения перед обновлением — «30 секунд», «5 минут», «1 час», «8 часов» или «24 часа»
Инкрементальное обновление Флажок. При его установке запуски этого правила загружают только изменившиеся данные вместо полной пересборки объекта
Связанные витрины Витрины, которые обновляет правило. Требуется хотя бы одна. Предлагаются только витрины, для которых создано представление в базе данных

Примечания:

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

Вкладка «Правила обновления» перечисляет правила с колонками Название правила, Описание правила, Тип обновления, Владелец, Связанные витрины, Добавлено и Статус; колонки можно сортировать и фильтровать.

Действия над правилом:

  • «Активировать правило» и «Отключить правило» — переключают правило между статусами «Активно» и «Отключено». Отключённое правило ничего не планирует
  • Редактирование — открывает диалог «Редактировать правило обновления» с теми же полями
  • Удаление — запрашивает подтверждение и предупреждает о последствиях: «Вы уверены, что хотите удалить правило «…»? Запланированные по нему обновления будут отменены»

Календарь обновлений

Селектор периода в календаре обновлений переключает два списка:

  • «Будущие обновления» — обновления, которые запланированы и ещё не завершились
  • «Прошедшие обновления» — уже выполненные обновления, начиная с самых свежих

Кнопка «Актуализировать» перечитывает оба списка, поэтому завершившийся тем временем запуск появляется без перезагрузки экрана.

Оба списка используют одинаковые колонки:

Колонка Описание
Название витрины Витрина, к которой относится обновление
Представление в БД Имя объекта в базе данных
Тип обновления «Ручной запуск», «По расписанию» или «По событию»
Инкрементальность «Полное» или «Инкрементальное»
Изменения Что применил запуск — количество изменений или «Определение актуально», если применять было нечего
Права доступа Количество прав доступа, перенесённых запуском. Значение открывает «Отчёт о правах доступа» по этому запуску
Дата и время На какое время запланировано обновление или когда оно выполнено
Статус Состояние обновления
Действия Отмена запланированного обновления или повтор прошедшего

Статусы в списке «Будущие обновления»:

Статус Значение
«Не начато» Обновление запланировано, его время ещё не наступило
«В очереди» Обновление ожидает своей очереди на выполнение
«В процессе» Обновление выполняется

Статусы в списке «Прошедшие обновления»:

Статус Значение
«Успешно» Обновление завершено, объект актуален
«Успешно, витрина устарела» Данные перезагружены, но витрина изменилась после создания развёрнутого определения, поэтому представление осталось устаревшим и его требуется пересоздать
«Ошибка обновления» Обновление завершилось ошибкой. Сообщение, возвращённое базой данных, показывается во всплывающей подсказке
«Отменено» Обновление отменено до выполнения
«Пропущено» Обновление не выполнялось — например, над тем же объектом ещё выполнялась другая операция

Действия в календаре:

  • «Отменить запланированное обновление» — убирает одно запланированное обновление из списка «Будущие обновления». Само правило остаётся и планирует следующие обновления как обычно
  • «Повторить обновление с теми же настройками» — выполняет прошедшее обновление заново с теми настройками, с которыми оно выполнялось. Действие предлагается только для записей, которые можно запустить повторно

Инкрементальное обновление

Инкрементальное обновление записывает только разницу между текущим результатом витрины и данными, уже хранящимися в объекте, вместо полной его пересборки. На больших витринах это заметно сокращает время обновления.

  • Инкрементальное обновление запрашивается флажком «Инкрементальное обновление» в правиле обновления
  • Оно применимо к материализованным представлениям и таблицам. Обычное представление не обновляется никогда, поскольку всегда отражает свой запрос
  • Оно доступно на PostgreSQL и ClickHouse (материализованные представления и таблицы) и на Microsoft SQL Server (только таблицы)

Если инкрементальное обновление выполнить невозможно, вместо него выполняется полное — объект в любом случае получается корректным. Колонка «Инкрементальность» списка «Прошедшие обновления» показывает, что произошло на самом деле, а запуск, перешедший на полное обновление, поясняет причину во всплывающей подсказке, например:

  • Целевая база данных не поддерживает инкрементальное обновление
  • Предыдущее инкрементальное обновление завершилось ошибкой, поэтому объект пересобран полностью
  • В материализованном представлении есть повторяющиеся строки или колонки, которые нельзя проиндексировать, поэтому база данных не может обновить его инкрементально

Запуск, который пересоздаёт объект, перестраивает его полностью — объект создаётся с нуля. Следующие за ним обновления снова могут быть инкрементальными.

Изменение структуры без пересоздания. Если правило обновления по событию с флажком «Инкрементальное обновление» пересоздаёт таблицу из-за изменившегося набора колонок, таблица изменяется на месте — новые колонки добавляются, исчезнувшие удаляются, данные перезагружаются — вместо удаления и создания заново, поэтому данные, права доступа и накопленное состояние обновления сохраняются. Запуск отображается в «Прошедших обновлениях» как обычное обновление, и его можно перезапустить. Ручное «Обновить представление» всегда выполняет показанный в диалоге скрипт удаления и создания объекта.

Ежедневная проверка инкрементальных объектов. Раз в день продукт сравнивает число строк объектов, которые обновляются инкрементально добавлением или слиянием строк, с результатом их определения. Расхождение записывается в «Прошедшие обновления» как неуспешная проверка, а следующее обновление такого объекта выполняется полностью.