首页 > 解决方案 > 使用 strcat_array 将具有嵌套数组的字段处理为字符串以在 Kusto 中输出

问题描述

我想将 Azure AD 审核日志处理为 HTML 表/csv 文件。数据包含嵌套的数组集,我想将它们汇总为逗号分隔的字符串。

例如看起来像这样的数据

{
    "TargetResources":  [{"displayName":  "Policy",
                          "modifiedProperties":  [{"displayname":  "PolicySetting1"},
                                                  {"displayname":  "PolicySetting2"}]
                        }]
}

会被处理成

TargetResource | Policy
modifedProps   | PolicySetting1, PolicySetting2

mv-expand似乎不起作用,因为某些行没有 modifiedProperties 所以这些行被消除

我能够找到的唯一解决方案接近我正在尝试做的事情是这样的:

 AuditLogs
| extend TargetResource = tostring(TargetResources[0].displayName)
| extend ModifiedProperty0 = tostring(parse_json(tostring(TargetResources[0].modifiedProperties))[0].displayName)
| extend ModifiedProperty1 = tostring(parse_json(tostring(TargetResources[0].modifiedProperties))[1].displayName)
| extend ModifiedProperty2 = tostring(parse_json(tostring(TargetResources[0].modifiedProperties))[2].displayName)
| extend ModifiedProperties = strcat(ModifiedProperty0,", ",ModifiedProperty1,", ",ModifiedProperty2)

此解决方案的局限性在于它不能适用于任意数量的 modifiedProperty 值(它仅适用于恰好 3 个),这是我的目的所要求的,如果 modifiedProperties 不存在并且如果有 0-,我希望该解决方案能够工作15 个值。

感谢您提供任何帮助

标签: kql

解决方案


如果我正确理解了您的描述,您可以使用mv-apply(两次)来实现:

datatable(d: dynamic)
[
    dynamic({"TargetResources":[{"displayName": "Policy0","someOtherProperty":"hello world"}]}),
    dynamic({"TargetResources":[{"displayName": "Policy1","modifiedProperties":[{"displayname":"PolicySetting1"},{"displayname":"PolicySetting2"}]}]}),
    dynamic({"TargetResources":[{"displayName": "Policy2","modifiedProperties":[{"displayname":"PolicySetting3"},{"displayname":"PolicySetting4"}]}, {"displayName":"Policy3","modifiedProperties":[{"displayname":"PolicySetting5"},{"displayname":"PolicySetting6"}]}]}),
]
| mv-apply tr = d.TargetResources on (
    extend TargetResource = tr.displayName
    | mv-apply mp = tr.modifiedProperties on (
        extend propertyName = mp.displayname
        | summarize modifiedProps = strcat_array(make_set(propertyName), ", ")
    )
)
| project TargetResource, modifiedProps
目标资源 修改道具
政策0
政策1 策略设置 1、策略设置 2
政策2 策略设置 3、策略设置 4
政策3 PolicySetting5、PolicySetting6

推荐阅读