Загрузка данных модели

Итоговые данные модели, определяются ее структурой. Они доступны к предпросмотру в карточке модели, но для использования модели в виджетах и информационных панелях данные модели необходимо загрузить в хранилище Системы. Загрузка может быть запущена как вручную, так и по расписанию (регулярное обновление).

Для проверки загрузки данных в модель нажмите на кнопку «Посмотреть загрузку в Airflow» () (см. 6, Рисунок «Окно модели в режиме редактирования»). В новом окне web-браузера откроется интерфейс Apache Airflow с деталями этого процесса (Рисунок «Окно Apache Airflow с информацией о деталях процесса»).

Рисунок 5. Окно Apache Airflow с информацией о деталях процесса

Окно Apache Airflow с информацией о деталях процесса

Если доступа на просмотр модели нет, то вместо дерева шагов откроется окно с сообщением: «У вас нет прав на просмотр модели с id <ID модели>. Вернуться назад».

Ручная загрузка данных в хранилище

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

Рисунок 6. Уведомление о начале загрузки

Уведомление о начале загрузки

Рисунок 7. Уведомление о завершении синхронизации

Уведомление о завершении синхронизации

Настройка загрузки (обновления) данных по расписанию

Настройка регулярного обновления данных модели по расписанию выполняется из интерфейса редактирования модели, через меню настройки модели. Для выполнения настройки нажмите на кнопку перехода к настройкам модели (Рисунок «Кнопка для перехода к настройкам модели»).

Рисунок 8. Кнопка для перехода к настройкам модели

Кнопка для перехода к настройкам модели

В окне «Настройки» перейдите в раздел «Планировщик» (Рисунок «Раздел «Планировщик» – настройка расписания через интерфейс (режим «Неделя»)).

Рисунок 9. Раздел «Планировщик» – настройка расписания через интерфейс (режим «Неделя»)

Раздел «Планировщик» – настройка расписания через интерфейс (режим «Неделя»)

Настройки планировщика через интерфейс (режим «Неделя») позволяют создать обновление с периодичностью не чаще 1 раза в день и не реже 1 раза в неделю. Можно выбрать конкретный день (или дни) недели и указать с точностью до минуты (по времени сервера) время старта процесса обновления.

Для настройки расписания через интерфейс (режим «Неделя») выберите день (дни) недели или установите «флажок» в поле «Все дни недели», чтобы выбрать все дни недели, и укажите время. Поля для выбора дней недели и времени являются обязательными для заполнения. Если данные поля не заполнены, то при сохранении откроется уведомление об ошибке.

В режиме «CRON-строка» можно реализовать и более сложные режимы обновления, преодолевающие описанные ограничения за счет прямого ввода «cron-строки» в формате файла linux CRONTAB в соответствии с принятыми правилами ее написания. Например, на рисунке (Рисунок «Раздел «Планировщик» – настройка расписания через интерфейс (режим «CRON-строка»)) настроен запуск на каждые 5 минут.

Рисунок 10. Раздел «Планировщик» – настройка расписания через интерфейс (режим «CRON-строка»)

Раздел «Планировщик» – настройка расписания через интерфейс (режим «CRON-строка»)

При сохранении некорректного выражения «cron-строки» отобразится уведомление об ошибке (Рисунок «Уведомление об ошибке при сохранении некорректного выражения «cron-строки»).

Рисунок 11. Уведомление об ошибке при сохранении некорректного выражения «cron-строки»

Уведомление об ошибке при сохранении некорректного выражения «cron-строки»

Опция «Использовать» позволяет включить или отключить (не удаляя само расписание) настроенную задачу регулярного обновления данных.

Чтобы сохранить и применить изменения, нажмите на кнопку «Сохранить».

Настройка инкрементальной загрузки

Настройка инкрементальной загрузки данных модели выполняется из интерфейса редактирования модели во вкладке «Инкрементальная загрузка». При добавлении блоков данных (таблицы, модели, SQL) на схему связей (Рисунок «Отображение блоков таблицы, модели, SQL на схеме связей») для каждого блока формируются отдельные фрагменты во вкладке «Инкрементальная загрузка» (Рисунок «Формирование фрагментов для каждого добавленного блока на схему связей»).

Рисунок 12. Отображение блоков таблицы, модели, SQL на схеме связей

Отображение блоков таблицы, модели, SQL на схеме связей

Рисунок 13. Формирование фрагментов для каждого добавленного блока на схему связей

Формирование фрагментов для каждого добавленного блока на схему связей

Фрагмент включает в себя:

Стратегия «Запрос к логу изменений»

Окно настройки инкрементальной загрузки по стратегии «Запрос к логу изменений» данных содержит следующие элементы (Рисунок «Окно настройки инкрементальной загрузки данных по стратегии «Запрос к логу изменений»):

Рисунок 14. Окно настройки инкрементальной загрузки данных по стратегии «Запрос к логу изменений»

Окно настройки инкрементальной загрузки данных по стратегии «Запрос к логу изменений»

  • блок фрагмента (1);

  • поле «Стратегия» для выбора типа стратегии из выпадающего списка (2). Доступные значения:

    • «Запрос к логу изменений»;

    • «Стандартная».

  • при выборе типа стратегии «Запрос к логу изменений» доступны следующие настройки:

    • поле «SQL» для обращения к таблице логов (3);

      Примечание
      Для удобства настройки в поле ввода SQL-скрипта при вводе первых букв отображаются значения справочников (IntelliSense) и подсветка синтаксиса. Справочники реализованы по полям модели, ключевым словам (select, from и др.), алиасам (при выборе алиаса в выпадающем списке в формуле указывается код выбранного поля для корректной работы запроса), таблицам (при выборе листов или таблиц файловых источников в выпадающем списке в запросе указывается его название в обратных кавычках ` ` для корректной работы запроса).
    • поле «Первичный ключ» для выбора поля текущего фрагмента из выпадающего списка (4). Данный ключ необходим для распознавания строк, полученных после очередной итерации, но впоследствии измененных в источнике.

  • кнопка «Сохранить» (5) – при нажатии на данную кнопку сохраняются настройки инкрементальной загрузки. По умолчанию фрагмент принимает тип «Абсолютный». Для смены типа нажмите на кнопку «Сделать инкрементальным» (6). Смена типа на «Инкрементальный» происходит сразу, и в карточке фрагмента отображается тип «Инкрементальный» .

    Примечание
    При клонировании модели копируются все фрагменты и их настройки, за исключением типа фрагмента «Инкрементальный».

Пример применения стратегии «Запрос к логу изменений» представлен на рисунке ниже (Рисунок «Пример функции для получения данных по стратегии «Запрос к логу изменений»).

Рисунок 15. Пример функции для получения данных по стратегии «Запрос к логу изменений»

Пример функции для получения данных по стратегии «Запрос к логу изменений»

Для получения логов по таблицам в SQL-запросе необходимо указать параметры. Параметры для приведенного на рисунке примера (см. Рисунок «Пример функции для получения данных по таблицам») указаны в поле «SQL», где:

  • analytics.f4bi_get_logs – наименование функции;

  • row_id as pkey, action as action, ts_log::text as ikey – выходные параметры, где:

    • row_id as pkey – ID записи, которая была изменена;

    • action as action – тип действия над записью;

    • ts_log – дата и время изменения записи.

  • ('pers', 'person', '{{last_ikey|default('1900-01-01T00:00:00+00')}}'::timestamp, '9999-12-31T23:59:59+00'::timestamp) – входные параметры, где:

    • pers – схема таблицы БД;

    • person – таблица БД;

    • 1900-01-01T00:00:00+00- дата и время начала периода;

    • 9999-12-31T23:59:59+00 – дата и время окончания периода.

Принцип объединения в одной модели инкрементных и неинкрементных фрагментов:

  1. неинкрементальные (абсолютные) фрагменты загружаются и обновляются полностью;

  2. инкрементальный фрагмент загружается по принципу в зависимости от типа стратегии;

  3. объединение данных происходит с полным набором данных как инкрементальных, так и абсолютных фрагментов в Spark.

Принцип загрузки инкрементального фрагмента с типом стратегии «Запрос к логу изменений»:

  1. в Системе происходит запрос к источнику с помощью функции для получения логов по инкрементальному фрагменту;

  2. источник возвращает идентификаторы записей, которые были изменены за запрашиваемый диапазон времени;

  3. из источника используется текущий инкремент по объекту фрагмента;

  4. в Системе обнаруживаются все ранее загруженные инкременты по этому фрагменту;

  5. из доступных файлов (ранее загруженных и полученных при текущем запросе) формируется единый файл формата Apache Parquet по этому фрагменту, который будет обладать полным набором данных (т.е. формируется полная таблица с данными фрагмента);

  6. полный набор данных по фрагменту передается в Spark, который выполняет все дальнейшие операции.

Стратегия «Стандартная»

Окно настройки инкрементальной загрузки по стратегии «Стандартная» данных содержит следующие элементы (Рисунок «Окно настройки инкрементальной загрузки данных по стратегии «Стандартная»):

Рисунок 16. Окно настройки инкрементальной загрузки данных по стратегии «Стандартная»

Окно настройки инкрементальной загрузки данных по стратегии «Стандартная»

  • блок фрагмента (1);

  • поле «Стратегия» для выбора типа стратегии из выпадающего списка (2). Доступные значения:

    • «Запрос к логу изменений»;

    • «Стандартная».

  • при выборе типа стратегии «Стратегия» доступны следующие настройки (3):

    • поле «Инкрементальный ключ» для выбора поля текущего фрагмента. По выбранному ключу из источника в очередной сеанс синхронизации модели будут загружены все записи, значение IKEY которых будет больше максимального из ранее загруженного в Систему;

    • поле «Первичный ключ» для выбора поля текущего фрагмента. Данный ключ необходим для распознавания строк, полученных после очередной итерации, но впоследствии измененных в источнике;

    • поле «Флаг удаленной записи» для выбора поля текущего фрагмента. Задайте условие с помощью операторов условий. Данный ключ необходим для распознавания строк, полученных после очередной итерации, но впоследствии удаленных в источнике строками по заданному условию.

  • кнопка «Сохранить» (4) – при нажатии на данную кнопку сохраняются настройки инкрементальной загрузки. По умолчанию фрагмент принимает тип «Абсолютный». Для смены типа нажмите на кнопку «Сделать инкрементальным» (5). Смена типа на «Инкрементальный» происходит сразу, и в карточке фрагмента отображается тип «Инкрементальный» .

Пример применения стратегии «Стандартная» представлен на рисунке ниже (Рисунок «Пример настройки для получения данных по стратегии «Стандартная»).

Рисунок 17. Пример настройки для получения данных по стратегии «Стандартная»


Принцип объединения в одной модели инкрементных и неинкрементных фрагментов:

  • неинкрементальные (абсолютные) фрагменты загружаются и обновляются полностью;

  • инкрементальный фрагмент загружается по принципу в зависимости от типа стратегии;

  • объединение данных происходит с полным набором данных как инкрементальных, так и абсолютных фрагментов в Spark.

Принцип загрузки инкрементального фрагмента с типом стратегии «Стандартная»:

  • первая загрузка при включенной инкрементальности: загружаются все данные источника, кроме данных, подходящих под условие, заданное в поле «Флаг удаленной записи». Также отрабатывается запрос на получение максимального значения поля с ключом инкрементальности для последующих запросов на получение инкремента.

  • последующая загрузка:

    1. в Системе происходит запрос к источнику с помощью настроенных атрибутов инкрементального фрагмента (инкрементальный ключ, первичный ключ, условие в поле «Флаг удаленной записи»);

    2. из источника загружается текущий инкремент по объекту фрагмента – все записи источника, у которых значение ключа инкрементальности больше или равно максимальному значению ключа из шага 1, исключая данные, подходящие под условие, заданное в поле «Флаг удаленной записи»;

    3. в Системе обнаруживаются все ранее загруженные инкременты по этому фрагменту;

    4. из доступных файлов (ранее загруженных и полученных при текущем запросе) формируется единый файл формата Apache Parquet по этому фрагменту, который будет обладать полным набором данных (т.е. формируется полная таблица с данными фрагмента);

    5. полный набор данных по фрагменту передается в Spark, который выполняет все дальнейшие операции.

    Примечание
    Если при первичной загрузке модели не была включена инкрементальность, происходит полная загрузка (загружаются все данные), при которой не считываются удаленные записи. При последующих инкрементальных загрузках эти данные невозможно удалить в модели, т.к. их инкрементальный ключ будет меньше запрашиваемого максимального. Чтобы решить проблему, в виджете установите фильтр по полю, которое используется для определения удаленной строки (исключить удаленные строки).