json - 展平 kusto 列中的嵌套 json

标签 json flatten azure-data-explorer

我有一个 kusto 表,其中一列是带有嵌套 json 的动态类型, 我如何在 kusto 中压平? mv-expand 仅执行一级。

column1 : timetsamp
column2 : id
column3 : json object

timestamp   id  value
2020-10-13 22:42:05.0000000 d0  "{
  ""value"": ""0"",
  ""max"": ""0"",
  ""min"": ""0"",
  ""avg"": ""0""
}"
2020-10-13 22:42:05.0000000 d0  "{
  ""sid"": ""a0"",
  ""data"": {
    ""x"": {
      ""a"": {
        ""t1"": ""2020-10-13T22:46:50.1310000Z"",
        ""m1"": 446164,
        ""m4"": {
          ""m41"": ""abcd"",
          ""m42"": 1234
        }
      }
    }
  }
}"

#update2:我能够修改键,但不能修改值

let testJson = datatable(timestamp : datetime, id : string, value : dynamic )
    [datetime(2020-10-13T22:42:05Z), 'd0', dynamic({"value":"0","max":"0","min":"0","avg":"0"}),
     datetime(2020-10-13T22:42:05Z), 'd1', dynamic({"sid":"a0","data":{"x":{"a":{"t1":"2020-10-13T22:46:50.131Z","m1":446164,"m4":{"m41":"abcd","m42":1234}}}}})];
testJson
| extend key=treepath(value)
| mv-expand key
| extend value1 = value[tostring(key)]

最佳答案

您可以多次调用 mv-expand:

let _data = datatable (column1:datetime , column2:string , column3:dynamic )
[
datetime(2020-10-13 22:42:05.0000000), 'd0', dynamic({
  "value": "0",
  "max": "0",
  "min": "0",
  "avg": "0"
}),
datetime(2020-10-13 22:42:05.0000000), 'd0', dynamic({
  "sid": "a0",
  "data": {
    "x": {
      "a": {
        "t1": "2020-10-13T22:46:50.1310000Z",
        "m1": 446164,
        "m4": {
          "m41": "abcd",
          "m42": 1234
        }
      }
    }
  }
})
];
_data
| mv-expand column3
| mv-expand more_data=column3.data.x.a
| mv-expand more_data_m4=more_data.m4

您还可以使用evaluate bag_unpack()将动态字段提升为列: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/bag-unpackplugin

let _data = datatable (column1:datetime , column2:string , column3:dynamic )
[
datetime(2020-10-13 22:42:05.0000000), 'd0', dynamic({
  "value": "0",
  "max": "0",
  "min": "0",
  "avg": "0"
}),
datetime(2020-10-13 22:42:05.0000000), 'd0', dynamic({
  "sid": "a0",
  "data": {
    "x": {
      "a": {
        "t1": "2020-10-13T22:46:50.1310000Z",
        "m1": 446164,
        "m4": {
          "m41": "abcd",
          "m42": 1234
        }
      }
    }
  }
})
];
_data
| mv-expand column3
| extend expanded_data = column3.data.x.a
| evaluate bag_unpack(expanded_data)

关于json - 展平 kusto 列中的嵌套 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64379848/

相关文章:

javascript - 从 MongoDB 在 Node.Js 中创建一个 JSON 树

json - Unix jq 解析通配符

c# - 从 python 脚本执行 c# 控制台应用程序-好的设计?

Python 展平列表(但不是所有的方式)

snowflake-cloud-data-platform - 混合数组和字典的横向展平雪管数据

java - 无法使用 JSON 在数组下添加数组元素

java - 如何在 Java 8 的 map 中展平列表

azure - 如何处理读入 Azure 数据资源管理器的记录的删除或更新?

python - Azure Kusto Spark 在写入中重写 ingestion_time()

sql - 如何在 kusto/kql/azure 中取消透视列并将多个列放入一个列中