Выбор подзапроса Kusto с использованием toscalar - возвращает только последнюю соответствующую запись
Я имею в виду sqlcheatsheet - Вложенные запросы
Запрос 1:
traces
| where customDimensions.Domain == "someDomain"
| where message contains "some-text"
| project itemId=substring(itemId,indexof(itemId,"-"),strlen(itemId))
Результат:
Itemid
-c580-11e9-888a-8776d3f65945
-c580-11e9-888a-8776d3f65945
-c580-11e9-9b01-c3be0f4a2bf2
Запрос 2:
traces
| where customDimensions.Domain == "someDomain"
| where itemId has toscalar(
traces
| where customDimensions.Domain == "someDomain"
| where message contains "some-text"
| project itemId=substring(itemId,indexof(itemId,"-"),strlen(itemId)))
Результат для второго запроса возвращает записи, соответствующие только последней записи подзапроса
то есть:) > -c580-11e9-9b01-c3be0f4a2bf2
Вопрос:
Как получить весь набор результатов, который соответствует всем трем элементам.
Мое требование - взять всю последовательность логов для конкретного запроса.
Чтобы получить, что у меня есть входы ниже, я мог бы взять один журнал, из которого я могу найти ItemId
ItemId выглядит как "b5066283-c7ea-11e9-9e9b-2ff40863cba4"
, Остальные журналы, относящиеся к этому запросу, должны иметь "-c7ea-11e9-9e9b-2ff40863cba4"
это значение. Только первая часть будет увеличена как b5066284
, b5066285
, b5066286
как это.
1 ответ
toscalar()
, как следует из его имени, возвращает скалярное значение.
Учитывая табличный аргумент с N
столбцы и M
в строках будет возвращено значение в 1-м столбце и 1-й строке.
Например: следующее вернет одно значение - 1
let T = datatable(a:int, b:int, c:int)
[
1,2,3,
4,5,6,
7,8,9,
]
;
print toscalar(T)
Если я правильно понял цель вашего второго запроса, вы сможете выполнить свое требование, используя has_any
,
Например:
let T = datatable(item_id:string)
[
"c580-11e9-888a-8776d3f65945",
"c580-11e9-888a-8776d3f65945",
"c580-11e9-9b01-c3be0f4a2bf2",
]
;
T
| where item_id has_any (
(
T
| parse item_id with * "-" item_id
)
)