Azure Data Explorer(Kusto)中行转列实现问题求助
Kusto行转列(Pivot)正确实现方法
你遇到的问题是因为直接使用pivot时未指定聚合函数和明确分组逻辑,导致Kusto将MemberCount也作为分组依据,最终生成8行数据。
正确查询写法
要实现按GroupName分组、将MemberType转为列、对应MemberCount填充至列中的需求,需在pivot中指定聚合函数(由于每个GroupName+MemberType组合仅有一个值,用sum或max均可):
let mainTable = datatable (GroupName:string, MemberCount:int, MemberType:string)[ "ABC",5,"User", "ABC",10,"MSI", "ABC",15,"ServiceAccount", "ABC",20,"SPN", "XYZ",3,"User", "XYZ",6,"MSI", "XYZ",9,"ServiceAccount", "XYZ",12,"SPN", ]; mainTable | evaluate pivot(MemberType, sum(MemberCount))
结果说明
执行后会得到2行目标数据,列结构为:GroupName、User、MSI、ServiceAccount、SPN
具体数据如下:
| GroupName | User | MSI | ServiceAccount | SPN |
|---|---|---|---|---|
| ABC | 5 | 10 | 15 | 20 |
| XYZ | 3 | 6 | 9 | 12 |
原写法失效原因
直接使用| evaluate pivot(MemberType)时,Kusto默认会把所有非pivot字段(包括MemberCount)当作分组键。由于每行的MemberCount都不重复,最终会生成8行数据。通过指定聚合函数,Kusto会自动以GroupName为唯一分组键,将同一组内不同MemberType对应的MemberCount聚合后填充到对应列中。
内容的提问来源于stack exchange,提问作者Vinny
相关产品推荐
相关产品推荐

