KQL 中的 unix uniq -c 命令等效(某种)?

The unix uniq -c command equivalent (sort of) in KQL?

uniq 命令过滤掉重复的行。重要的是它不会改变输入行的顺序,所以:

$ echo "1,1,1,2,1,1" | tr ',' '\n' | uniq -c
      3 1
      1 2
      2 1

我们可以看到,对于每批相同的值,它指定值的计数,然后是值本身。

我正在寻找 KQL 中的等效项。当然,我想运行一些字段上的一些聚合函数,但本质是一样的。到目前为止,我使用的是 summarize 运算符,但它并不相同,因为它将相同值的所有实例分组,即使在我的排序中它们之间还有其他记录。就像sort | uniq -cuniq -c的区别。

如何在不重新排序的情况下进行总结?

datatable(timestamp:int,val:int)[7,1 ,9,1 ,12,1 ,13,2 ,19,1 ,24,1 ,25,1, 26,1 ,27,2, 29,2 ,33,2 ,36,1, 42,1]
| order by timestamp asc
| extend group_id = row_number() - row_number(1, prev(val) != val)
| summarize val_occurrences = count(), from_timestamp = min(timestamp), to_timestamp = max(timestamp) by group_id, val
| project-away group_id
| order by from_timestamp asc

原始数据:

+-----------+-----+
| timestamp | val |
+-----------+-----+
|         7 |   1 |
|         9 |   1 |
|        12 |   1 |
|        13 |   2 |
|        19 |   1 |
|        24 |   1 |
|        25 |   1 |
|        26 |   1 |
|        27 |   2 |
|        29 |   2 |
|        33 |   2 |
|        36 |   1 |
|        42 |   1 |
+-----------+-----+

结果:

+-----+-----------------+----------------+--------------+
| val | val_occurrences | from_timestamp | to_timestamp |
+-----+-----------------+----------------+--------------+
|   1 |               3 |              7 |           12 |
|   2 |               1 |             13 |           13 |
|   1 |               4 |             19 |           26 |
|   2 |               3 |             27 |           33 |
|   1 |               2 |             36 |           42 |
+-----+-----------------+----------------+--------------+