You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Kusto SCAN运算符执行结果的疑问:i=1不匹配s2且n恒为1

range i from 1 to 3 step 1
| scan with_match_id=matchId declare (s: long, n: long=0) with 
(
  step s1: true => s=1, n=s1.n + 1;
  step s2: true => s=2, n=s2.n + 1;
)

执行结果:

isnmatchId
1110
2210
2111
3211
3112

疑问1:为何第一行(i=1)没有被s2步骤匹配?

Kusto的scan是状态机模式,多步骤匹配按顺序执行:

  • 初始状态下,优先尝试第一个步骤s1,由于条件为true,第一行直接匹配s1,生成对应输出行的同时,将该匹配链(matchId=0)的状态推进到s1完成后的阶段。
  • 同一输入行只会匹配第一个符合条件的步骤,不会回溯尝试后续步骤。只有当处理下一行时,已推进的状态才会尝试执行下一个步骤s2。

疑问2:为何字段n的值始终为1?

问题出在状态变量的引用方式:

  • 你写的s1.n和s2.n,引用的是对应步骤的初始默认值(也就是declare时设置的0),而非当前匹配链中已经更新后的n值。
  • 所以每次计算都是0 + 1 = 1,导致n始终为1。
  • 若要实现累计计数,直接引用变量本身即可,修改后的查询如下:
range i from 1 to 3 step 1
| scan with_match_id=matchId declare (s: long, n: long=0) with 
(
  step s1: true => s=1, n = n + 1;
  step s2: true => s=2, n = n + 1;
)

执行后matchId=0的两行n会依次变为1和2,符合累计预期。

内容的提问来源于stack exchange,提问作者mananana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:55:32