基本查询

YMatrix 基于 PostgreSQL 开发,所以支持 PostgreSQL 提供的标准 SELECT 语句做查询,包括 WHERE,GROUP BY,ORDER BY,JOIN 等复杂语句。

下面以统计磁盘使用量为例,演示如何使用高级分析。

简化起见,我们要统计的磁盘信息量信息仅包括读写速度,即:read,write。

建指标表模式如下:

CREATE TABLE disk(
    time timestamp with time zone,
    tag_id int,
    read float,
    write float
)
DISTRIBUTED BY (tag_id);

另外创建一张 disk_tags 表记录磁盘相关的 meta 信息,包括操作系统,主机名,所属区域:

CREATE TABLE disk_tags(
    tag_id serial,
    os text,
    hostname text,
    region text
)
DISTRIBUTED REPLICATED;

1. 过滤

使用 WHERE 子句对结果进行筛选:

  • 查询读写速度均大于 10 的记录:

    SELECT * FROM disk WHERE read > 10 AND write > 10;

2. 排序

使用 ORDER BY 子句选择列进行排序,LIMIT 子句可以限制结果条数:

  • 查询近 100 条数据:

    SELECT * FROM disk ORDER BY time DESC LIMIT 100;

3. 聚集

YMatrix 提供了如下基本聚集函数:

  1. COUNT:有效值的个数
  2. SUM:累加和
  3. AVG:某个列的平均值
  4. MIN:某个列的最小值
  5. MAX:某个列的最大值
  • 查询 12 小时内的数据总量:

    SELECT COUNT(*) FROM disk WHERE time > NOW() - INTERVAL '12 hours';

  • 查询 tag_id 为 1 的设备的最大读写量: SELECT MAX(read), MAX(write) FROM disk WHERE tag_id = 1;

4. 分组

使用 GROUP BY 子句按列进行分组,对于非分组列需要使用聚集函数:

  • 查询每个区域和主机上的设备总量:

    SELECT region, hostname, COUNT(*) FROM disk_tags GROUP BY region, hostname;

5. 连接

使用 JOIN 子句并用 USING 指定连接键来做多表连接操作:

  • 查询近 100 条数据及其主机名:

    SELECT disk_tags.hostname, disk.* FROM disk JOIN disk_tags USING (tag_id) ORDER BY disk.time DESC LIMIT 100;