KQL是否提供列表对列表筛选器?现有实现及简化语法诉求
KQL列表对列表的简洁筛选方案
KQL目前没有原生的any(col, values)、all(col, values)、none(col, values)这类直接实现列表对列表筛选的运算符,但你可以通过自定义函数封装现有逻辑,实现接近你期望的简洁写法:
自定义筛选函数
// 匹配列表中任意值:col包含values里的至少一个元素 let any_match = (col:dynamic, values:dynamic) { array_length(set_intersect(col, values)) > 0 }; // 匹配列表中所有值:col包含values里的全部元素 let all_match = (col:dynamic, values:dynamic) { array_length(set_intersect(col, values)) == array_length(values) }; // 完全不匹配:col不包含values里的任何元素 let none_match = (col:dynamic, values:dynamic) { array_length(set_intersect(col, values)) == 0 };
调用示例
// 筛选col包含[1,2,3]中任意值的记录 Table | where any_match(col, dynamic([1,2,3])) // 筛选col包含[1,2,3]中所有值的记录 Table | where all_match(col, dynamic([1,2,3])) // 筛选col不包含[1,2,3]中任何值的记录 Table | where none_match(col, dynamic([1,2,3]))
进阶简化(固定筛选值)
如果你的筛选值是固定列表,可以把值直接嵌入函数,进一步简化调用:
// 固定筛选值为[1,2,3]的任意匹配函数 let any_match_fixed = (col:dynamic) { array_length(set_intersect(col, dynamic([1,2,3]))) > 0 }; // 直接调用简化后的函数 Table | where any_match_fixed(col)
内容的提问来源于stack exchange,提问作者TheFunk
相关产品推荐
相关产品推荐

