Kusto查询如何定义字典获取键值,实现路径层级匹配参数关联管理
解决方案
实现方式1:单组匹配参数封装(最贴合需求)
直接将索引和目标层级名封装到同一个dynamic对象中,修改参数时仅需修改这一处,完全避免漏改问题:
// 仅需修改此处配置即可切换匹配的层级和对应值 let levelMatch = dynamic({ "index": 1, // 路径层级对应索引,第二层级为1,第三层级为2 "targetValue": "L2" // 对应层级要匹配的目标值 }); TableA | extend PathSeperated = split(Path, "\\") | where PathSeperated[toint(levelMatch.index)] == levelMatch.targetValue
实现方式2:键值对字典实现
如果你需要使用标准的键值对字典结构,正确的定义和访问方式如下:
- 字典定义需要使用JSON对象格式,用
{}包裹键值对 - 数字开头的键不能用
.语法访问,需使用['键名']的索引方式取值
// 定义键为层级索引字符串,值为目标匹配值的字典 let mapping = dynamic({"1":"L2"}); TableA | extend PathSeperated = split(Path, "\\") // 提取字典的第一个键作为索引,第一个值作为匹配目标 | where PathSeperated[toint(bag_keys(mapping)[0])] == bag_values(mapping)[0]
实现方式3:多组层级匹配映射
如果需要同时匹配多个层级规则,可以定义映射数组,配合mv-expand使用:
let mappingList = dynamic([ {"index":1, "value":"L2"}, // 匹配第二层级为L2 {"index":2, "value":"L3"} // 匹配第三层级为L3 ]); TableA | extend PathSeperated = split(Path, "\\") | mv-expand mappingList | where PathSeperated[toint(mappingList.index)] == mappingList.value
注意事项
你之前的let mapping = dynamic("1", "L2");写法不符合Kusto dynamic类型的构造规范,构造字典类型的dynamic变量必须传入合法的JSON对象字符串或结构化JSON表达式。
内容的提问来源于stack exchange,提问作者Laowantong
相关产品推荐
相关产品推荐

