【问题标题】:How to use mvexpand on an json array of key/value pairs如何在键/值对的 json 数组上使用 mvexpand
【发布时间】:2017-11-23 14:53:59
【问题描述】:

我的 appInsights 遥测数据中有一个自定义属性,它是一个键/值对的 json 数组。我想要做的是投影出该键/值对,似乎将parsejsonmvexpand 一起使用是如何实现这一点的;但是,我似乎遗漏了一些东西。我的表达式的最终结果是一个名为 type 的列,它是原始 json。尝试将任何属性添加到表达式会导致一个空列。

Json 编码属性

[{"type":"text/xml","count":1}]

AIQL

requests 
 | project customDimensions 
 | extend type=parsejson(customDimensions.['Media Types'])
 | mvexpand bagexpansion=array type 

2017 年 6 月 30 日更新

为了回答 EranG 的问题,我的请求在将属性投影为列时的输出如下所示。

【问题讨论】:

    标签: azure-application-insights kql ms-app-analytics


    【解决方案1】:

    我最近遇到了同样的问题。可能您的属性已经是dynamic 类型,但它的动态String 不是数组。 parsejson 不起作用,因为它将String 转换为dynamic,而不是动态转换为另一个动态。要解决此问题,我建议您先尝试将您的属性转换为 String,然后再次解析。

    请尝试以下示例。它可以帮助你,因为它帮助了我:

    requests 
    | project customDimensions 
    | extend type=parsejson(tostring(customDimensions.['Media Types']))
    | mvexpand type
    | project type.type, type.['count']
    

    【讨论】:

    • 谢谢,tostring() 是我所缺少的
    【解决方案2】:

    mvexpand 所做的是将您的数组分解为行,因此每行将包含数组中的单个项目。 如果您想将每个项目分成几列,您需要尝试以下操作:

    requests 
    | project customDimensions 
    | extend type=parsejson(customDimensions.['Media Types'])
    | mvexpand bagexpansion=array type 
    | project type = type.type, count_ = type["count"]
    

    【讨论】:

    • 不幸的是,当我运行该查询时,我最终得到相同数量的结果行,其中包含两个名为 type 和 count_ 的空列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2021-03-04
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多