首页 > 解决方案 > 如何在 Azure 数据资源管理器中对 JSON 对象进行动态联接

问题描述

我有一个使用 parse_json() 函数解析的嵌套 json 字符串。样本数据看起来像

{ "one":"OneValue", "four""FourValue", {"1":"stringA", "24":"stringBlah"..}}

嵌套 json 字符串中的值“1”和“24”是映射表的键。

样本映射表数据“1”:“One”“24”:“TwentyFour”

我想将嵌套 json 中的键与映射表连接起来,并有一个查询输出值而不是键。关于如何在键上进行动态连接的任何建议?

标签: azure-data-explorer

解决方案


我不完全确定我是否正确理解了您的意图,但以下内容可能会给您一个方向:

let T1 = datatable(d:dynamic)
[
    dynamic({ "one":"OneValue", "four": "FourValue", "prop":{"1":"stringA", "24":"stringBlah"}}),
    dynamic({ "one":"OneValue", "four": "FourValue", "prop":{"3":"stringB", "24":"stringBlahBlah"}})
]
;
let T2 = datatable(i:int, s:string)
[
    1,  "One",
    24, "TwentyFour",
    3,  "Three"
]
;
let map = toscalar(
    T2
    | summarize make_bag(pack(tostring(i), s))
)
;
T1
| project prop = d.prop
| mv-apply prop on 
(
    extend key = tostring(bag_keys(prop)[0])
    | project p = pack(tostring(map[key]), prop[tostring(key)])
    | summarize result = make_bag(p)
)

这返回:

|result                                              |
|----------------------------------------------------|
|{"One":   "stringA", "TwentyFour": "stringBlah"}    |
|{"Three": "stringB", "TwentyFour": "stringBlahBlah"}|

推荐阅读