Включение профилирования данных
Краткое описание процесса
Настройка отображения профилирования физического слоя в Юниверс DG состоит из следующих шагов:
- Подготовьте фоновую операцию, получающую списки проектов (projects) и профилей (profiles) от профилировщика. Профилировщик находится там же, откуда планируется получать данные. 
- Настройте запуск фоновой операции по указанному расписанию для получения списков проектов и профилей. 
- Если данные для профилирования не загружены, то загрузите их через раздел "Информационные системы". - Если требуемой информационной системы не было создано, то ее необходимо создать и настроить. 
- В свойствах системы заполните список профилей ("Свойства" > поле "Профилирование"). 
- Список профилей должен быть получен от фоновой операции на шаге 2. 
 
- Если данные для профилирования были загружены ранее, то в свойствах информационной системы заполните список профилей ("Свойства" > поле "Профилирование"). 
- Отправьте REST-запрос на получение и сохранение результатов профилирования данных. - Запрос отправляется к стороннему профилировщику. 
- В запросе используются данные проектов и профилей, полученные от фоновой операции. 
 
- Результаты профилирования станут доступны для просмотра. Профилирование возможно только для активов с типом "Колонка", которые отмечены как часть физического слоя (т.е. при загрузке из краулера / сканера получили теги layer:physical и category:attribute). - Краткие результаты профилирования отображаются в карточке типа актива, во вкладке "Связи" (для связанных типов активов, имеющих профилирование). 
- Подробные результаты профилирования отображаются в карточке типа актива, во вкладке "Профилирование". 
 
Инструкция по настройке
Параметры для фоновой операции
Если Юниверс DG установлена с помощью Docker, то настройте параметры через файл .env.
Если система установлена из дистрибутива вручную, то конфигурируйте напрямую файл backend.properties.
Включите операцию, установите расписание запуска и укажите адрес внешнего профилировщика.
Параметры для .env:
- DDG_DIS_UPDATE_PROFILES_PROJECTS_JOB_DISABLED (логический): true. Определяет, выключена ли фоновая операция по обновлению профилей и проектов. 
- DG_DIS_UPDATE_PROFILES_PROJECTS_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-сервиса, который предоставляет данные по проектам. 
- CORE_SECURITY_TOKEN_MANUAL_PROLONGATION_ENABLED (флаг): выключен. Параметр, отвечающий за продление сессии пользователя. 
Параметры для 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). 
- Нажмите кнопку  Сохранить в правом верхнем углу экрана. Запускать сканер не требуется. Сохранить в правом верхнем углу экрана. Запускать сканер не требуется.
- В результате настройки профилирования будут сохранены и будут учитываться при отправке rest-запроса к стороннему профилировщику. 
Если данные еще не загружались:
- Перейдите в раздел "Информационные системы". 
- Выберите требуемую информационную систему или создайте новую. 
- Убедитесь, что заполнены основные параметры системы и настройки сканирования. 
- В поле "Профилирование" после работы фоновой операции появится (или обновится) дерево профилей. 
- Выберите один или несколько профилей (Рисунок 1). 
- После завершения всех настроек нажмите кнопку  Сохранить в правом верхнем углу экрана. Сохранить в правом верхнем углу экрана.
- Перейдите в закладку "Запуски" и запустите сканер. 
- Дождитесь завершения работы сканера. 
В результате завершения любого из сценариев в Юниверс DG будут сохранены данные от имени определенной информационной системы. Этим данным будут соответствовать профили стороннего профилировщика.
 
Рисунок 1 – Дерево профилей
Запрос на сохранение результатов профилирования данных
Чтобы обновить данные профилирования в карточках типов активов нужно отправить к стороннему профилировщику специальный REST-запрос POST /v1/dg/dis/integration/profiling/save.
Для формирования Rest-запроса необходимо знать структуру проектов и профилей в стороннем профилировщике. Отправьте 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": []
      }
   ]
}
Просмотр профилирования
Результаты профилирования видны в карточках типов активов только для физического слоя:
Подробные результаты профилирования отображаются в карточке типа актива, во вкладке "Профилирование".
Краткие результаты профилирования отображаются в карточке типа актива во вкладке "Связи" (для связанных типов активов, имеющих профилирование).