Azure Resource Graph查询:获取双订阅名称遇表引用限制错误
解决Azure Resource Graph多次引用resourcecontainers的限制问题,获取双订阅ID对应名称
问题背景
查询RecoveryServicesResources近7天数据时,需要同时获取subscriptionId和dataSourceSubscriptionId对应的订阅名称,但两次单独引用resourcecontainers表会触发“超出远程表引用次数限制”的错误,且要求纯查询语句、无shell包装器,可集成至第三方工具。
解决方案
核心思路是一次性预查询所有订阅的ID-名称映射表,再通过两次关联操作分别匹配两个订阅ID字段,避免重复引用远程表。
完整查询语句
// 预获取所有订阅的ID与名称映射(仅引用resourcecontainers一次) let subscriptions = resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId = id, subscriptionName = name; // 主查询:获取近7天的RecoveryServicesResources并关联订阅名称 RecoveryServicesResources | where timeGenerated > ago(7d) // 关联主订阅ID对应的名称 | join kind=leftouter subscriptions on $left.subscriptionId == $right.subscriptionId | project-rename mainSubscriptionName = subscriptionName // 关联数据源订阅ID对应的名称 | join kind=leftouter subscriptions on $left.dataSourceSubscriptionId == $right.subscriptionId | project-rename dataSourceSubscriptionName = subscriptionName // 按需保留所需字段,可自行调整 | project subscriptionId, mainSubscriptionName, dataSourceSubscriptionId, dataSourceSubscriptionName, name, type, timeGenerated
关键说明
- 避免远程表重复引用:通过
let语句定义subscriptions变量,仅执行一次resourcecontainers查询,生成全局可用的订阅映射表,完全符合Azure Resource Graph的限制规则。 - 左外连接保证数据完整性:使用
kind=leftouter确保即使某个订阅ID已被删除或不存在,原始RecoveryServicesResources数据依然会被保留,不会因关联失败丢失记录。 - 字段重命名避免冲突:两次关联后通过
project-rename分别重命名订阅名字段,防止字段名重复导致的查询错误。 - 兼容性强:纯Kusto查询语句,无需额外脚本或包装器,可直接在Azure Portal、Azure CLI、PowerShell,以及Grafana、Logic Apps等第三方集成工具中使用。
内容的提问来源于stack exchange,提问作者jkroepke
相关产品推荐
相关产品推荐

