如何在Azure Resource Graph中使用KQL创建Join关联查询
KQL 关联 policyresources 与 advisorresources 的正确写法
你当前的查询语句缺失join操作的必要参数,无法正常执行:KQL的join需要明确指定关联匹配字段,以及可选但强烈建议显式声明的关联类型。
基础语法规则
KQL join的标准结构如下:
<左表数据集> | <左表过滤、字段筛选等预处理逻辑> | join kind=<关联类型> ( <右表数据集> | <右表过滤、字段筛选等预处理逻辑> ) on <关联匹配条件>
针对你场景的可运行示例
你要筛选策略集定义类型的资源、关联顾问资源数据,最通用的关联维度是订阅ID(两个表均有subscriptionId字段),如果需要更细粒度匹配也可以替换为资源ID、资源组字段,示例代码:
policyresources | where type == "microsoft.authorization/policysetdefinitions" // 提前筛选需要的字段,减少join数据量提升性能 | project PolicySetId = id, PolicySetName = name, PolicySetProperties = properties, subscriptionId | join kind=inner // 显式指定关联类型 ( advisorresources // 右表同样提前做字段裁剪、过滤 | project AdvisorRecId = id, RecommendationContent = properties, subscriptionId, resourceGroup ) on subscriptionId // 指定关联匹配字段
实操注意事项
- 如果两个表的关联字段名不一致,需要显式指定左右表字段,格式为
on $left.左表字段名 == $right.右表字段名,比如左表关联字段为subId、右表为subscriptionId时,匹配条件写为on $left.subId == $right.subscriptionId - 常用关联类型按需选择:
inner:仅返回两表关联字段能完全匹配的行,是最常用的类型leftouter:返回左表所有行,右表无匹配的字段填null,适合需要保留全部策略集数据、不要求必须有对应顾问资源的场景rightouter/fullouter按需使用,无特殊需求不建议选,会返回大量冗余数据
- 大表关联前一定要先做过滤和字段裁剪,不要直接全表join,很容易触发查询超时、资源配额超限的问题。
内容的提问来源于stack exchange,提问作者dehgrah101
相关产品推荐
相关产品推荐

