Azure 如何在Kusto中将JSON转换为键值表

Azure 如何在Kusto中将JSON转换为键值表,azure,azure-log-analytics,azure-data-explorer,kql,Azure,Azure Log Analytics,Azure Data Explorer,Kql,我有一个由一行和若干列组成的表。其中一列名为EventProperties,它是此格式属性的JSON: { "Success":true, "Counters":{ "Counter1":1, "Counter2":-1, "Counter3":5, "Counter4":4, } } 我想将计数器从这个JSON转换成一个包含键和值的两列表,其中第一列是计数器的名称(例如Counter3),第二列是计数器的值(例如5)。 我试过

我有一个由一行和若干列组成的表。其中一列名为
EventProperties
,它是此格式属性的JSON:

{
   "Success":true,
   "Counters":{
      "Counter1":1,
      "Counter2":-1,
      "Counter3":5,
      "Counter4":4,
   }
}
我想将
计数器
从这个JSON转换成一个包含键和值的两列表,其中第一列是计数器的名称(例如Counter3),第二列是计数器的值(例如5)。 我试过这个:

let eventPropertiesCell = materialize(MyTable
| project EventProperties
);
let countersStr = extractjson("$.Counters", tostring(toscalar(eventPropertiesCell)), typeof(string));
let countersJson = parse_json(countersStr);
let result = 
print mydynamicvalue = todynamic(countersJson) 
| mvexpand mydynamicvalue 
| evaluate bag_unpack(mydynamicvalue);
result
但是我从JSON中得到一个表,每个计数器有一列,行数等于计数器数,而计数器值只填充一个随机行。例如,使用上面示例中的JSON,我得到:

但我想要这样的东西:


任何帮助都将不胜感激

您可以尝试使用
mv apply
如下:

datatable(event_properties:dynamic)
[
   dynamic({
   "Success":true,
   "Counters":{
      "Counter1":1,
      "Counter2":-1,
      "Counter3":5,
      "Counter4":4
   }
}), 
   dynamic({
   "Success":false,
   "Counters":{
      "Counter1":1,
      "Counter2":2,
      "Counter3":3,
      "Counter4":4
   }
})
]
| mv-apply event_properties.Counters on (
    extend key = tostring(bag_keys(event_properties_Counters)[0])
    | project key, value = event_properties_Counters[key]
)
| project-away event_properties

您可以按如下方式尝试使用
mv apply

datatable(event_properties:dynamic)
[
   dynamic({
   "Success":true,
   "Counters":{
      "Counter1":1,
      "Counter2":-1,
      "Counter3":5,
      "Counter4":4
   }
}), 
   dynamic({
   "Success":false,
   "Counters":{
      "Counter1":1,
      "Counter2":2,
      "Counter3":3,
      "Counter4":4
   }
})
]
| mv-apply event_properties.Counters on (
    extend key = tostring(bag_keys(event_properties_Counters)[0])
    | project key, value = event_properties_Counters[key]
)
| project-away event_properties

谢谢你,Yoni。这似乎为我提供了所需的表格式,但问题是我不想在查询本身中硬编码JSON及其值,而是从表中获取它(上面代码中的MyTable)。我试图修改您的解决方案并将其更改为:。。。datatable(事件属性:动态)[dynamic(eventPropertiesCell)]| mv应用事件属性。计数器。。。但是它说“缺少json值”。对不起,我认为很明显我无法查询您的表,这就是为什么我使用带有常量值的
datatable
。你应该可以用你的桌子来交换那部分。谢谢你,Yoni。这似乎为我提供了所需的表格式,但问题是我不想在查询本身中硬编码JSON及其值,而是从表中获取它(上面代码中的MyTable)。我试图修改您的解决方案并将其更改为:。。。datatable(事件属性:动态)[dynamic(eventPropertiesCell)]| mv应用事件属性。计数器。。。但是它说“缺少json值”。对不起,我认为很明显我无法查询您的表,这就是为什么我使用带有常量值的
datatable
。您应该能够将该部分与实际表交换。