У меня есть requests
datatable с url
, name
, timestamp
столбцами, к которым я добавляю еще один вычисляемый столбец operationType
.
Я хочу фильтровать и запрашивать requests
на основе определенных атрибутов динамического объекта data
, чтобы получить операции и их количество использования, например:
operationType | Counts
-------------------------
1.1 Operation A | 2400
-------------------------
1.2 Operation B | 1500
Что у меня есть:
let daysAgo = 100d;
let data = dynamic([
{
'searchKey': 'url',
'searchOperator': 'contains',
'searchValue': 'AjaxContent?option=something',
'operationName': '1.1 Operation A'
},
{
'searchKey': 'name',
'searchOperator': 'matches regex',
'searchValue': 'POST /api/repo/\\d+/filters',
'operationName': '1.2 Operation B'
}]);
let req = requests
| where (timestamp >= ago(daysAgo))
| where
//Issue #1: I want data[0].searchKey to be used as the requests column name
data[0].searchKey contains data[0].searchValue
//url contains data[0].searchValue //works
//Issue #2: 'doesn't work, error 'matches regex' operator requires string arguments
or name matches data[1].searchValue
//or name matches regex 'POST /api/repo/\\d+/filters' //works
| extend operationType=
case(name == data[2].searchValue, data[2].operationName,
url contains data[0].searchValue, data[0].operationName
'Other - please check' )
| order by timestamp desc;
req | summarize Counts = count() by operationType
Идеальным было бы создать собственный запрос, как показано ниже (и, возможно, даже перебирать атрибуты динамического массива data
) (Q # 3):
requests | where data[0].searchKey data[0].searchOperator data[0].searchValue
В том же контексте идеальным было бы расширить вычисляемый столбец operationType
, чтобы он был каким-то образом создан специально (Q # 4):
requests
| where
...
| extend operationType= case(url contains data[0].searchValue, data[0].operationName,
name matches regex data[0].searchValue, data[0].operationName)
or
requests
| where
...
| extend operationType= case(data[0].searchKey data[0].searchOperator data[0].searchValue, data[0].operationName,
data[1].searchKey data[1].searchOperator data[0].searchValue, data[0].operationName)
- Можно ли использовать динамическое значение в качестве имени столбца данных в операторе
where
(проблема №1)? - Можно ли использовать динамическое значение в качестве правой стороны в операторе
matches regex
(проблема №2)? - Можно ли создать динамически настраиваемый запрос
where
, проходящий через динамический массив (Q # 3)? - Можно ли создать вычисляемый расширенный столбец с помощью оператора
case
(Q # 4)?