使用 toscalar 的 Kusto 子查询选择 - returns 仅最后匹配的记录
Kusto sub query selection using toscalar - returns only last matching record
我指的是sqlcheatsheet - Nested queries
查询 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)))
第二个查询的结果returns条记录只匹配子查询的最后一条记录
即:) > -c580-11e9-9b01-c3be0f4a2bf2
问题:
如何得到与所有三项匹配的整个结果集。
我的要求是获取特定请求的整个日志序列。
为了获得以下输入,我可以获取一个日志,从中我可以找到 ItemId
itemId 看起来像 "b5066283-c7ea-11e9-9e9b-2ff40863cba4"
。与此请求相关的所有日志的其余部分必须具有 "-c7ea-11e9-9e9b-2ff40863cba4"
此值。只有第一部分会像 b5066284
, b5066285
, b5066286
这样递增。
toscalar()
,顾名思义,return是一个标量值。
给定一个包含 N
列和 M
行的表格参数,它将 return 第一列和第一行中的值。
例如:下面将return一个单一的值- 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
)
)
我指的是sqlcheatsheet - Nested queries
查询 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)))
第二个查询的结果returns条记录只匹配子查询的最后一条记录
即:) > -c580-11e9-9b01-c3be0f4a2bf2
问题:
如何得到与所有三项匹配的整个结果集。
我的要求是获取特定请求的整个日志序列。
为了获得以下输入,我可以获取一个日志,从中我可以找到 ItemId
itemId 看起来像 "b5066283-c7ea-11e9-9e9b-2ff40863cba4"
。与此请求相关的所有日志的其余部分必须具有 "-c7ea-11e9-9e9b-2ff40863cba4"
此值。只有第一部分会像 b5066284
, b5066285
, b5066286
这样递增。
toscalar()
,顾名思义,return是一个标量值。
给定一个包含 N
列和 M
行的表格参数,它将 return 第一列和第一行中的值。
例如:下面将return一个单一的值- 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
)
)