You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:54:03