RoaringBitmap是一种高效的Bitmap压缩算法,目前已被广泛应用在各种语言和各种大数据平台,适合计算超高基维的数据,常用于去重、标签筛选、时间序列等计算中。本文为您介绍MaxCompute支持的RoaringBitmap相关函数。
基本原理
RoaringBitmap算法将32位和64位的整数划分如下:
将32位整数分成216个桶,高16位为桶号,低16位存储于桶内。
将64位整数分成232个桶,高32位用于在一级索引中确定哪一个RoaringBitmap容器将被用来存储低32位的整数值。
桶内数据的表示方式:Array Container(数组容器)、Bitmap Container(位图容器)、Run Container(运行容器)。
RoaringBitmap的内部实现分为RoaringBitmap32和RoaringBitmap64,分别表示32位和64位的RoaringBitmap,但对于用户来说,在使用时并不需要区分。
采用这种存储结构,RoaringBitmap可以快速检索一个特定的值。在做位图计算(AND、OR、XOR)时,RoaringBitmap提供了相应的算法来高效地实现在容器之间的运算,使得RoaringBitmap无论在存储和计算性能上都表现优秀。
使用限制
在使用参数或返回值包含RoaringBitmap类型的函数时,需要先设置
set odps.sql.type.system.odps2=true;
,否则执行时会报类似于Semantic analysis exception - function or view xxx cannot be resolved
的错误。创建数据表时,暂不支持创建RoaringBitmap类型的数据列。当前可以通过RB_SERIALIZE函数将RoaringBitmap数据序列化,并以Binary类型进行存储,在使用时通过RB_DESERIALIZE将Binary类型数据反序列化成RoaringBitmap。
RoaringBitmap类型暂不支持屏显,即所有输出类型为RoaringBitmap的函数都会执行失败,但是可以在外面嵌套一层
rb_to_array
,将RoaringBitmap类型转换为整型数组再输出。如SELECT rb_to_array(rb_build(array(1, 2, 2)));
语句的返回结果为[1, 2]
。
聚合函数
MaxCompute支持的RoaringBitmap相关的聚合函数如下。
函数名 | 功能描述 |
将整型列转换为RoaringBitmap。 | |
构造RoaringBitmap计算整型列基数值。 | |
计算RoaringBitmap列的交集,即获取在所有RoaringBitmap中均存在的元素集合。 | |
计算RoaringBitmap列的并集,即获取所有RoaringBitmap中的全部元素集合。 | |
对RoaringBitmap列中所有数据进行异或计算,即获取在RoaringBitmap中仅出现一次的元素集合。 | |
计算RoaringBitmap列的交集的基数值。 | |
计算RoaringBitmap列的并集的基数值。 | |
计算RoaringBitmap列的异或结果的基数值。 |
示例数据
以下聚合函数示例均基于t_test
示例数据。以下是创建t_test
并添加数据的命令示例。
DROP TABLE IF EXISTS t_test;
CREATE TABLE t_test
(
col_int INT
,col_bigint BIGINT
);
INSERT INTO t_test VALUES(1,1),(2,2),(1,2);
RB_BUILD_AGG
命令格式
roaringbitmap rb_build_agg(int|bigint col)
命令说明
将整型列转换为RoaringBitmap类型。
参数说明
col:必填。属性列,类型为INT或BIGINT。
返回值说明
返回col中所有数据的一个RoaringBitmap。返回规则如下:
col为INT类型时,返回RoaringBitmap32类型。
col为BIGINT类型时,返回RoaringBitmap64类型。
示例
示例1:查询RoaringBitmap32类型数据。
SELECT rb_to_array(rb_build_agg(col_int)) from t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2] | +------------+
示例2:查询RoaringBitmap64类型数据。
SELECT rb_to_array(rb_build_agg(col_bigint)) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2] | +------------+
RB_CARDINALITY_AGG
命令格式
bigint rb_cardinality_agg(int|bigint col)
命令说明
通过构造RoaringBitmap计算整型列的基数值,等效于
count(distinct)
。参数说明
col:必填。属性列,类型为INT或BIGINT。
返回值说明
返回整型列的基数值,类型为BIGINT。
示例
示例1:查询
col_int
的基数值。SELECT rb_cardinality_agg(col_int) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
示例2:查询
col_bigint
的基数值。SELECT rb_cardinality_agg(col_bigint) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
RB_AND_AGG
命令格式
roaringbitmap rb_and_agg(roaringbitmap col)
命令说明
计算RoaringBitmap列的交集,即获取在所有RoaringBitmap中均存在的元素集合。
参数说明
col:必填。属性列,类型为RoaringBitmap。
返回值说明
返回RoaringBitmap列的交集,类型为RoaringBitmap。
示例
示例1
SELECT rb_to_array(rb_and_agg(rb_build(array(col_int)))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | [] | +------------+
示例2
SELECT rb_to_array(rb_and_agg(rb_build(array(col_bigint)))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | [] | +------------+
RB_OR_AGG
命令格式
roaringbitmap rb_or_agg(roaringbitmap col)
命令说明
计算RoaringBitmap列的并集,即获取所有RoaringBitmap中的全部元素集合。
参数说明
col:必填。属性列,类型为RoaringBitmap。
返回值说明
返回RoaringBitmap列的并集,类型为RoaringBitmap。
示例
示例1
SELECT rb_to_array(rb_or_agg(rb_build(array(col_int)))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2] | +------------+
示例2
SELECT rb_to_array(rb_or_agg(rb_build(array(col_bigint)))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2] | +------------+
RB_XOR_AGG
命令格式
roaringbitmap rb_xor_agg(roaringbitmap col)
命令说明
对RoaringBitmap列中所有数据进行异或计算,即获取在RoaringBitmap中仅出现一次的元素集合。
参数说明
col:必填。属性列,类型为RoaringBitmap。
返回值说明
返回RoaringBitmap列的异或结果,类型为RoaringBitmap。
示例
示例1
SELECT rb_to_array(rb_xor_agg(rb_build(array(col_int)))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | [2] | +------------+
示例2
SELECT rb_to_array(rb_xor_agg(rb_build(array(col_bigint)))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | [1] | +------------+
RB_AND_CARDINALITY_AGG
命令格式
bigint rb_and_cardinality_agg(roaringbitmap col)
命令说明
计算RoaringBitmap列中所有RoaringBitmap的交集的基数。
参数说明
col:必填。属性列,类型为RoaringBitmap。
返回值说明
返回RoaringBitmap列交集的基数值,类型为BIGINT。
示例
示例1
SELECT rb_and_cardinality_agg(rb_build(array(col_int))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | 0 | +------------+
示例2
SELECT rb_and_cardinality_agg(rb_build(array(col_bigint))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | 0 | +------------+
RB_OR_CARDINALITY_AGG
命令格式
bigint rb_or_cardinality_agg(roaringbitmap col)
命令说明
计算RoaringBitmap列中所有RoaringBitmap的并集的基数。
参数说明
col:必填。属性列,类型为RoaringBitmap。
返回值说明
返回RoaringBitmap列并集的基数值,类型为BIGINT。
示例
示例1
SELECT rb_or_cardinality_agg(rb_build(array(col_int))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
示例2
SELECT rb_or_cardinality_agg(rb_build(array(col_bigint))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
RB_XOR_CARDINALITY_AGG
命令格式
bigint rb_xor_cardinality_agg(roaringbitmap col)
命令说明
计算RoaringBitmap列中所有RoaringBitmap的异或结果的基数。
参数说明
col:必填。属性列,类型为RoaringBitmap。
返回值说明
返回RoaringBitmap列异或结果的基数值,类型为BIGINT。
示例
示例1
SELECT rb_xor_cardinality_agg(rb_build(array(col_int))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | 1 | +------------+
示例2
SELECT rb_xor_cardinality_agg(rb_build(array(col_bigint))) FROM t_test;
返回结果如下。
+------------+ | _c0 | +------------+ | 1 | +------------+
函数列表
MaxCompute支持的RoaringBitmap相关的非聚合函数如下。
函数名 | 功能描述 |
将整型数组转换为一个RoaringBitmap。 | |
将RoaringBitmap转换为整型数组,并对数组元素从小到大进行排序。 | |
计算RoaringBitmap的基数值。 | |
计算两个RoaringBitmap的交集。 说明
| |
计算两个RoaringBitmap的并集。 说明
| |
计算两个RoaringBitmap的异或结果。 说明
| |
计算两个RoaringBitmap的补集。 说明
| |
计算两个RoaringBitmap的交集的基数。 说明
| |
计算两个RoaringBitmap的并集的基数。 说明
| |
计算两个RoaringBitmap的异或结果的基数。 说明
| |
计算两个RoaringBitmap的补集的基数。 说明
| |
判断两个RoaringBitmap是否相等。 | |
判断两个RoaringBitmap是否不相等。 | |
判断第一个RoaringBitmap是否包含第二个RoaringBitmap。 | |
判断两个RoaringBitmap是否相交。 | |
判断RoaringBitmap是否为空。 | |
获取RoaringBitmap中的最大值。 | |
获取RoaringBitmap中的最小值。 | |
获取 | |
获取RoaringBitmap在 | |
获取RoaringBitmap填充 | |
获取RoaringBitmap清除 | |
将RoaringBitmap序列化成BINARY类型。 | |
将BINARY反序列化为64位的RoaringBitmap。 | |
将BINARY反序列化为32位的RoaringBitmap。 |
RB_BUILD
命令格式
roaringbitmap rb_build(array<int|bigint> a)
命令说明
将整型数组转换为一个RoaringBitmap。
参数说明
a:必填。ARRAY数组类型,数组中的元素类型可以为INT或BIGINT,数组不能为空。
返回值说明
返回包含ARRAY中所有数据的一个RoaringBitmap。返回规则如下:
如果a类型为ARRAY<INT>,返回RoaringBitmap32类型。
如果a类型为ARRAY<BIGINT>,返回RoaringBitmap64类型。
示例
示例1:构建RoaringBitmap32类型数据。
SELECT rb_to_array(rb_build(array(1, 2, 2)));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2] | +------------+
示例2:构建RoaringBitmap64类型数据。
SELECT rb_to_array(rb_build(array(1L, 2L, 2L)));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2] | +------------+
RB_TO_ARRAY
命令格式
array<int|bigint> rb_to_array(roaringbitmap a)
命令说明
将RoaringBitmap转换为整型数组,并对数组元素从小到大进行排序。
参数说明
a:必填。
返回值说明
返回RoaringBitmap中的所有元素构成的一个整型数组。返回规则如下:
如果a类型为RoaringBitmap32,返回ARRAY<INT>类型。
如果a类型为RoaringBitmap64,返回ARRAY<BIGINT>类型。
示例
SELECT rb_to_array(rb_build(array(1, 2, 2)));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2] | +------------+
RB_CARDINALITY
命令格式
bigint rb_cardinality(roaringbitmap a)
命令说明
计算RoaringBitmap的基数值。
参数说明
a:必填。
返回值说明
返回RoaringBitmap存储的数据的基数值,类型为BIGINT。
示例
示例1
SELECT rb_cardinality(rb_build(array(1, 2, 2)));
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
示例2
-- 返回3 SELECT rb_cardinality(rb_build(array(1L, 2L, 3L)));
返回结果如下。
+------------+ | _c0 | +------------+ | 3 | +------------+
RB_AND
命令格式
roaringbitmap rb_and(roaringbitmap a, roaringbitmap b)
命令说明
计算两个RoaringBitmap的交集。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回两个RoaringBitmap的交集,类型为RoaringBitmap,当其中一个参数为NULL时,返回NULL。
说明当其中一个参数为NULL时,
rb_and_null2empty
函数将会将为NULL的参数转换空集。示例
SELECT rb_to_array(rb_and(rb_build(array(1, 2)), rb_build(array(2, 3))));
返回结果如下。
+------------+ | _c0 | +------------+ | [2] | +------------+
RB_OR
命令格式
roaringbitmap rb_or(roaringbitmap a, roaringbitmap b)
命令说明
计算两个RoaringBitmap的并集。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回两个RoaringBitmap的并集,类型为RoaringBitmap,当其中一个参数为NULL时,返回NULL。
说明当其中一个参数为NULL时,
rb_or_null2empty
函数将会将为NULL的参数转换空集。示例
示例1
SELECT rb_to_array(rb_or(rb_build(array(1, 2)), rb_build(array(2, 3))));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2,3] | +------------+
示例2
-- 返回[1,2,3] SELECT rb_to_array(rb_or(rb_build(array(1L, 2L)), rb_build(array(2L, 3L))));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2,3] | +------------+
RB_XOR
命令格式
roaringbitmap rb_xor(roaringbitmap a, roaringbitmap b)
命令说明
计算两个RoaringBitmap的异或结果。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回两个RoaringBitmap的异或结果,类型为RoaringBitmap,当其中一个参数为NULL时,返回NULL。
说明当其中一个参数为NULL时,
rb_xor_null2empty
函数将会将为NULL的参数转换空集。示例
示例1
SELECT rb_to_array(rb_xor(rb_build(array(1, 2)), rb_build(array(2, 3))));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,3] | +------------+
示例2
SELECT rb_to_array(rb_xor(rb_build(array(1L, 2L)), rb_build(array(2L, 3L))));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,3] | +------------+
RB_ANDNOT
命令格式
roaringbitmap rb_andnot(roaringbitmap a, roaringbitmap b)
命令说明
计算两个RoaringBitmap的补集。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回两个RoaringBitmap的补集,类型为RoaringBitmap。当其中一个参数为NULL时,返回NULL。
说明当其中一个参数为NULL时,
rb_andnot_null2empty
函数将会将为NULL的参数转换空集。示例
示例1
SELECT rb_to_array(rb_andnot(rb_build(array(1, 2)), rb_build(array(2, 3))));
返回结果如下。
+------------+ | _c0 | +------------+ | [1] | +------------+
示例2
-- 返回[1] SELECT rb_to_array(rb_andnot(rb_build(array(1L, 2L)), rb_build(array(2L, 3L))));
返回结果如下。
+------------+ | _c0 | +------------+ | [1] | +------------+
RB_AND_CARDINALITY
命令格式
bigint rb_and_cardinality(roaringbitmap a, roaringbitmap b)
命令说明
计算两个RoaringBitmap的交集的基数。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回两个RoaringBitmap的交集的基数值,类型为BIGINT,当其中一个参数为NULL时,返回NULL。
说明当其中一个参数为NULL时,
rb_and_null2empty_cardinality
函数将会将为NULL的参数转换空集。示例
示例1
SELECT rb_and_cardinality(rb_build(array(1, 2)), rb_build(array(2, 3)));
返回结果如下。
+------------+ | _c0 | +------------+ | 1 | +------------+
示例2
-- 返回1 SELECT rb_and_cardinality(rb_build(array(1L, 2L)), rb_build(array(2L, 3L)));
返回结果如下。
+------------+ | _c0 | +------------+ | 1 | +------------+
RB_OR_CARDINALITY
命令格式
bigint rb_or_cardinality(roaringbitmap a, roaringbitmap b)
命令说明
计算两个RoaringBitmap的并集的基数。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回两个RoaringBitmap的并集的基数值,类型为BIGINT,当其中一个参数为NULL时,返回NULL。
说明当其中一个参数为NULL时,
rb_or_null2empty_cardinality
函数将会将为NULL的参数转换空集。示例
示例1
SELECT rb_or_cardinality(rb_build(array(1, 2)), rb_build(array(2, 3)));
返回结果如下。
+------------+ | _c0 | +------------+ | 3 | +------------+
示例2
SELECT rb_or_cardinality(rb_build(array(1L, 2L)), rb_build(array(2L, 3L)));
返回结果如下。
+------------+ | _c0 | +------------+ | 3 | +------------+
RB_XOR_CARDINALITY
命令格式
bigint rb_xor_cardinality(roaringbitmap a, roaringbitmap b)
命令说明
计算两个RoaringBitmap的异或结果的基数。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回两个RoaringBitmap的异或结果的基数值,类型为BIGINT,当其中一个参数为NULL时,返回NULL。
说明当其中一个参数为NULL时,
rb_xor_null2empty_cardinality
函数将会将为NULL的参数转换空集。示例
示例1
SELECT rb_xor_cardinality(rb_build(array(1, 2)), rb_build(array(2, 3)));
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
示例2
-- 返回2 SELECT rb_xor_cardinality(rb_build(array(1L, 2L)), rb_build(array(2L, 3L)));
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
RB_ANDNOT_CARDINALITY
命令格式
bigint rb_andnot_cardinality(roaringbitmap a, roaringbitmap b)
命令说明
计算两个RoaringBitmap的补集的基数。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回两个RoaringBitmap的补集的基数值,类型为BIGINT,当其中一个参数为NULL时,返回NULL。
说明当其中一个参数为NULL时,
rb_andnot_null2empty_cardinality
函数将会将为NULL的参数转换空集。示例
示例1
-- 返回1 SELECT rb_andnot_cardinality(rb_build(array(1, 2)), rb_build(array(2, 3)));
返回结果如下。
+------------+ | _c0 | +------------+ | 1 | +------------+
示例2
SELECT rb_andnot_cardinality(rb_build(array(1L, 2L)), rb_build(array(2L, 3L)));
返回结果如下。
+------------+ | _c0 | +------------+ | 1 | +------------+
RB_EQUAL
命令格式
bool rb_equal(roaringbitmap a, roaringbitmap b)
命令说明
判断两个RoaringBitmap是否相等。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回BOOLEAN类型。
示例
示例1
SELECT rb_equal(rb_build(array(1, 2)), rb_build(array(2, 3)));
返回结果如下。
+------+ | _c0 | +------+ | false | +------+
示例2
SELECT rb_equal(rb_build(array(1, 2)), rb_build(array(2, 1)));
返回结果如下。
+------+ | _c0 | +------+ | true | +------+
RB_NOT_EQUAL
命令格式
bool rb_not_equal(roaringbitmap a, roaringbitmap b)
命令说明
判断两个RoaringBitmap是否不相等。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回BOOLEAN类型。
示例
示例1
SELECT rb_not_equal(rb_build(array(1, 2)), rb_build(array(2, 3)));
返回结果如下。
+------+ | _c0 | +------+ | true | +------+
示例2
SELECT rb_not_equal(rb_build(array(1, 2)), rb_build(array(2, 1)));
返回结果如下。
+------+ | _c0 | +------+ | false | +------+
RB_CONTAINS
命令格式
bool rb_contains(roaringbitmap a, roaringbitmap b)
命令说明
判断第一个RoaringBitmap是否包含第二个RoaringBitmap。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回BOOLEAN类型。
示例
示例1
SELECT rb_contains(rb_build(array(1, 2)), rb_build(array(2, 3)));
返回结果如下。
+------+ | _c0 | +------+ | false | +------+
示例2
SELECT rb_contains(rb_build(array(1, 2, 3)), rb_build(array(1, 2)));
返回结果如下。
+------+ | _c0 | +------+ | true | +------+
RB_INTERSECT
命令格式
bool rb_intersect(roaringbitmap a, roaringbitmap b)
命令说明
判断两个RoaringBitmap是否相交。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回BOOLEAN类型。
示例
示例1
SELECT rb_intersect(rb_build(array(1, 2)), rb_build(array(2, 3)));
返回结果如下。
+------+ | _c0 | +------+ | true | +------+
示例2
SELECT rb_intersect(rb_build(array(1, 2)), rb_build(array(3, 4)));
返回结果如下。
+------+ | _c0 | +------+ | false | +------+
RB_IS_EMPTY
命令格式
bool rb_is_empty(roaringbitmap a)
命令说明
判断RoaringBitmap是否为空。
参数说明
a:必填。RoaringBitmap类型数据。
b:必填。RoaringBitmap类型数据。
返回值说明
返回BOOLEAN类型。
示例
示例1
SELECT rb_is_empty(rb_build(array(0, 1, 2)));
返回结果如下。
+------+ | _c0 | +------+ | false | +------+
示例2
SELECT rb_is_empty(rb_and(rb_build(array(0, 1, 2)), rb_build(array(3, 4, 5))));
返回结果如下。
+------+ | _c0 | +------+ | true | +------+
RB_MAXIMUM
命令格式
int|bigint rb_maximum(roaringbitmap a)
命令说明
获取RoaringBitmap中的最大值。
参数说明
a:必填。RoaringBitmap类型数据。
返回值说明
返回INT或BIGINT类型。
示例
SELECT rb_maximum(rb_build(array(-1, 0, 1, 2)));
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
RB_MINIMUM
命令格式
int|bigint rb_minimum(roaringbitmap a)
命令说明
获取RoaringBitmap中的最小值。
参数说明
a:必填。RoaringBitmap类型数据。
返回值说明
返回INT或BIGINT类型。
示例
SELECT rb_minimum(rb_build(array(-1, 0, 1, 2)));
返回结果如下。
+------------+ | _c0 | +------------+ | -1 | +------------+
RB_RANGE
命令格式
roaringbitmap rb_range(roaringbitmap a, bigint start, bigint end)
命令说明
获取
[start, end)
范围内RoaringBitmap的新集合。参数说明
a:必填。RoaringBitmap类型数据。
start:必填。BIGINT类型数据。
end:必填。BIGINT类型数据。
返回值说明
返回RoaringBitmap类型。
示例
示例1
SELECT rb_to_array(rb_range(rb_build(array(-1, 0, 1, 2)), 0L, 2L));
返回结果如下。
+------------+ | _c0 | +------------+ | [0,1] | +------------+
示例2
SELECT rb_to_array(rb_range(rb_build(array(-1, 0, 1, 2)), 3L, 5L));
返回结果如下。
+------------+ | _c0 | +------------+ | [] | +------------+
RB_RANGE_CARDINALITY
命令格式
bigint rb_range_cardinality(roaringbitmap a, bigint start, bigint end)
命令说明
获取RoaringBitmap在
[start, end)
范围内新集合的基数。参数说明
a:必填。RoaringBitmap类型数据。
start:必填。BIGINT类型数据。
end:必填。BIGINT类型数据。
返回值说明
返回BIGINT类型。
示例
示例1
SELECT rb_range_cardinality(rb_build(array(-1, 0, 1, 2)), 0L, 2L);
返回结果如下。
+------------+ | _c0 | +------------+ | 2 | +------------+
示例2
SELECT rb_range_cardinality(rb_build(array(-1, 0, 1, 2)), 3L, 5L);
返回结果如下。
+------------+ | _c0 | +------------+ | 0 | +------------+
RB_FILL
命令格式
roaringbitmap rb_fill(roaringbitmap a, bigint start, bigint end)
命令说明
获取RoaringBitmap填充
[start, end)
之后的新集合。参数说明
a:必填。RoaringBitmap类型数据。
start:必填。BIGINT类型数据。
end:必填。BIGINT类型数据。
返回值说明
返回RoaringBitmap类型。
示例
示例1
SELECT rb_to_array(rb_fill(rb_build(array(-1, 0, 1, 2)), 0L, 2L));
返回结果如下。
+------------+ | _c0 | +------------+ | [-1,0,1,2] | +------------+
示例2
SELECT rb_to_array(rb_fill(rb_build(array(-1, 0, 1, 2)), 3L, 5L));
返回结果如下。
+------------+ | _c0 | +------------+ | [-1,0,1,2,3,4] | +------------+
RB_CLEAR
命令格式
roaringbitmap rb_clear(roaringbitmap a, bigint start, bigint end)
命令说明
获取roaringbitmap清除
[start, end)
之后的新集合。参数说明
a:必填。RoaringBitmap类型数据。
start:必填。BIGINT类型数据。
end:必填。BIGINT类型数据。
返回值说明
返回RoaringBitmap类型。
示例
示例1
SELECT rb_to_array(rb_clear(rb_build(array(-1, 0, 1, 2)), 0L, 2L));
返回结果如下。
+------------+ | _c0 | +------------+ | [-1,2] | +------------+
示例2
SELECT rb_to_array(rb_clear(rb_build(array(-1, 0, 1, 2)), 3L, 5L));
返回结果如下。
+------------+ | _c0 | +------------+ | [-1,0,1,2] | +------------+
RB_SERIALIZE
命令格式
bianry rb_serialize(roaringbitmap a)
命令说明
将RoaringBitmap序列化成BINARY类型。
参数说明
a:必填。RoaringBitmap类型数据。
返回值说明
返回RoaringBitmap序列化之后的BINARY类型。
示例
SELECT rb_serialize(rb_build(array(1L, 2L, 3L)));
返回结果如下。
+------------+ | _c0 | +------------+ | =01=00=00=00=00=00=00=00=00=00=00=00:0=00=00=01=00=00=00=00=00=02=00=10=00=00=00=01=00=02=00=03=00 | +------------+
RB_DESERIALIZE
命令格式
roaringbitmap64 rb_deserialize(bianry a)
命令说明
将BINARY反序列化为64位的RoaringBitmap。
参数说明
a:必填。BINARY类型数据。
返回值说明
返回将BINARY反序列化后的64位RoaringBitmap。
示例
SELECT rb_to_array(rb_deserialize(rb_serialize(rb_build(array(1L, 2L, 3L)))));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2,3] | +------------+
RB_DESERIALIZE_32
命令格式
roaringbitmap32 rb_deserialize(bianry a)
命令说明
将BINARY反序列化为32位的RoaringBitmap。
参数说明
a:必填。BINARY类型数据。
返回值说明
返回将BINARY反序列化后的32位RoaringBitmap。
示例
SELECT rb_to_array(rb_deserialize_32(rb_serialize(rb_build(array(1, 2, 3)))));
返回结果如下。
+------------+ | _c0 | +------------+ | [1,2,3] | +------------+