1

根据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上在线运行上述查询(但可能需要登录)。

4

2 回答 2

2

要从文本中提取键值对并将它们转换为列而不对查询中的键名进行硬编码:

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
于 2020-10-15T16:06:20.170 回答
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|
于 2019-11-23T04:00:05.700 回答