更新时间:2024-07-26 GMT+08:00

语法概览

ResourceQL能够提供类似SQL的服务来灵活地查询您的云资源。

SELECT name, created, updated FROM resources WHERE region_id = 'regionid1'

语句不区分大小写,即'SELECT COUNT(*)' 和'select CoUnT(*)'没有区别。用单引号表示字符串字面量。

ResourceQL支持以下7种数据类型。其中数组类型用'[]'来索引某个位置(标号从'1'开始)。

表1 支持的数据类型

类型名

类型英文

整型

int/integer

浮点型

float/double

布尔型

boolean

数组型

array

字符串

string

字典型

object

时刻型

date

您的所有云资源构成了一张表,表名固定为resouces。您的资源聚合器下的资源构成了一张表,表名固定为aggregator_resources。表中每一行记录了一条数据,每一列约定如下:

表2 resources参数含义

资源参数

参数类型

含义

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>

资源详细属性。

资源聚合器表aggregator_resources则额外支持资源参数domain_id,类型为String,含义为账号ID。

不同类型的资源可以用'provider'和'type'来区分,它们对应的'properties'字段的结构也就不一样。 例如ecs的cloudservcer包含字段flavor,而vpc的publicips包含字段bandwidth。

各个资源类型properties内支持的字段以及类型可以通过配置审计控制台和API接口两种方式查看,具体请参见如何获取各对接云服务上报Config的资源属性?

对于某个具体的资源类型,我们可以用'.'嵌套的方式去查询'properties'下的具体字段。例如,弹性云服务器的'properties'里有'status'和'addresses'字段,可以用如下语句查询正在运行的弹性云服务器及其地址。

SELECT name, created, updated, properties.addresses FROM resources 
	WHERE provider = 'ecs' AND type = 'cloudservers' AND properties.status = 'ACTIVE'