【问题标题】:Data Explorer KQL filtering and mapping JSONs in a list (dynamic type)数据资源管理器 KQL 过滤和映射列表中的 JSON(动态类型)
【发布时间】:2022-01-02 17:53:14
【问题描述】:

我想过滤和转换数组中的 JSON。

我有下表:

let fooTable = datatable(str: string, record: dynamic) [
    "name1", dynamic([{"q": "foo", "type": "B1"}]),
    "name2", dynamic([{"q": "bar", "type": "C1"}, {"q": "bar2", "type": "B1"}]),
    "name3", dynamic([{"q": "foo", "type": "C1"}, {"q": "foo2", "type": "C1"}]),
    "name4", dynamic([{"q": "foo", "type": "B1"}]),
    "name5", dynamic([{"q": "b42", "type": "B1"}]),
    "name6", dynamic([{"q": "f42", "type": "C1"}]),
    "name7", dynamic([{"q": "foo", "type": "B1"}])
];

我想按“类型”字段过滤 JSON,并做一个小的转换。 所以假设我想用“type”“C1”过滤,所以我的输出将是:

[
    "name2", dynamic([{"q": "bar", "type": "C1", "qtype": "barC1"}, {"q": "bar2", "type": "B1", "qtype": "bar2B1"}]),
    "name3", dynamic([{"q": "foo", "type": "C1", "qtype": "fooC1"}, {"q": "foo2", "type": "C1", "qtype": "foo2C1"}]),
    "name6", dynamic([{"q": "f42", "type": "C1", "qtype": "f42C1"}
]

我尝试了以下方法:

fooTable
| mv-apply v=record on (
    where v.type == "C1"
    | extend r2 = pack(
        "q", v.q,
        "type", v.type,
        "qtype", strcat(v.q, v.type))
    | summarize record = make_list(r2)
    )
| project str, record

但如果类型不是“C1”,它只会在行中返回一个空数组:

name1   []
name2   [{"q":"bar","type":"C1","qtype":"barC1"}]
name3   [{"q":"foo","type":"C1","qtype":"fooC1"},{"q":"foo2","type":"C1","qtype":"foo2C1"}]
name4   []
name5   []
name6   [{"q":"f42","type":"C1","qtype":"f42C1"}]
name7   []

我想完全过滤这些行(没有空行)。

【问题讨论】:

    标签: azure azure-data-explorer kql


    【解决方案1】:

    你可以试试这个:

    let fooTable = datatable(str: string, record: dynamic) [
        "name1", dynamic([{"q": "foo", "type": "B1"}]),
        "name2", dynamic([{"q": "bar", "type": "C1"}, {"q": "bar2", "type": "B1"}]),
        "name3", dynamic([{"q": "foo", "type": "C1"}, {"q": "foo2", "type": "C1"}]),
        "name4", dynamic([{"q": "foo", "type": "B1"}]),
        "name5", dynamic([{"q": "b42", "type": "B1"}]),
        "name6", dynamic([{"q": "f42", "type": "C1"}]),
        "name7", dynamic([{"q": "foo", "type": "B1"}])
    ];
    fooTable
    | where tostring(record) has '"type":"C1"'
    | mv-apply r = record on ( 
        extend record = bag_merge(r, pack("qtype", strcat(r.q, r.type)))
        | summarize record = make_list(record)
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2019-07-28
      • 2021-08-16
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多