
# 资源聚合器高级查询
#### 概述
资源聚合器提供高级查询能力，通过使用ResourceQL自定义查询单个或多个聚合源账号的资源配置状态。
高级查询支持用户自定义查询和浏览华为云云服务资源，用户可以通过ResourceQL在查询编辑器中编辑和查询。
您可以使用Config预设的查询语句，或根据资源配置属性自定义查询语句，查询具体的云资源配置。
ResourceQL是结构化的查询语言(SQL)SELECT语法的一部分，它可以对当前资源数据执行基于属性的查询和聚合。查询的复杂程度不同，既可以是简单的标签或资源标识符匹配，也可以是更复杂的查询，例如查看指定具体OS版本的云服务器。
![](https://support.huaweicloud.com/usermanual-rms/public_sys-resources/note_3.0-zh-cn.png)
高级查询仅支持用户自定义查询、浏览、导出云服务资源，如果要对资源进行修改、删除等管理类的操作，请前往资源所属的服务页面进行操作。
#### 使用限制
为避免单用户长时间查询占用资源，影响其他用户，对高级查询功能做以下限制：
- 单次查询语句的执行时长不能超过15秒，否则会返回超时错误。
- 单次查询语句查询大量数据，会返回查询数据量过大的报错，需要用户主动简化查询语句。
- 单次查询结果只返回前4000条。
- 单个查询语句中最多只能做两次表的关联查询。
- 每个账号最多可以创建200个高级查询。

- 资源聚合器的高级查询能力暂时不支持 checksum 和 provisioning_state 两个属性。
![](https://support.huaweicloud.com/usermanual-rms/public_sys-resources/warning_3.0-zh-cn.png)
高级查询功能依赖于资源记录器所收集的资源数据，强烈建议您保持资源记录器的开启状态，不同场景的说明如下：
- 如您从未开启过资源记录器，则高级查询语句无法查询到任何资源数据。
- 如您已开启资源记录器，但仅在资源记录器监控范围内勾选部分资源，则高级查询语句仅能查询到所选择的资源数据。
- 如您开启资源记录器并勾选全部资源，但后续又关闭资源记录器，则高级查询语句无法查询到任何资源数据。
关于如何开启并配置资源记录器请参见：[配置资源记录器](https://support.huaweicloud.com/usermanual-rms/rms_04_0200.html)。
#### 新建查询
1. 登录[配置审计控制台](https://console.huaweicloud.com/rms/?&locale=zh-cn#/overview)。
2. 单击页面左侧的"资源聚合器"，在下拉列表中选择"高级查询"，进入"高级查询"页面。
3. 选择"自定义查询"页签，单击页面右上角的"新建查询"。
4. 在右侧的"查询范围"处选择需要查询资源配置的聚合器，然后在下方输入框中输入查询语句。 
   页面左侧为高级查询使用的Schema信息，也就是查询语句中properties参数需要填写的内容，为各个云服务资源类型的详细属性。查询语句的配置样例请参见[高级查询配置样例]。
   
   
5. 单击"保存查询"，输入查询名称和描述。 
   查询名称仅支持输入数字、英文字母、下划线和中划线，最大长度64个字符。
   
   
6. 单击"确定"，保存成功。 
   图1保存查询   
   ![](https://support.huaweicloud.com/usermanual-rms/zh-cn_image_0000001567836705.png "点击放大")
   ![](https://support.huaweicloud.com/usermanual-rms/public_sys-resources/note_3.0-zh-cn.png)
   如果自定义查询达到限额时，您将无法单击"保存查询"，同时页面右上方提示"您创建的查询已达到上限，请删除暂不需要使用的查询"。但此时您依然可以单击"运行"，直接运行查询并查看和导出查询结果。
   
   
7. 单击"运行"，查看查询结果。目前只支持展示和导出前4000条查询结果。
8. 单击查询结果列表上方的"导出"，选择要导出的文件格式（CSV格式或JSON格式），可导出查询结果。
9. 单击"历史执行记录"，可查看该查询历史执行的时间和查询语句等信息。 
   您可以基于历史执行记录进行如下操作：
   - **再次运行：**直接基于历史查询语句再次运行查询。
   
   - **复制：**复制历史查询语句。
   
   - **保存：**直接将历史查询语句保存为新的自定义查询。
   
   
   ![](https://support.huaweicloud.com/usermanual-rms/public_sys-resources/note_3.0-zh-cn.png)
   当您关闭浏览器窗口或登出账号后，高级查询的历史执行记录将被清除。
   图2历史执行记录   
   ![](https://support.huaweicloud.com/usermanual-rms/zh-cn_image_0000002128668149.png "点击放大")
   
   
 
#### 其他操作
- 您可以修改预设查询或已有自定义查询的名称、描述和查询语句，"另存为"后产生新的查询，具体请参考[基于预设查询创建自定义查询](https://support.huaweicloud.com/usermanual-rms/rms_10_0200.html#rms_10_0200__section118341444172815)。
- 如果您需要查看某个查询的名称、描述和查询语句，请参考[查看查询](https://support.huaweicloud.com/usermanual-rms/rms_10_0300.html)。
- 如果您需要修改某个自定义查询的查询语句，请参考[修改查询](https://support.huaweicloud.com/usermanual-rms/rms_10_0400.html)。
- 如果您不需要使用某个自定义的查询，删除操作请参考[删除查询](https://support.huaweicloud.com/usermanual-rms/rms_10_0500.html)。预设查询不支持删除操作。
  ![](https://support.huaweicloud.com/usermanual-rms/public_sys-resources/note_3.0-zh-cn.png)
  使用资源聚合器高级查询的相关功能，必须先指定需要查询的资源聚合器，从而定义您的查询范围，对指定聚合器聚合的多个源账号下的资源进行高级查询。
  
 
 #### 高级查询配置样例
ResourceQL使用结构化查询语言(SQL) SELECT语法的子集来对当前云资源配置数据进行查询和关联查询。用户无需调用特定API来实现，也无需通过多个API下载全量数据并手动分析。ResourceQL仅支持从表aggregator_resources中查询数据。
表1aggregator_resources参数含义 
| 资源参数               | 参数类型                        | 含义      |
|:---|:---|:---|
| domain_id          | String                      | 账号ID    |
| id                 | String                      | 资源ID    |
| name               | String                      | 资源名称    |
| provider           | String                      | 云服务名称   |
| type               | String                      | 资源类型    |
| region_id          | String                      | 区域ID    |
| project_id         | String                      | 项目ID    |
| ep_id              | String                      | 企业项目ID  |
| checksum           | String                      | 资源详情校验码 |
| created            | Date                        | 资源创建时间  |
| updated            | Date                        | 资源更新时间  |
| provisioning_state | String                      | 资源操作状态  |
| tag                | Array(Map\<String,String\>) | 资源Tag   |
| properties         | Map\<String,Object\>        | 资源详细属性  |
   
用例参考如下：
- 示例1：查询资源聚合器下关机状态的弹性云服务器名称
  ```
  SELECT domainId, name
  FROM aggregator_resources
  WHERE provider = 'ecs'
  AND type = 'cloudservers'
  AND properties.status = 'SHUTOFF'
  ```
  

- 示例2：查询资源聚合器下特定规格的云硬盘
  ```
  SELECT *
  FROM aggregator_resources
  WHERE provider = 'evs'
  AND type = 'volumes'
  AND properties.size = 100
  ```
  
- 示例3：资源聚合器下对象存储桶模糊查询
  ```
  SELECT *
  FROM aggregator_resources
  WHERE provider = 'obs'
  AND 'type' = 'buckets'
  AND name LIKE '%figure%'
  ```
  
- 示例4：查询每个聚合源账号下数量大于100的资源类型
  ```
  WITH counts AS ( 
       SELECT region_id, provider, type, count(*) AS number 
       FROM aggregator_resources
       GROUP BY domain_id, provider, type 
   ) 
   SELECT * 
   FROM counts 
   WHERE number > 100
  ```
  查询语句的详细介绍，请参见[ResourceQL语法](https://support.huaweicloud.com/usermanual-rms/rms_06_0700.html)。
  
 
