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