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

Kusto使用parse和mv-expand后如何投射额外列并拆分字符串字段

Kusto查询实现方案

以下是直接可运行的完整查询代码:

// 模拟示例数据,替换为自己的表即可直接使用
datatable(column1:string, column2:string)
[
    "测试行1", @"for each user:[{""id"":1,
""Publisher"":null,
""type"":0,
""Identity"":{
""Id"":""00000000-0000-0000-0000-000000000000"",
""sid"":""134567890""},
""roles"":[],
""permissions"":[],
""name"":""ABC""},
{""id"":2,
""Publisher"":null,
""type"":1,
""Identity"":{
""Id"":""00000000-0000-0000-0000-000000000001"",
""sid"":""134567891""},
""roles"":[""admin""],
""permissions"":[""read"",""write""],
""name"":""DEF""}]",
]
// 提取去掉前缀后的JSON数组字符串
| parse column2 with "for each user:" user_array_str
// 将字符串转为Kusto可解析的动态类型
| extend user_array = dynamic(user_array_str)
// 展开数组,每个用户对象对应独立行,column1自动保留
| mv-expand user = user_array
// 投射所需的所有字段
| project 
    column1,
    id = tolong(user.id),
    Publisher = user.Publisher,
    type = toint(user.type),
    Identity_Id = user.Identity.Id,
    Identity_sid = user.Identity.sid,
    roles = user.roles,
    permissions = user.permissions,
    name = user.name

步骤说明

  • parse算子直接匹配固定前缀for each user:,自动提取后续的JSON数组内容,无需额外做字符串裁剪
  • 转换为动态类型后才能解析JSON的嵌套结构,mv-expand展开数组时原始的column1字段会自动关联到每一行拆分后的数据,不需要额外处理
  • 投射字段时直接用.访问嵌套层级的键值即可,可根据业务需求对字段做类型转换,比如数字类字段用tolong()/toint()转换避免后续计算报错

注意事项

  • 如果存在column2不满足前缀格式的脏数据,可在parse步骤后添加| where isnotempty(user_array_str)过滤无效行
  • 若数组元素存在缺字段的情况,可用coalesce(user.xxx, 默认值)为缺失字段设置默认值

内容的提问来源于stack exchange,提问作者Swasti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 01:54:01