KQL: эквивалентная команда mv-expand OR bag_unpack для преобразования списка в несколько столбцов

Согласно документации mv-expand:

Расширяет многозначный массив или мешок свойств.

mv-expand применяется к столбцу с динамическим типом, поэтому каждое значение в коллекции получает отдельную строку. Все остальные столбцы в развернутой строке дублируются.

Так же, как оператор mv-expand создаст строку для каждого элемента в списке - есть ли эквивалентный оператор / способ сделать каждый элемент в списке дополнительным столбцом?

Я проверил документацию и нашел Bag_Unpack:

Плагин bag_unpack распаковывает один столбец динамического типа, обрабатывая каждый слот верхнего уровня пакета свойств как столбец.

Однако, похоже, он не работает в списке, а скорее работает со свойством JSON верхнего уровня.

Используя bag_unpack (как в запросе ниже):

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Smitha", "Age":30}),
]
| evaluate bag_unpack(d)

Он будет делать следующее:

Name    Age
John    20
Dave    40
Smitha  30

Есть ли команда / способ (см. some_command_which_helps), я могу добиться следующего (преобразовать список в столбцы):

datatable(d:dynamic)
[
    dynamic(["John", "Dave"])
]
| evaluate some_command_which_helps(d)

Это означает что-то вроде:

Col1    Col2
John    Dave

Есть ли эквивалент, в котором я могу преобразовать список / массив в несколько столбцов?

Для справки: мы можем выполнить указанные выше запросы в Интернете на Log Analytics в демонстрационном разделе. при необходимости (однако может потребоваться вход).


person sanchitkum    schedule 23.11.2019    source источник


Ответы (2)


вы можете попробовать что-то вроде следующих строк

(при этом, с точки зрения эффективности, вы можете сначала проверить свои варианты реструктуризации набора данных, используя схему, которая соответствует тому, как вы планируете фактически потреблять / запрашивать его)

datatable(d:dynamic)
[
    dynamic(["John", "Dave"]),
    dynamic(["Janice", "Helen", "Amber"]),
    dynamic(["Jane"]),
    dynamic(["Jake", "Abraham", "Gunther", "Gabriel"]),
]
| extend r = rand()
| mv-expand with_itemindex = i d
| summarize b = make_bag(pack(strcat("Col", i + 1), d)) by r
| project-away r
| evaluate bag_unpack(b)

который выведет:

|Col1  |Col2   |Col3   |Col4   |
|------|-------|-------|-------|
|John  |Dave   |       |       |
|Janice|Helen  |Amber  |       |
|Jane  |       |       |       |
|Jake  |Abraham|Gunther|Gabriel|
person Yoni    schedule 23.11.2019

Чтобы извлечь пары ключ-значение из текста и преобразовать их в столбцы без жесткого кодирования имен ключей в запросе:

print message="2020-10-15T15:47:09 Metrics: duration=2280, function=WorkerFunction, count=0, operation=copy_into, invocationId=e562f012-a994-4fc9-b585-436f5b2489de, tid=lct_b62e6k59_prd_02, table=SALES_ORDER_SCHEDULE, status=success"
| extend Properties = extract_all(@"(?P<key>\w+)=(?P<value>[^, ]*),?", dynamic(["key","value"]), message)
| mv-apply Properties on (summarize make_bag(pack(tostring(Properties[0]), Properties[1])))
| evaluate bag_unpack(bag_)
| project-away message
person Kashyap    schedule 15.10.2020