
# 新建自定义查询
#### 操作场景
您可以使用Config预设的查询语句，或根据资源配置属性自定义查询语句，查询具体的云资源配置。
本章节包含如下内容：
- [新建自定义查询]
- [基于预设查询创建自定义查询]
- [高级查询配置样例]
 
 #### 新建自定义查询
1. 登录[配置审计控制台](https://console.huaweicloud.com/rms/?&locale=zh-cn#/overview)。
2. 单击页面左侧的"高级查询"，进入"高级查询"页面。
3. 选择"自定义查询"页签，单击页面右上角的"新建查询"。 
   
   图1新建查询   
   ![](https://support.huaweicloud.com/usermanual-rms/zh-cn_image_0000002328174446.png "点击放大")
   
   
4. 在"查询编辑器"的输入框中输入查询语句。 
   页面左侧为高级查询使用的Schema信息，也就是查询语句中properties参数需要填写的内容，为各个云服务资源类型的详细属性。查询语句的配置样例请参见[高级查询配置样例]。
   
   
5. 单击"保存查询"，输入查询名称和描述。 
   查询名称仅支持输入数字、英文字母、下划线和中划线，最大长度64个字符。
   
   
6. 单击"确定"，保存成功。 
   图2保存查询   
   ![](https://support.huaweicloud.com/usermanual-rms/zh-cn_image_0000001226309052.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)
   当您关闭浏览器窗口或登出账号后，高级查询的历史执行记录将被清除。
   图3历史执行记录   
   ![](https://support.huaweicloud.com/usermanual-rms/zh-cn_image_0000002092953372.png "点击放大")
   
   
 
 #### 基于预设查询创建自定义查询
您可以修改预设查询或已有自定义查询的名称、描述和查询语句，"另存为"后产生新的查询，此处以另存预设查询为例进行说明。
1. 进入"高级查询"页面，选择"预设查询"页签。 
   "高级查询"页面默认展示预设查询列表。
   
   
2. 单击目标查询操作列的"使用查询"，进入"使用查询"页面。 
   也可以单击查询名称，进入查询概览页，再单击查询概览页右下方的"使用查询"，进入"使用查询"页面。
   图4使用预设查询   
   ![](https://support.huaweicloud.com/usermanual-rms/zh-cn_image_0000001786198650.png "点击放大")
   
   
   
3. 在"查询编辑器"的输入框中修改查询语句。 
   详细请参见[高级查询配置样例]。
   
   
4. 单击"另存为"，配置查询名称和描述。
5. 在弹框中，单击"确定"。 
   通过另存预设查询操作产生的新查询，将更新在自定义查询列表中。
   您也可以基于该查询的历史执行记录将其保存为新的自定义查询，具体请参见[历史执行记录]。
   图5另存预设查询   
   ![](https://support.huaweicloud.com/usermanual-rms/zh-cn_image_0000001943038344.png "点击放大")
   
   
 
 #### 高级查询配置样例
ResourceQL使用结构化查询语言(SQL) SELECT语法的子集来对当前云资源配置数据进行查询和关联查询。用户无需调用特定API来实现，也无需通过多个API下载全量数据并手动分析。ResourceQL仅支持从表resources中查询数据。
表1resources参数含义 
| 资源参数               | 参数类型                        | 含义      |
|:---|:---|:---|
| 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 name
  FROM resources
  WHERE provider = 'ecs'
   AND type = 'cloudservers'
   AND properties.status = 'SHUTOFF'
  ```
  

- 示例2：查询特定规格的云硬盘
  ```
  SELECT *
  FROM resources
  WHERE provider = 'evs'
   AND type = 'volumes'
   AND properties.size = 100
  ```
  
- 示例3：对象存储桶模糊查询
  ```
  SELECT *
  FROM resources
  WHERE provider = 'obs'
   AND type = 'buckets'
   AND name LIKE '%figure%'
  ```
  
- 示例4：查询ECS资源及其关联的EVS资源
  ```
  SELECT ECS_EVS.id AS ecs_id, EVS.id AS evs_id
  FROM (
      SELECT id, evs_id
      FROM (
   SELECT id, transform(properties.ExtVolumesAttached, x -> x.id) AS evs_list
  FROM resources
  WHERE provider = 'ecs'
  AND type = 'cloudservers'
  ) ECS
     CROSS JOIN UNNEST(evs_list) AS t (evs_id)
  ) ECS_EVS, (
  SELECT id
  FROM resources
  WHERE provider = 'evs'
  AND type = 'volumes'
  ) EVS
  WHERE ECS_EVS.evs_id = EVS.id
  ```
  
- 示例5：查询ECS资源名称及其关联的弹性公网IP地址
  ```
  SELECT ECS.id AS ECS_id, publicIpAddress AS ip_address
  FROM (
      SELECT id, transform(properties.addresses, x -> x.addr) AS ip_list
      FROM resources
      WHERE provider = 'ecs'
          AND type = 'cloudservers'
  ) ECS, (
          SELECT name, properties.publicIpAddress
          FROM resources
          WHERE provider = 'vpc'
              AND type = 'publicips'
              AND properties.type = 'EIP'
              AND properties.status = 'ACTIVE'
      ) EIP
  WHERE CONTAINS (ECS.ip_list, EIP.name)
  ```
  
- 示例6：查询每个区域内数量大于100的资源类型
  ```
  WITH counts AS (
      SELECT region_id, provider, type, count(*) AS number
      FROM resources
      GROUP BY region_id, provider, type
  )
  SELECT *
  FROM counts
  WHERE number > 100
  ```
  查询语句的详细介绍，请参见[ResourceQL语法](https://support.huaweicloud.com/usermanual-rms/rms_06_0700.html)。
  
 
#### 相关文档
- [新建自定义查询时，"保存查询" 按钮置灰无法点击，应如何处理？](https://support.huaweicloud.com/rms_faq/rms_08_0600.html#section42)
- [查询结果只显示部分数据，未展示全部资源，是什么原因？](https://support.huaweicloud.com/rms_faq/rms_08_0600.html#section43)
 
