获取数组中每个对象的属性值的高效方法

问题描述 投票:0回答:1

是否有比

mv-expand
更有效的方法来获取每个对象的每个
displayName
属性的值?下面的示例工作正常,但我可以看到它在大型查询上效率不高。这个想法是列出每个对象的所有
displayName
值,反转它们,然后创建一个通过
/
连接这些值的新字符串。

仅供参考,原始查询是针对

resourcecontainers
表的。

代码:

let result = print table = dynamic([
  {
    "name": "object1",
    "properties": {
      "managementGroupAncestorsChain": [
        {
          "displayName": "foo",
          "name": "foo"
        },
        {
          "displayName": "root",
          "name": "root"
        }
      ]
    }
  },
  {
    "name": "object2",
    "properties": {
      "managementGroupAncestorsChain": [
        {
          "displayName": "bar",
          "name": "bar"
        },
        {
          "displayName": "root",
          "name": "root"
        }
      ]
    }
  }
])
| mv-expand table
| evaluate bag_unpack(table);
result
| extend chain = properties.managementGroupAncestorsChain
| mv-expand chain
| summarize chain = strcat_array(array_reverse(make_list(chain.displayName)), '/') by name

所需输出:

名字 链条
对象1 根/foo
对象2 根/栏
azure-resource-manager kql
1个回答
0
投票

是否有比

mv-expand
更有效的方法来获取每个对象的每个
displayName
属性的值?

AFAIK,mv-expand 是执行此操作的有效方法,下面是我执行此操作的类似方法:

下面是我简化的 KQL 查询(这里我在 bagunpacking 后取了表):

let rithtest = datatable(name: string, properties: dynamic)
[
    "object1", dynamic({"managementGroupAncestorsChain": [{"displayName": "fooo", "name": "fooo"}, {"displayName": "root", "name": "root"}]}),
    "object2", dynamic({"managementGroupAncestorsChain": [{"displayName": "baar", "name": "baar"}, {"displayName": "root", "name": "root"}]})
]
| mv-expand  parse_json(properties).managementGroupAncestorsChain
| extend chain = properties_managementGroupAncestorsChain.displayName
| summarize chain = strcat_array(array_reverse(make_list(chain)), '/') by name;
rithtest

Output:

enter image description here

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.