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

Управление представлениями витрин

Настроенная витрина может быть опубликована в подключённой базе данных в виде обычного представления, материализованного представления или таблицы. Внешние системы — BI-инструменты, отчётные системы — смогут читать результат витрины непосредственно через подключение к базе данных, без обращения к DataForge.

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

Где доступно управление представлением

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

Управление представлениями доступно ролям Суперадминистратор, Администратор компании, Разработчик и Аналитик.

Типы объектов

Тип Описание
«Обычное представление» Виртуальная таблица: запрос выполняется при каждом обращении, поэтому объект всегда отражает актуальное состояние источника
«Материализованное представление» Результат запроса сохраняется физически и требует обновления для синхронизации с источником
«Таблица» Физическая таблица, содержащая снимок результата на момент её создания

Набор доступных типов зависит от целевой базы данных:

База данных Схема по умолчанию Поддерживаемые типы
PostgreSQL public Обычное представление, материализованное представление, таблица
MS SQL Server dbo Обычное представление, таблица
ClickHouse default Материализованное представление, таблица
MySQL Обычное представление, таблица

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

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

  1. «Выберите тип представления» — один из типов, поддерживаемых целевой базой данных
  2. Выбор места создания — для PostgreSQL и MS SQL Server выбирается схема («Выберите схему базы данных»), для ClickHouse — база данных («Выберите базу данных»). Название можно ввести вручную или выбрать из списка доступных схем или баз данных, загружаемого кнопкой «Загрузить схемы» или «Загрузить базы данных»
  3. Просмотр скрипта — система формирует скрипт создания объекта. Его SELECT-часть строится точно так же, как при проверке витрины. Скрипт можно скопировать в буфер обмена, экспортировать в текстовый файл или выполнить на подключённой базе данных прямо из диалога
  4. Результат — после выполнения система показывает ответ базы данных, а при успехе — уведомление «Представление витрины успешно создано в базе данных»

Имя объекта формируется из названия витрины и отображается в колонке «Представление в БД» списка витрин.

Примечания:

  • Действие «Создать представление витрины в базе данных» недоступно, пока в витрине есть критические ошибки или недопустимая конфигурация («В витрине используются недопустимые элементы»)
  • Если объект с таким именем в базе данных уже существует, система предлагает связать витрину с ним вместо повторного создания: «Представление уже существует в базе данных. Хотите ли вы связать витрину с этим представлением?» При привязке система проверяет, соответствует ли существующий объект текущей конфигурации витрины, и помечает представление как актуальное или как устаревшее

Действия над существующим представлением

Действие Описание
«Показать данные в представлении» Выполняет запрос к объекту и отображает строки. Используется тот же селектор «Ограничение результата», что и при проверке витрины, с подтверждением кнопкой «Показать»
«Обновить представление» Пересоздаёт объект по текущей конфигурации витрины: прежний объект удаляется, создаётся новый. Применяется после изменения витрины
«Открыть информацию о представлении» Открывает диалог с информацией о представлении: его статус, перенесённые права доступа, назначенные правила обновления и календарь обновлений
«Удалить представление» Удаляет объект из базы данных после подтверждения: «Вы уверены, что хотите удалить представление витрины в базе данных?»
«Удалить связь с представлением в базе данных» Удаляет только связь, сохранённую в DataForge; объект в базе данных остаётся без изменений

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

Примечания:

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

Статусы представления

Каждая витрина несёт статус своего развёрнутого объекта. Статус отображается значком в колонке «Статус» списка витрин, в диалоге с информацией о представлении и цветом значка базы данных в колонке «Действия».

Статус Цвет Значение
«Не развернуто» Синий Объект для витрины ещё не создан
«Актуально» Зелёный Объект существует и соответствует текущей конфигурации витрины
«Развёртывается» Серый Объект создаётся в базе данных
«Обновляется» Серый Объект пересоздаётся или его данные перезагружаются
«Устарело» Жёлтый Объект существует, но витрина изменилась после его развёртывания либо его данные давно не обновлялись
«Ошибка обновления» Красный Последняя операция над объектом завершилась ошибкой

Примечания:

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

Когда представление устаревает

При каждом сохранении витрины система сравнивает сохранённую конфигурацию с развёрнутым определением и определяет, что требуется в связи с изменением:

Что изменилось Что требуется
Название или описание витрины Ничего. Существующий объект нельзя переименовать — чтобы дать ему новое имя, удалите представление и создайте его заново
Состав витрины, уровни агрегации, фильтры, скрытые элементы, тип витрины, тип слияния, связи, исходные таблицы фактов Объект больше не соответствует витрине и помечается как устаревший. Его требуется пересоздать
Типы данных или структура исходных таблиц в базе данных Объект больше не соответствует витрине и помечается как устаревший. Его требуется пересоздать
Права доступа на исходных таблицах Синхронизируются только права доступа объекта, его определение остаётся без изменений

Представление также помечается как устаревшее при изменении элемента РПИ, на который оно ссылается, — его названия, формулы или подключённого источника, в том числе при откате изменения через историю изменений РПИ.

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

При попытке показать устаревшее представление или представление витрины с недопустимой конфигурацией система сначала предупреждает диалогом «Представление витрины устарело»: «Настройки витрины изменились после создания этого представления. Отображаемые данные могут не соответствовать текущей конфигурации». Далее можно выбрать «Все равно показать» либо «Вернуться к настройкам» и пересоздать объект.

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

Пересоздание удаляет объект в базе данных и создаёт его заново по текущей конфигурации витрины, чтобы развёрнутый объект снова ей соответствовал.

  • Новое определение проверяется до удаления прежнего объекта. Если проверка не проходит, существующий объект остаётся на месте, а представление получает статус «Ошибка обновления» с сообщением, возвращённым базой данных
  • Диалог подтверждения «Пересоздать представление» описывает, что произойдёт: «Представление витрины «…» будет удалено из базы данных и создано заново. Продолжить?» — и подтверждается кнопкой «Пересоздать»
  • После успешного пересоздания права доступа исходных таблиц снова применяются к новому объекту
  • Представление проходит через статус «Обновляется» и возвращается в «Актуально», а операция записывается в календарь обновлений

Информация о представлении

Действие «Открыть информацию о представлении» открывает диалог, собирающий всё, что известно о развёрнутом объекте. В его заголовке отображаются «Название витрины», «Представление в БД», «Тип представления», «Статус» и «Последнее обновление», а вкладки следующие:

Вкладка Содержимое
«Перенесенные права доступа» Права доступа, обнаруженные на исходных таблицах, и результат переноса каждого из них на объект
«Назначенные правила обновления» Правила обновления, связанные с этой витриной, и действие «Добавить правило» для создания нового
«Календарь обновлений» Прошедшие и будущие обновления этой витрины

Последние две вкладки описаны на странице «Обновление представлений витрин».

Перенесённые права доступа

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

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

Колонка Описание
Источник Исходная таблица, на которой обнаружено право
Тип источника «Таблица фактов» или «Справочник»
Право доступа «Права на таблицу (SELECT)», «Права на уровне колонок», «Права на уровне строк» или «Маскирование данных»
Детали Выданные права, исключённые столбцы, маска или условие на уровне строк
Результат переноса «Перенесено» или «Не перенесено». Пока ничего не развёрнуто, отображается «-»

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

  • «Проверить источники» — заново читает права доступа из целевой базы данных, чтобы список отражал их текущее состояние
  • «Создать представление» или «Обновить представление» — разворачивает объект и в той же операции переносит на него права

Примечания:

  • Для обычного представления права на уровне колонок и политики на уровне строк контролирует сама база данных; для материализованного представления и таблицы они встраиваются в определение объекта
  • Столбцы, читать которые пользователям не разрешено, исключаются из объекта, а маскируемые столбцы сохраняют маску. Расчётный показатель доступен только тогда, когда доступны все элементы, на которые ссылается его формула
  • Если политику на уровне строк невозможно применить к результату — потому что ограничиваемое ею поле не входит в витрину, — доступ к объекту закрывается для пользователей, которых эта политика ограничивает; на вкладке такие политики показаны с результатом «Не перенесено», а затронутые пользователи и роли перечислены в предпросмотре прав доступа перед развёртыванием объекта
  • Если поле, защищённое политикой на уровне строк, выбрано без группировки, конфигурацию развернуть нельзя, и вкладка сообщает об этом: «Эту конфигурацию нельзя развернуть: поле с политикой защиты строк выбрано без группировки»
  • Колонка «Права доступа» календаря прошедших обновлений открывает отчёт о правах, перенесённых этой операцией

Удаление витрины, для которой создано представление

При удалении витрины с развёрнутым объектом диалог подтверждения спрашивает, что делать с объектом:

  • Оставьте флажок «Удалить представление … из базы данных» снятым, чтобы сохранить объект. Диалог поясняет последствия: «Представление останется в базе данных без связи с DataForge и больше не будет управляться продуктом»
  • Установите флажок, чтобы удалить объект из базы данных вместе с витриной

Ошибки

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