如何在KQL中将静态字符串列转换为动态数组以实现跨表值匹配?
KQL字符串列转动态数组及跨表匹配实现方案
核心实现步骤
步骤1:将表A的col1列转为可用动态数组
你之前使用make_list未达预期通常是缺少标量转换步骤,可通过以下代码实现:
// 聚合表A整列col1为动态数组,用toscalar转为标量方便跨表调用 let arrCol1 = toscalar( TableA // 若数据量超过100万,可在make_list第二个参数指定最大元素数避免截断,示例:make_list(col1, 2000000) | summarize make_list(col1) );
如果你的表A每行col1是分隔符拼接的单个字符串,需先拆分每行值为数组:
TableA // 示例按逗号拆分,可替换为实际分隔符 | extend col1Arr = split(col1, ",")
步骤2:实现数组元素与表B col2的逐元素匹配
根据需求,提供两种常用场景的实现:
场景1:仅筛选表B中col2存在于表A col1中的行
直接用in运算符匹配即可:
TableB | where col2 in (arrCol1)
场景2:需按表A col1的顺序逐个匹配全量表B,保留匹配顺序
先给数组元素加上顺序索引,再和表B做关联匹配:
// 给数组元素添加顺序序号,索引从1开始计数 let arrWithOrder = range i from 0 to array_length(arrCol1) - 1 step 1 | project match_order = i + 1, match_value = arrCol1[i]; // 按顺序逐个匹配表B全量col2 arrWithOrder | lookup kind=leftouter (TableB) on $left.match_value == $right.col2
内容的提问来源于stack exchange,提问作者Ayush guha
相关产品推荐
相关产品推荐

