如何编写 kusto 查询以根据列中的值对 n 个连续行进行分组
How to write a kusto query to group n number of consecutive rows based on value in a column
我有一个数据集,其值如下
数据集:
Col1 Col2
A 0
B 1
C 1
D 1
E 0
F 0
G 1
H 0
I 0
J 0
K 1
我想要的结果如下:
Col1 Col2
[A] 0
[B, C, D] 1
[E, F] 0
[G] 1
[H, I, J] 0
[K] 1
或替代为:
Col1 Col2
[B, C, D] 1
[G] 1
[K] 1
有什么方法可以使用 kql 来实现吗?
我研究过使用 prev 函数,但它只在每次有固定行数的情况下才有效。但是这里我需要根据列中的值对 n 行进行分组,但是每次再次启动相同的值时,这些组都需要分开。
给你:
datatable(Col1:string,Col2:long) [
"A", 0,
"B", 1,
"C", 1,
"D", 1,
"E", 0,
"F", 0,
"G", 1,
"H", 0,
"I", 0,
"J", 0,
"K", 1
]
| serialize
| extend NewSession = (row_number() == 1) or (Col2 != prev(Col2))
| extend SessionId = row_cumsum(iff(NewSession, 1, 0))
| summarize Col1 = make_list(Col1) by Col2, SessionId
| project Col1, Col2
输出将正是您想要的。
注意:我使用serialize
,但你也可以使用order by
——但你至少需要其中之一,这样记录才会被排序。
我有一个数据集,其值如下
数据集:
Col1 Col2
A 0
B 1
C 1
D 1
E 0
F 0
G 1
H 0
I 0
J 0
K 1
我想要的结果如下:
Col1 Col2
[A] 0
[B, C, D] 1
[E, F] 0
[G] 1
[H, I, J] 0
[K] 1
或替代为:
Col1 Col2
[B, C, D] 1
[G] 1
[K] 1
有什么方法可以使用 kql 来实现吗?
我研究过使用 prev 函数,但它只在每次有固定行数的情况下才有效。但是这里我需要根据列中的值对 n 行进行分组,但是每次再次启动相同的值时,这些组都需要分开。
给你:
datatable(Col1:string,Col2:long) [
"A", 0,
"B", 1,
"C", 1,
"D", 1,
"E", 0,
"F", 0,
"G", 1,
"H", 0,
"I", 0,
"J", 0,
"K", 1
]
| serialize
| extend NewSession = (row_number() == 1) or (Col2 != prev(Col2))
| extend SessionId = row_cumsum(iff(NewSession, 1, 0))
| summarize Col1 = make_list(Col1) by Col2, SessionId
| project Col1, Col2
输出将正是您想要的。
注意:我使用serialize
,但你也可以使用order by
——但你至少需要其中之一,这样记录才会被排序。