【问题标题】:Azure Log Analytics parse jsonAzure Log Analytics 解析 json
【发布时间】:2020-09-21 05:57:35
【问题描述】:

我有一个查询,它产生几列但其中一列,我正在解析 JSON 以检索对象值,但其中有多个条目我希望 JSON 中的每个条目在循环中检索并显示。

下面是查询,

let forEach_table = AzureDiagnostics
| where Parameters_LOAD_GROUP_s contains 'LOAD(AUTO)';
let ParentPlId = '';
let ParentPlName = '';
let commonKey = '';
forEach_table
| where Category == 'PipelineRuns'
| extend pplId = parse_json(Predecessors_s)[0].PipelineRunId, pplName = parse_json(Predecessors_s)[0].PipelineName
| extend dbMapName = tostring(parse_json(Parameters_getMetadataList_s)[0].dbMapName)
| summarize count(runId_g) by Resource, Status = status_s, Name=pipelineName_s, Loadgroup = Parameters_LOAD_GROUP_s, dbMapName, Parameters_LOAD_GROUP_s, Parameters_getMetadataList_s, pipelineName_s, Category, CorrelationId, start_t, end_t, TimeGenerated
| project ParentPL_ID = ParentPlId, ParentPL_Name = ParentPlName, LoadGroup_Name = Loadgroup, Map_Name = dbMapName, Status,Metadata = Parameters_getMetadataList_s, Category,  CorrelationId, start_t, end_t
| project-away ParentPL_ID, ParentPL_Name, Category, CorrelationId

在上面的代码中,

extend dbMapName = tostring(parse_json(Parameters_getMetadataList_s)[0].dbMapName)

我正在检索第 0 个元素作为默认值,但我想按顺序检索所有元素,有人可以建议我如何实现这一点。

【问题讨论】:

    标签: azure azure-log-analytics kql


    【解决方案1】:

    bag_keys() 正是您所需要的。

    例如,看看这个查询:

    datatable(myjson: dynamic) [
       dynamic({"a": 123, "b": 234, "c": 345}),
       dynamic({"dd": 123, "ee": 234, "ff": 345})
    ]
    | project keys = bag_keys(myjson)
    

    它的输出是:

    |---------|
    | keys    |
    |---------|
    | [       |
    |   "a",  |
    |   "b",  |
    |   "c"   |
    | ]       |
    |---------|
    | [       |
    |   "dd", |
    |   "ee", |
    |   "ff"  |
    | ]       |
    |---------|
    

    如果您想将每个键放在单独的行中,请使用mv-expand,如下所示:

    datatable(myjson: dynamic) [
       dynamic({"a": 123, "b": 234, "c": 345}),
       dynamic({"dd": 123, "ee": 234, "ff": 345})
    ]
    | project keys = bag_keys(myjson)
    | mv-expand keys
    

    此查询的输出将是:

    |------|
    | keys |
    |------|
    | a    |
    | b    |
    | c    |
    | dd   |
    | ee   |
    | ff   |
    |------|
    

    【讨论】:

    • 嗨 Slavik,感谢您的建议,但我对上述建议有几个问题。因此,对于我的场景,Parameters_getMetadataList_s 包含我在列中需要的所有地图名称,但它们不是固定的,对于每个负载组它都不同,因此这意味着我无法为该特定权限创建数据表。
    • 您不需要使用datatable - 这只是我用来提供示例的东西,而不是真实的表格。所以bag_keysmv-expand 应该做你想要的。如果您需要更多帮助,请更新问题并提供示例输入(datatable 格式)以及您希望看到的输出,并通过添加通知您更新问题的评论来 ping 我。
    • 嗨 Slavik,是的,我明白了,非常感谢您的建议。
    【解决方案2】:

    extend 和 mv-expand 方法有助于解决这种情况。

    解决方案: 扩展行 = parse_json(Parameters_getMetadataList_s) | mv-展开行 |项目参数_LOAD_GROUP_s,rows

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多