如何根据 Kusto 中的状态汇总时间 window

How to summarize time window based on a status in Kusto

我最近开始与 Kusto 合作。我遇到了一个用例,我需要确认我采用的方法是否正确。

我有以下格式的数据

在上面的示例中,如果状态为 1 并且时间范围等于 15 秒,那么我需要将其假设为出现 1 次。

所以在这种情况下出现了 2 个状态。 我的方法是

if the current and next rows status is equal to 1 then take the time difference and do row_cum_sum and break it if the next(STATUS)!=0.

即使该方法为我提供了正确的输出,我假设一旦大小增加,性能会降低。

我正在寻找替代方法(如果有的话)。 还添加了完整的场景以使用示例数据重现这一点。

.create-or-alter function with (folder = "Tests", skipvalidation = "true") InsertFakeTrue() {
range LoopTime from ago(365d) to now() step 6s 
| project TIME=LoopTime,STATUS=toint(1)
}

.create-or-alter function with (folder = "Tests", skipvalidation = "true") InsertFakeFalse() {
range LoopTime from ago(365d) to now() step 29s 
| project TIME=LoopTime,STATUS=toint(0)
}


.set-or-append FAKEDATA <| InsertFakeTrue();

.set-or-append FAKEDATA <| InsertFakeFalse();



FAKEDATA
| order by TIME asc
| serialize 
| extend cstatus=STATUS
| extend nstatus=next(STATUS)
| extend WindowRowSum=row_cumsum(iff(nstatus ==1 and cstatus ==1, datetime_diff('second',next(TIME),TIME),0),cstatus !=1)
| extend windowCount=iff(nstatus !=1 or isnull(next(TIME)), iff(WindowRowSum ==15, 1,iff(WindowRowSum >15,(WindowRowSum/15)+((WindowRowSum%15)/15),0)),0 ) 
| summarize  IDLE_COUNT=sum(windowCount)
  1. 问题中的方法是在 Kusto 中实现此类计算的方法,并且考虑到需要排序的逻辑也是有效的(只要排序后的数据可以驻留在一台机器上)。

  2. 关于联合运算符-默认并行运行,您可以使用提示控制并发和传播,参见:union operator