Как преобразовать JSON в таблицу значений ключа в Kusto - PullRequest
0 голосов
/ 05 мая 2020

У меня есть таблица, состоящая из одной строки и нескольких столбцов. Один из столбцов называется EventProperties, который представляет собой JSON свойств этого формата:

{
   "Success":true,
   "Counters":{
      "Counter1":1,
      "Counter2":-1,
      "Counter3":5,
      "Counter4":4,
   }
}

Я хочу преобразовать Counters из этого 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 из приведенного выше примера я получаю:

enter image description here

Но мне нужно что-то вроде этого:

enter image description here

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 05 мая 2020

вы можете попробовать использовать 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
...