Работа со слоями
Возможности изменения слоя
Изменить слой с UI возможно только при импорте модели.
Также можно изменить слой при отправке REST запроса POST v1/dg/meta/asset-types или PUT v1/dg/meta/asset-types/{id}, заполнив при этом поле tags следующим образом:
Пример поля tags с указанием нужного слоя:
"tags": [
{
"name": "layer"
"value": "logical" // В случае, если актив принадлежит к логическому слою,
"value": "business" // В случае, если актив принадлежит к концептуальному слою
}
]
При попытке добавить актив к физическому слою будет получена ошибка.
Фильтрация и агрегация результатов
Добавлена поддержка фильтрации и агрегации по слоям в поисковом запросе. Фильтрация осуществляется посредством добавления formField'ов. Возможна фильтрация как по одному слою, так и по нескольким.
formFields для фильтрации:
"formFields": [
{
"name": "$layer", // Имя поля слоя актива
"type": "STRING",
"searchType": "EXACT",
"inverted": false,
"value": "logical" // Имя слоя
},
{
"name": "$layer",
"type": "STRING",
"searchType": "EXACT",
"inverted": false,
"value": "business"
}
]
Для агрегации результатов по слоям необходимо добавить следующий фрагмент в поисковый запрос:
Агрегация результатов по слоям актива:
"aggregations": [
{
"aggregationType": "term", // Тип агрегации
"aggregationName": "term_layer_aggregation", // Название агрегации
"path": "$layer", // Имя агрегируемого поля
"minCount": 1,
"size": 100000
}
]
Пример запроса и ожидаемого ответа:
Пример запроса с фильтрацией и агрегацией:
{
"payload": {
"org.unidata.mdm.rest.v2.dq.data": {
"setNames": [],
"ruleNames": [],
"functionNames": [],
"message": null,
"severity": null,
"category": null,
"totalScore": 0,
"matchAll": false,
"negate": false
},
"org.unidata.dg.rest.v1.data": {
"drafts": false,
"countOnly": false,
"totalCount": true,
"returnFields": [
"$etalon_id",
"$display_name",
"$type_name",
"$type_display_name",
"$data_status"
],
"searchFields": [
"$etalon_id",
"$display_name",
"$external_keys",
"$ownership.username"
],
"entity": "",
"text": "",
"searchDataType": "ASSET",
"returnAllFields": false,
"searchAllFields": false,
"hierarchical": false,
"supplementary": [],
"formFields": [
{
"inverted": false,
"name":"$layer",
"searchType":"EXACT",
"type":"String",
"value":"logical"
},
{
"inverted": false,
"name":"$layer",
"searchType":"EXACT",
"type":"String",
"value":"business"
}
],
"fetchAll": false,
"aggregations": [
{
"aggregationType": "term",
"aggregationName": "term_layer_aggreagation",
"path": "$layer",
"minCount": 1,
"size": 100000
}
],
"page": 1,
"count": 10,
"sortFields": [
{
"field": "$popularity",
"order": "DESC",
"type": "STRING"
},
{
"field": "$created_at",
"order": "DESC",
"type": "DATE"
}
]
}
}
}
Пример ответа:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"payload": {
"org.unidata.dg.rest.v1.data": {
"fields": [
"$deleted",
"$layer",
"$data_status",
"$type_display_name",
"$type_name",
"$display_name",
"$etalon_id"
],
"hits": [
{
"id": "20222c97-d3fa-11ef-ad85-3bb2d2d6d24e",
"score": 1.0,
"status": null,
"preview": [
...
,
{
"field": "$layer",
"fieldDisplayName": null,
"fieldValueType": null,
"values": [
"logical"
],
"extendedValues": [
{
"value": "logical",
"displayValue": null,
"linkedEtalonId": null,
"linkedTypeName": null
}
],
"complexValues": null
}
...
],
"source": null
},
{
"id": "1b503221-d3fa-11ef-ad85-3bb2d2d6d24e",
"score": 1.0,
"status": null,
"preview": [
...
{
"field": "$layer",
"fieldDisplayName": null,
"fieldValueType": null,
"values": [
"logical"
],
"extendedValues": [
{
"value": "logical",
"displayValue": null,
"linkedEtalonId": null,
"linkedTypeName": null
}
],
"complexValues": null
}
...
],
"source": null
}
],
"totalCount": 2,
"totalCountLimit": 200000,
"hasRecords": false,
"maxScore": 0.9326271,
"aggregations": [
{
"aggregationName": "term_layer_aggreagation",
"aggregationType": "TERM",
"documentsCount": 2,
"countMap": {
"logical": 2 // имя слоя : количество параметров
}
}
]
}
}
}
Есть возможность агрегации записей с отсутствующим значением. В агрегации search запроса необходимо добавить поле missing. Значение этого поля - имя, в которое будут собираться агрегируемые значения.
Агрегация с учетом отсутствующего значения:
"aggregations": [
{
"aggregationType": "term", // Тип агрегации
"aggregationName": "term_layer_aggregation", // Название агрегации
"path": "$layer", // Имя агрегируемого поля
"minCount": 1,
"size": 100000,
"missing": "no_value" // Имя поля, в котором будет статистика по записям, у которых отсутствует агрегируемое поле
}
]
Ответ search запроса с отсутствующей агрегацией:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"payload": {
"org.unidata.dg.rest.v1.data": {
"fields": [
...
],
"hits": [
...
],
"totalCount": 12,
"totalCountLimit": 200000,
"hasRecords": false,
"maxScore": 0,
"aggregations": [
{
"aggregationName": "term_layer_aggregation",
"aggregationType": "TERM",
"documentsCount": 12,
"countMap": {
"physical": 2,
"logical": 5,
"no_value": 5
}
}
]
}
}
}