Обновление представлений витрин
Материализованное представление или таблица, опубликованные для витрины, содержат снимок результата и устаревают по мере изменения исходных данных. DataForge может поддерживать эти объекты в актуальном состоянии: правила обновления задают, когда объект обновляется, а календарь обновлений показывает, что запланировано и что уже выполнено.
Где настраиваются обновления
- На экране «Витрины» — вкладки «Правила обновления» и «Календарь обновлений», охватывающие все витрины открытой версии проекта
- В диалоге с информацией о представлении («Открыть информацию о представлении») — вкладки «Назначенные правила обновления» и «Календарь обновлений», охватывающие только эту витрину
Создание и изменение правил, отмена запланированного обновления и повтор прошедшего доступны ролям Суперадминистратор, Администратор компании и Разработчик и только при действующей лицензии компании. Читать оба календаря может каждый, кому доступна витрина.
Что делает обновление
Обновление всегда приводит развёрнутый объект в соответствие с витриной, а конкретные действия зависят от состояния этого объекта:
| Состояние объекта | Что выполняет обновление |
|---|---|
| Витрина изменилась после развёртывания объекта (статус «Устарело») | Объект удаляется и создаётся заново по текущей конфигурации витрины |
| Объект соответствует витрине и является материализованным представлением или таблицей | Его данные перезагружаются по развёрнутому определению |
| Объект соответствует витрине и является обычным представлением | В базе данных ничего не выполняется — обычное представление всегда выполняет свой запрос, поэтому его данные не устаревают. Запуск фиксируется как «Определение актуально» |
Во время обновления представление имеет статус «Обновляется», а по завершении переходит в «Актуально» или в «Ошибка обновления».
Обновление перезагружает данные объекта по тому определению, которое развёрнуто в базе данных. Если конфигурация витрины изменилась после развёртывания этого определения, перезагрузка данных не может применить такие изменения, поэтому представление остаётся устаревшим — календарь отмечает такой запуск как «Успешно, витрина устарела» и поясняет, что для применения изменений объект нужно пересоздать.
Правила обновления
Правило обновления описывает, когда обновляются объекты одной или нескольких витрин. Правила перечислены на вкладке «Правила обновления» и создаются кнопкой «Добавить правило».
| Поле | Описание |
|---|---|
| Название правила | Название правила. Обязательное поле |
| Описание правила | Необязательное описание назначения правила |
| Тип обновления | «По расписанию» — обновление выполняется в заданное время; «По событию» — обновление выполняется после изменения витрины |
| Частота обновления | Для правила по расписанию: «Каждый день» или «Каждую неделю» |
| День обновления | Для еженедельного правила по расписанию: день недели, в который выполняется обновление |
| Время обновления | Для правила по расписанию: время суток, в которое выполняется обновление, в формате ЧЧ:ММ:СС. Недопустимое значение отмечается сообщением «Укажите время в формате ЧЧ:ММ:СС» |
| Тип события | Для правила по событию: «Изменение конфигурации витрины» |
| Отсрочка обновления | Для правила по событию: сколько система ждёт после изменения перед обновлением — «30 секунд», «5 минут», «1 час», «8 часов» или «24 часа» |
| Инкрементальное обновление | Флажок. При его установке запуски этого правила загружают только изменившиеся данные вместо полной пересборки объекта |
| Связанные витрины | Витрины, которые обновляет правило. Требуется хотя бы одна. Предлагаются только витрины, для которых создано представление в базе данных |
Примечания:
- Одно правило может обновлять несколько витрин, а одна витрина может быть охвачена несколькими правилами
- Правило, созданное из диалога с информацией о представлении, сразу связано с этой витриной
- Отсрочка правила по событию позволяет серии правок «улечься»: изменение, сделанное в течение отсрочки, сдвигает обновление, поэтому серия правок приводит к одному обновлению
Вкладка «Правила обновления» перечисляет правила с колонками Название правила, Описание правила, Тип обновления, Владелец, Связанные витрины, Добавлено и Статус; колонки можно сортировать и фильтровать.
Действия над правилом:
- «Активировать правило» и «Отключить правило» — переключают правило между статусами «Активно» и «Отключено». Отключённое правило ничего не планирует
- Редактирование — открывает диалог «Редактировать правило обновления» с теми же полями
- Удаление — запрашивает подтверждение и предупреждает о последствиях: «Вы уверены, что хотите удалить правило «…»? Запланированные по нему обновления будут отменены»
Календарь обновлений
Селектор периода в календаре обновлений переключает два списка:
- «Будущие обновления» — обновления, которые запланированы и ещё не завершились
- «Прошедшие обновления» — уже выполненные обновления, начиная с самых свежих
Кнопка «Актуализировать» перечитывает оба списка, поэтому завершившийся тем временем запуск появляется без перезагрузки экрана.
Оба списка используют одинаковые колонки:
| Колонка | Описание |
|---|---|
| Название витрины | Витрина, к которой относится обновление |
| Представление в БД | Имя объекта в базе данных |
| Тип обновления | «Ручной запуск», «По расписанию» или «По событию» |
| Инкрементальность | «Полное» или «Инкрементальное» |
| Изменения | Что применил запуск — количество изменений или «Определение актуально», если применять было нечего |
| Права доступа | Количество прав доступа, перенесённых запуском. Значение открывает «Отчёт о правах доступа» по этому запуску |
| Дата и время | На какое время запланировано обновление или когда оно выполнено |
| Статус | Состояние обновления |
| Действия | Отмена запланированного обновления или повтор прошедшего |
Статусы в списке «Будущие обновления»:
| Статус | Значение |
|---|---|
| «Не начато» | Обновление запланировано, его время ещё не наступило |
| «В очереди» | Обновление ожидает своей очереди на выполнение |
| «В процессе» | Обновление выполняется |
Статусы в списке «Прошедшие обновления»:
| Статус | Значение |
|---|---|
| «Успешно» | Обновление завершено, объект актуален |
| «Успешно, витрина устарела» | Данные перезагружены, но витрина изменилась после создания развёрнутого определения, поэтому представление осталось устаревшим и его требуется пересоздать |
| «Ошибка обновления» | Обновление завершилось ошибкой. Сообщение, возвращённое базой данных, показывается во всплывающей подсказке |
| «Отменено» | Обновление отменено до выполнения |
| «Пропущено» | Обновление не выполнялось — например, над тем же объектом ещё выполнялась другая операция |
Действия в календаре:
- «Отменить запланированное обновление» — убирает одно запланированное обновление из списка «Будущие обновления». Само правило остаётся и планирует следующие обновления как обычно
- «Повторить обновление с теми же настройками» — выполняет прошедшее обновление заново с теми настройками, с которыми оно выполнялось. Действие предлагается только для записей, которые можно запустить повторно
Инкрементальное обновление
Инкрементальное обновление записывает только разницу между текущим результатом витрины и данными, уже хранящимися в объекте, вместо полной его пересборки. На больших витринах это заметно сокращает время обновления.
- Инкрементальное обновление запрашивается флажком «Инкрементальное обновление» в правиле обновления
- Оно применимо к материализованным представлениям и таблицам. Обычное представление не обновляется никогда, поскольку всегда отражает свой запрос
- Оно доступно на PostgreSQL и ClickHouse (материализованные представления и таблицы) и на Microsoft SQL Server (только таблицы)
Если инкрементальное обновление выполнить невозможно, вместо него выполняется полное — объект в любом случае получается корректным. Колонка «Инкрементальность» списка «Прошедшие обновления» показывает, что произошло на самом деле, а запуск, перешедший на полное обновление, поясняет причину во всплывающей подсказке, например:
- Целевая база данных не поддерживает инкрементальное обновление
- Предыдущее инкрементальное обновление завершилось ошибкой, поэтому объект пересобран полностью
- В материализованном представлении есть повторяющиеся строки или колонки, которые нельзя проиндексировать, поэтому база данных не может обновить его инкрементально
Запуск, который пересоздаёт объект, перестраивает его полностью — объект создаётся с нуля. Следующие за ним обновления снова могут быть инкрементальными.
Изменение структуры без пересоздания. Если правило обновления по событию с флажком «Инкрементальное обновление» пересоздаёт таблицу из-за изменившегося набора колонок, таблица изменяется на месте — новые колонки добавляются, исчезнувшие удаляются, данные перезагружаются — вместо удаления и создания заново, поэтому данные, права доступа и накопленное состояние обновления сохраняются. Запуск отображается в «Прошедших обновлениях» как обычное обновление, и его можно перезапустить. Ручное «Обновить представление» всегда выполняет показанный в диалоге скрипт удаления и создания объекта.
Ежедневная проверка инкрементальных объектов. Раз в день продукт сравнивает число строк объектов, которые обновляются инкрементально добавлением или слиянием строк, с результатом их определения. Расхождение записывается в «Прошедшие обновления» как неуспешная проверка, а следующее обновление такого объекта выполняется полностью.