文档中心MogDBMogDB StackUqbar

文档:v1.1

支持的版本:

数据查询

Uqbar使用SQL作为查询语言,用户可以通过客户端或者不同的驱动连接到Uqbar执行数据查询。为支持用户不同的数据分析需求,Uqbar提供了丰富的查询算子。

聚合类算子

当前版本的Uqbar支持以下常用聚合算子:

聚合函数 用途
COUNT 统计数量
DISTINCT 去重
AVG 平均值
MEDIAN 求中位数
MODE() WITHIN GROUP 求最大频次数
STDDEV 求标准差
SUM 求和
TIME_BUCKET 时间对齐
SUM...OVER... 累积和
AVG...OVER 移动平均

time_bucket()

time_bucket时间范围对齐函数,用于将一个时间按照bucket_width对齐到一个时间点,方便后续对时间聚合。

语法

time_bucket(bucket_width, time,[offset | origin])

参数说明

参数名 类型 属性 释义
bucket_width TEXT 必选 对齐的时间间隔。只能使用'正整数+时间标识'的方式,时间标识包括interval类型支持的所有单位,包括'microsecond,millisecond,second,minute,hour,day,week,month,year,decade,century,millennium' 及这些单位的复数形式,如years、months、days等和简写形式,如y、m、d等。
time TIMESTAMP 必选 需要对齐的时间。
offset INTERVAL 可选 使用这个值调整对齐窗口位置,如果是正值,时间窗口整体向将来移动,如果是负值,窗口位置向过去移动。相当于将默认的origin移动offset的位置。
origin TIMESTAMP 可选 对齐的base,默认从’2001-1-1 00:00:00’对齐;此参数与offset互斥。

约束

使用time_bucket时,由于offset与origin是互斥的参数,所以time_bucket的第三个参数可能是offset(interval 类型),也可能是origin(timestamp 类型)。为了方便区分是offset还是origin使用时,如果使用offset或者origin需要显式指定第三个参数的类型,如:

select time_bucket('5minute',time,'2001-1-1 00:00:00'::timestamp) as bucket ,count(temperature) from weather group by bucket order by bucket asc;

或者

select time_bucket('1minute',time,'1minute'::interval) as bucket ,count(temperature) from weather group by bucket order by bucket asc;

示例

Uqbar=#  select * from t1 order by time;
          time          | id | value 
------------------------+----+-------
 2022-06-02 00:01:00+08 |  1 |     9
 2022-06-02 00:04:00+08 |  1 |    11
 2022-06-02 00:06:00+08 |  1 |    10
 2022-06-02 00:07:00+08 |  1 |    11
 2022-06-02 00:15:00+08 |  1 |    12
(5 rows)

Uqbar=# select time_bucket('2 minute',time) as bucket, sum(value)  from t1 group by bucket order by bucket; 
          bucket         | sum 
------------------------------------+-----
 2022-06-02 00:00:00+08   |   9
 2022-06-02 00:04:00+08   |  11
 2022-06-02 00:06:00+08   |  21
 2022-06-02 00:14:00+08   |  12
(4 rows)

选择类算子

当前版本的Uqbar支持以下常用选择算子:

函数 用途
FIRST 取最早的值
LAST 取最晚的值
MAX 取最大的值
MIN 取最小的值
PERCENTILE 计算百分位值
SAMPLE 返回N个抽样
TOP 取最大的N个值

first() / last()

使用cmp_col列做比较,返回时间最早或最晚的value指定的列的值。时序的first/last算子在timeseries_catalog这个schema下,区别于public中的first/last。

语法

select city_name,timeseries_catalog.first(temp_c,time) from weather_metrics group by city_name;
select city_name,timeseries_catalog.last(temp_c,time) from weather_metrics group by city_name;
timeseries_catalog.first(value, cmp_col)
timeseries_catalog.last(value, cmp_col)

参数说明

参数名 类型 属性 释义
value ANY 必选 返回值
cmp_col TIMESTAMP or TIMESTAMPTZ 必选 比较值

约束

当表存在多条记录的cmp_col列最小值/最大值相同时,返回这些记录中第一条/最后一条的value。

当cmp_col列为常量时,时序first/last算子的效果等同于public中的first/last算子, 返回所有记录中的第一条/最后一条的value值。

示例

Uqbar=# select city_name,timeseries_catalog.first(temp_c,time) from weather_metrics group by city_name; 
 city_name | first 
---------------+-------
beijing    | 30
shanghai   | 29 
(2 row)

转换类算子

当前版本的Uqbar支持以下常用转换算子:

函数 用途
ABS 求绝对值
ACOS 三角函数
ASIN 三角函数
ATAN 三角函数
ATAN2 三角函数
CEIL 向上取整
COS 三角函数
EXP 求指数
FLOOR 向下取整
LN 对数函数
LOG 对数函数
POW 乘方运算
ROUND 四舍五入运算
SIN 三角函数
SQRT 求平方根
TAN 三角函数
COT 三角函数

Join查询

支持时序表与关系表、时序表与时序表之间join查询。


索引

在时序表上支持索引相关功能,以便用户根据实际需求使用索引提升查询性能。时序表上支持的索引类型包括Btree和Gin,不支持创建部分索引,Btree可以支持唯一索引。时序表上索引默认是LOCAL索引,不支持创建GLOBAL索引。在时序表执行数据删除时,对应分区上的索引也会一起删除。

创建索引

语法和分区表创建索引语法基本相同,但不支持创建GLOBAL索引。

CREATE [ UNIQUE ] INDEX [ [schema_name.]index_name ] ON table_name [ USING method ]
    ( {{ column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS LAST ] }[, ...] )
    [ LOCAL [ ( { PARTITION index_partition_name | SUBPARTITION index_subpartition_name [ TABLESPACE index_partition_tablespace ] } [, ...] ) ] ]
    [ INCLUDE ( column_name [, ...] )]
    [ WITH ( { storage_parameter = value } [, ...] ) ]
    [ TABLESPACE tablespace_name ];

删除索引

DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] index_name [, ...] [ CASCADE | RESTRICT ];

修改索引

  • 重命名表索引的名称

    ALTER INDEX [ IF EXISTS ] index_name RENAME TO new_name;
  • 修改表索引的存储参数

    ALTER INDEX [ IF EXISTS ] index_name SET ( {storage_parameter = value} [, ... ] );
  • 设置表索引或索引分区不可用

    ALTER INDEX [ IF EXISTS ] index_name [ MODIFY PARTITION index_partition_name ] UNUSABLE;
  • 重置索引的一个或多个索引方法特定的存储参数为缺省值。与SET一样,可能需要使用REINDEX来完全更新索引。

    ALTER INDEX [ IF EXISTS ] index_name RESET ( { storage_parameter } [,] );
  • 重建表或者索引分区上的索引。

    ALTER INDEX [ IF EXISTS ] index_name REBUILD [ PARTITION index_partition_name ];
  • 重命名索引分区

    ALTER INDEX [ IF EXISTS ] index_name RENAME PARTITION index_partition_name TO new_index_partition_name;
  • 修改索引分区的所属表空间

    ALTER INDEX [ IF EXISTS ] index_name MOVE PARTITION index_partition_name TABLESPACE new_tablespace;

重建索引

REINDEX  { INDEX|  [INTERNAL] TABLE} name PARTITION partition_name [ FORCE  ];
Copyright © 2011-2024 www.enmotech.com All rights reserved.