如何使用Kusto从嵌套文档建表关联并提取指定字段?
你提供的原始数据集JSON存在笔误,
set_b后缺少冒号,修正后合法结构如下:
data_set = { "set_a": { "a":1, "b":2, "c":3 }, "set_b": { "x":5, "y":6, "z":7 } }
操作1:从嵌套文档创建独立表并完成关联
假设你已经将该嵌套JSON存入Kusto表的动态类型字段中,我们约定存储原始数据的表名为RawData,存储该嵌套结构的字段名为data,操作步骤如下:
- 第一步:提取
set_a的所有字段生成独立永久表SetA
.set SetA <| RawData // 取出set_a属性包 | project set_a = data.set_a // 将属性包的所有键展开为独立列 | evaluate bag_unpack(set_a)
- 第二步:提取
set_b的所有字段生成独立永久表SetB
.set SetB <| RawData | project set_b = data.set_b | evaluate bag_unpack(set_b)
- 第三步:两表关联
由于你的两组数据都是单条记录无关联键,我们可以构造公共关联列完成关联:
SetA // 构造公共关联键 | extend JoinKey = 1 | join kind=inner ( SetB | extend JoinKey = 1 ) on JoinKey // 移除多余的关联键字段 | project-away JoinKey, JoinKey1
操作2:提取指定字段生成新表
你可以直接从原始嵌套数据提取,无需先拆分表,操作代码如下:
// 持久化生成新表NewTable,存储a、b、x三个字段 .set NewTable <| RawData | project a = data.set_a.a, b = data.set_a.b, x = data.set_b.x
如果已经拆分出SetA和SetB,也可以用关联后的结果生成新表:
.set NewTable <| SetA | extend JoinKey = 1 | join kind=inner ( SetB | extend JoinKey = 1 | project x, JoinKey ) on JoinKey | project a, b, x
补充说明
- 如果你不需要持久化存储表,只是做临时查询,去掉开头的
.set 表名 <|部分,直接运行后续查询语句即可。 - 如果你是直接将该JSON作为输入数据查询,不需要先存入
RawData表,可以用datatable构造输入源:
// 直接构造输入源查询示例 datatable(data:dynamic) [ dynamic({ "set_a": {"a":1,"b":2,"c":3}, "set_b": {"x":5,"y":6,"z":7} }) ] | project a = data.set_a.a, b = data.set_a.b, x = data.set_b.x
内容的提问来源于stack exchange,提问作者AnonymousScientificUser
相关产品推荐
相关产品推荐

