2

我最近开始与 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)
4

1 回答 1

3
  1. 问题中的方法是在 Kusto 中实现此类计算的方法,并且考虑到需要排序的逻辑也是有效的(只要排序后的数据可以驻留在单台机器上)。

  2. 关于联合运算符 - 默认情况下并行运行,您可以使用提示控制并发和传播,请参阅:联合运算符

于 2020-06-09T21:37:33.137 回答