位图聚合函数
位图聚合函 数提供了将数值类型聚合为位图类型,即位图数据间的聚合运算。seekdb 当前所支持的位图聚合函数包括 rb_build_agg()、rb_or_agg()和rb_and_agg() 。
rb_build_agg
rb_build_agg() 函数将数值列聚合为位图数据。语法如下:
rb_build_agg(values)
输入参数 values(UINT64)是构建聚合位图数据的数值列。Oceanbase 支持的合法的值范围是 [0, UINT64_MAX]。但是为了兼容 PG,也支持 [INT32_MIN,0) 范围的负整数的输入,在输出时负整数会转换为 UINT32 的值输出,比如输入 -1,输出是 4294967295。
该函数目前只支持输入整数类型,不支持输入非整数类型,否则会报错。如果是字符串类型,可以转换为整数类型后输入。
示例如下:
CREATE TABLE t1(val bigint);
INSERT INTO t1 VALUES(1),(2),(3);
SELECT rb_to_string(rb_build_agg(val)) FROM t1;
+---------------------------------+
| rb_to_string(rb_build_agg(val)) |
+---------------------------------+
| 1,2,3 |
+---------------------------------+
1 row in set (0.001 sec)
rb_or_agg
rb_or_agg() 函数将位图列的多行数据进行或运算,并聚合为位图数据。语法如下:
rb_or_agg(rb_in)
输入参数 rb_in 是要进行聚合运算的位图列。
示例如下:
CREATE TABLE t2(rb roaringbitmap);
INSERT INTO t2 VALUES (rb_from_string('1,2,3')),(rb_from_string('2,3,4'));
SELECT rb_to_string(rb_or_agg(rb)) FROM t2;
+-----------------------------+
| rb_to_string(rb_or_agg(rb)) |
+-----------------------------+
| 1,2,3,4 |
+-----------------------------+
1 row in set (0.001 sec)
rb_and_agg
rb_and_agg() 函数将位图列的多行数据进行与运算,并聚合为位图数据。语法如下:
rb_and_agg(rb_in)
输入参数 rb_in 是要进行聚合运算的位图列。
示例如下:
SELECT rb_to_string(rb_and_agg(rb)) FROM t2;
+------------------------------+
| rb_to_string(rb_and_agg(rb)) |
+------------------------------+
| 2,3 |
+------------------------------+
1 row in set (0.001 sec)