Включение профилирования данных

Краткое описание процесса

Настройка отображения профилирования физического слоя в Юниверс DG состоит из нескольких шагов.

  1. Подготавливается фоновая операция, получающая списки проектов (projects) и профилей (profiles) от профилировщика. Профилировщик находится там же, откуда планируется получать данные.

  2. Фоновая операция запускается по указанному расписанию, и получает списки проектов и профилей.

  3. Если данные для профилирования не загружены, то данные загружаются через раздел Информационные системы.

    • Если требуемой информационной системы не было создано, то она создается и настраивается.

    • В свойствах системы заполняется список профилей (Свойства > поле Профилирование).

    • Список профилей должен быть получен от фоновой операции на шаге 2.

  4. Если данные для профилирования были загружены ранее, то в свойствах информационной системы заполняется список профилей (Свойства > поле Профилирование).

  5. Отправка REST-запроса на получение и сохранение результатов профилирования данных.

    • Запрос отправляется к стороннему профилировщику.

    • В запросе используются данные проектов и профилей, полученные от фоновой операции.

  6. Результаты профилирования становятся доступными для просмотра. Профилирование возможно только для активов с типом "Колонка", которые отмечены как часть физического слоя (т.е. при загрузке из краулера / сканера получили теги layer:physical и category:attribute).

Инструкция по настройке

Параметры для фоновой операции

Если Юниверс DG установлена с помощью Docker, то настройте параметры через файл .env. Если система установлена из дистрибутива вручную, то конфигурируйте напрямую файл backend.properties.

Включите операцию, установите расписание запуска и укажите адрес внешнего профилировщика.

Параметры для .env:

  • DG_DIS_UPDATE_PROFILES_JOB_DISABLED (логический): true. Определяет, выключена ли фоновая операция по обновлению профилей и проектов.

  • DG_DIS_UPDATE_PROFILES_CRONEX (строковый): 0 0 0/1 * * ?. CRON-выражение, устанавливает расписание, по которому происходит запуск фоновой операции.

  • DG_DIS_UPDATE_PROFILES_URL (строковый): http://localhost/list/profiles. URL внешнего Rest-сервиса, который предоставляет данные по профилям.

  • DG_DIS_UPDATE_PROJECTS_URL (строковый): http://localhost/list/projects. URL внешнего Rest-сервиса, который предоставляет данные по проектам.

Параметры для backend.properties:

  • com.universe.dg.dis.integration.job.update.profiles.disabled (логический): true. Определяет, выключена ли фоновая операция по обновлению профилей и проектов.

  • com.universe.dg.dis.integration.job.update.profiles.cronex (строковый): 0 0 0/1 * * ?. CRON-выражение, устанавливает расписание, по которому происходит запуск фоновой операции.

  • com.universe.dg.dis.integration.job.update.profiles.url (строковый): http://localhost/list/profiles. URL внешнего Rest-сервиса, который предоставляет данные по профилям.

  • com.universe.dg.dis.integration.job.update.projects.url (строковый): http://localhost/list/projects. URL внешнего Rest-сервиса, который предоставляет данные по проектам.

Получение проектов и профилей от фоновой операции

Фоновая операция будет запускаться по заданному расписанию. После каждого запуска списки проектов и профилей будут сохраняться в Юниверс DG (старые будут обновляться).

После сохранения списки проектов и профилей становятся доступными для выбора на страницах информационных систем в поле Профилирование.

Эта же информация предназначена для создания запроса к стороннему профилировщику на сохранение результата профилирования.

Операция отправляет GET-запросы на получение проектов на URL сom.universe.dg.dis.integration.job.update.projects.url и на получение профилей на URL com.universe.dg.dis.integration.job.update.profiles.url. Посмотреть ответ на запросы в виде дерева можно через GET-запрос /v1/dg/dis/integration/profiling/profiles-tree.

Пример ответа на запрос получения проектов:

{
    "get_list_projectss": {
        "get_list_projects": {
            "Projects": [{
                    "Type_project": "Project",
                    "Name": "IDQ_RULE_1",
                    "Id": "project_id_1",
                    "Parent_id": ""
                }, {
                    "Type_project": "Project",
                    "Name": "IDQ_RULE_2",
                    "Id": "project_id_2",
                    "Parent_id": ""
                }, {
                    "Type_project": "Folder",
                    "Name": "IDQ_TEST",
                    "Id": "project_id_3",
                    "Parent_id": "project_id_2"
                }
            ]
        }
    }
}

Пример ответа на запрос получения профилей:

{
    "get_list_profiless": {
       "get_list_profiles": {
            "Profiles": [{
                    "Project_id": "project_id_1",
                    "Name": "Profile_Clients",
                    "ID_Profile": "123",
                    "Type_profiles": "Profile",
                    "URL": "http://link-to-profile-clients.com"
                }, {
                    "Project_id": "project_id_3",
                    "Name": "Profile",
                    "ID_Profile": "124",
                    "Type_profiles": "Enterprise",
                    "URL": "http://link-to-profile.com"
                }
            ]
        }
    }
}

Загрузка данных / обновление дерева профилирования

Если данные от имени требуемой информационной системы загружены ранее:

  1. Перейдите в раздел Информационные системы.

  2. Выберите требуемую информационную систему.

  3. В поле Профилирование после работы фоновой операции появится (или обновится) дерево профилей.

  4. Выберите один или несколько профилей (Рисунок 1).

  5. Нажмите кнопку image2 «Сохранить» в правом верхнем углу экрана. Запускать сканер не требуется.

  6. В результате настройки профилирования будут сохранены и будут учитываться при отправке rest-запроса к стороннему профилировщику.

Если данные еще не загружались:

  1. Перейдите в раздел Информационные системы.

  2. Выберите требуемую информационную систему или создайте новую.

  3. Убедитесь, что заполнены основные параметры системы и настройки сканирования.

  4. В поле Профилирование после работы фоновой операции появится (или обновится) дерево профилей.

  5. Выберите один или несколько профилей (Рисунок 1).

  6. После завершения всех настроек нажмите кнопку image2 «Сохранить» в правом верхнем углу экрана.

  7. Перейдите в закладку Запуски и запустите сканер.

  8. Дождитесь завершения работы сканера.

В результате завершения любого из сценариев в Юниверс DG будут сохранены данные от имени определенной информационной системы. Этим данным будут соответствовать профили стороннего профилировщика.

Дерево профилей

Рисунок 1 – Дерево профилей

Запрос Сохранение результатов профилирования данных

Чтобы обновить данные профилирования в карточках типов активов нужно отправить к стороннему профилировщику специальный REST-запрос POST /v1/dg/dis/integration/profiling/save.

Для формирования рест-запроса необходимо знать структуру проектов и профилей в стороннем профилировщике. Отправьте GET-запрос /v1/dg/dis/integration/profiling/profiles-tree. В качестве ответа придет информация о профилях в виде дерева (как в разделе Информационные системы > Свойства > поле Профилирование).

Рекомендации по заполнению POST /v1/dg/dis/integration/profiling/save.

  • В informationSystem указывается информационная система, от имени которой загружены данные. Результат профилирования данных сохранится только если информационная система с заданным именем существует.

  • Ключи profileId и profileChildId заполняются совместно, с использованием данных о структуру проектов и профилей. Два возможных варианта заполнения ключей:

    • Информационной системе назначен профиль типа Enterprise (например, "profileId": "enterprise_profile_id_1"). Тогда при сохранении результата профилирования для этого профиля под ключом "profileId" указывается ID этого профиля (т.е. "profileId": "enterprise_profile_id_1"), а под ключом "profileChildId" указывается ID одного из дочерних профилей, который не принадлежит дереву профилей (например, "profileChildId": "child_profile_id_2").

    • Информационной системе назначен профиль типа Profile (например, "profileId": "profile_id_1"). Тогда при сохранении результата профилирования для этого профиля под ключом "profileId" указывается ID фиктивного родителя этого профиля (например, "profileId": "parent_profile_id_2"), который не принадлежит дереву профилей, а под ключом "profileChildId" указывается ID самого профиля (т.е. "profileChildId": "profile_id_1").

  • В Юниверс DG отображается только профилирование от последнего запроса сохранения результатов. Последняя дата выполнения профилирования считается двумя способами:

    • Если профиль типа Enterprise, тогда считается минимальная дата по всем последним результатам профилирования для данной ИС и дочерних профилей ("profileId" = ID этого профиля), т.е. учитывается executionDate + profileId.

    • Если профиль типа Profile, тогда считается максимальная дата по всем результатам профилирования для данной ИС и "profileChildId" = ID этого профиля, т.е. учитывается executionDate + profileChildId.

  • Путь к данным в Юниверс DG указывается в ключе path, но без указания информационной системы. Например, в интерфейсе, в столбце "Путь до актива" путь profiler > com_unidata_mdm_workflow_core > act_hi_caseactinst. В ключе path путь будет выглядеть как "com_unidata_mdm_workflow_core/act_hi_caseactinst".

  • Если запрос успешен и результаты профилирования данных сохранены, то возвращается пустой ответ со статусом 200.

Пример запроса POST /v1/dg/dis/integration/profiling/save

{
   "informationSystem": "local_test_DB_IS",
   "statisticsProfiles": [
      {
         "profileId": "sample_parent_profile_1",
         "profileChildId": "profile_1",
         "executionDate": "2023-07-23T00:00:00.000Z",
         "executionId": 2,
         "columnCount": 11,
         "rowsCount": 41,
         "columns": [
         {
            "name": "counter",
            "path": "public/test_table/counter",
            "generalInfo": {
               "minValue": "2",
               "maxValue": "20",
               "minLength": 12,
               "maxLength": 19,
               "distinctValue": 23,
               "distinctPercent": 56.1,
               "nullValue": 0,
               "nullPercent": 0,
               "noDistinctValue": 18,
               "noDistinctPercent": 43.9,
               "average": 5.2,
               "sum": 101.5,
               "standardDeviation": 2.2,
               "documentedDataType": "String(19)"
            },
            "patternInfo": [
               {
               "pattern": "9",
               "frequency": 41,
               "percent": 100
               }
            ],
            "valueInfo": [
               {
               "value": "20",
               "frequencyValue": 30,
               "percentValue": 73.17
               },
               {
               "value": "2",
               "frequencyValue": 3,
               "percentValue": 7.32
               },
               {
               "value": "23",
               "frequencyValue": 8,
               "percentValue": 19.51
               }
            ],
            "dataTypeInfo": [
               {
               "dataType": "number(12)",
               "frequencyDataType": 20,
               "percentDataType": 52
               },
               {
               "dataType": "number(19)",
               "frequencyDataType": 21,
               "percentDataType": 48
               }
            ]
         }
         ]
      }
   ]
}

Пример ответа на запрос получения информационных систем с назначенными профилями (ответа на GET /v1/dg/dis/integration/profiling/information-systems)

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "informationSystems": [
      {
         "name": "test_db_info_system",
         "profiles": [
         {
            "profileId": "profile_1",
            "lastExecutionDate": "2023-07-21T03:00:00+03:00"
         },
         {
            "profileId": "profile_2",
            "lastExecutionDate": "2023-07-23T03:00:00+03:00"
         }
         ]
      },
      {
         "name": "IS1",
         "profiles": [
         {
            "profileId": "profile_1",
            "lastExecutionDate": "2023-09-05T12:50:00+03:00"
         },
         {
            "profileId": "profile_2",
            "lastExecutionDate": "2023-09-05T08:50:00+03:00"
         }
         ]
      },
      {
         "name": "new_info_system",
         "profiles": []
      }
   ]
}

Просмотр профилирования

Результаты профилирования видны в карточках типов активов только для физического слоя.