0

我指 的是sqlcheatsheet - 嵌套查询

查询一:

traces
    | where customDimensions.Domain == "someDomain"
    | where message contains "some-text" 
    | project itemId=substring(itemId,indexof(itemId,"-"),strlen(itemId))

结果 :

项目 ID

-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

4

1 回答 1

1

toscalar(),顾名思义,返回一个标量值。

N给定一个包含列和行的表格参数,M它将返回第一列和第一行中的值。

例如:以下将返回一个值 -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
    )
)

于 2019-08-26T15:23:42.643 回答