如何在Kusto函数中通过键值对字典过滤查询结果?
Kusto函数实现动态字典过滤方案
这个需求完全可行,以下是最优实现方式:
- 参数定义:将
filterDictionary声明为dynamic类型,Kusto原生支持这种动态对象参数,能直接接收你提供的键值对结构。 - JSON列解析:先把字符串类型的
Dimensions列用parse_json()转换为动态对象,方便后续键值匹配。 - 高效过滤:使用Kusto内置的
bag_has_all()函数,一次性检查解析后的Dimensions对象是否包含filterDictionary中的所有键值对,比手动遍历生成多个where条件更简洁高效。
完整函数代码
.create-or-alter function CountWithFilters(filterDictionary: dynamic) { Table | extend DimensionsBag = parse_json(Dimensions) | where bag_has_all(DimensionsBag, filterDictionary) | summarize count() }
调用示例
传入你提供的示例字典:
CountWithFilters(dynamic({ "DataCenter": "CUS", "Result": "Failure" }))
补充说明
如果后续需要支持不等于、模糊匹配等更复杂的过滤逻辑,可以结合bag_keys()和mv-apply遍历字典键值对生成自定义条件,但针对当前"键值完全匹配"的需求,bag_has_all()是性能最优、代码最简洁的方案。
内容的提问来源于stack exchange,提问作者Omer
相关产品推荐
相关产品推荐

