更新时间:2025-08-26 GMT+08:00
分享

Roaring Bitmap函数

DWS自8.1.3集群版本开始,支持高效的位图处理函数,可用于用户画像,精准营销等场景,极大地提高了查询性能。

rb_build(array)

描述:将int数组转成roaringbitmap类型。

返回值类型:roaringbitmap

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT rb_build('{1,2,3}');
rb_build
------------------------------------------------
\x3a300000010000000000020010000000010002000300
(1 row)

select rb_build('{1, 5000000000, 5000000001}');
                                                     rb_build                                                     
------------------------------------------------------------------------------------------------------------------
 \x060200000000000000000000003a3000000100000000000000100000000100010000003a30000001000000052a01001000000000f201f2
(1 row)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE r_row (a int, b text, c roaringbitmap);
NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default.
HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
CREATE TABLE

INSERT INTO r_row values (1, 'a', rb_build('{1,2,3}'));
INSERT 0 1

SELECT * FROM r_row;
 a | b |                       c
---+---+------------------------------------------------
 1 | a | \x3a300000010000000000020010000000010002000300
(1 row)

INSERT INTO r_row values (2, 'b', rb_build('{}'));
INSERT 0 1

SELECT * FROM r_row;
 a | b |                       c
---+---+------------------------------------------------
 2 | b | \x3a30000000000000
 1 | a | \x3a300000010000000000020010000000010002000300
(2 rows)

rb_iterate(roaringbitmap)

描述:把roaringbitmap数据转成int,按照多行输出。

返回值类型:record类型(多行int值)

示例:

1
2
3
4
5
6
7
SELECT rb_iterate(c) FROM r_row;
rb_iterate
------------
1
2
3
(3 rows)

rb_to_array(roaringbitmap)

描述:rb_build的逆向操作,把roaringBitmap转成int数组。

返回值类型: array

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT rb_to_array(c) FROM r_row;
rb_to_array
-------------
{1,2,3}
(1 row)

SELECT rb_to_array('\x3a300000010000000000020010000000010002000300');
rb_to_array
-------------
{1,2,3}
(1 row)

rb_to_bigint_array(roaringbitmap)

描述:rb_build的逆向操作,把roaringBitmap转成bigint数组。该函数仅9.1.1.100及以上集群版本支持。

返回值类型:array

示例:

1
2
3
4
5
SELECT rb_to_bigint_array('\x060200000000000000000000003a3000000100000000000000100000000100010000003a30000001000000052a01001000000000f201f2');
rb_to_bigint_array
-------------
{1, 5000000000, 5000000001}
(1 row)

rb_and(roaringbitmap, roaringbitmap)

描述:计算两个roaringbitmap的交集。

返回值类型:roaringbitmap

示例:

1
2
3
4
5
SELECT rb_to_array(rb_and(rb_build('{1,2,3}'), rb_build('{2,3,4}')));
rb_to_array
-------------
{2,3}
(1 row)

rb_or(roaringbitmap, roaringbitmap)

描述:计算两个roaringbitmap的并集。

返回值类型:roaringbitmap

示例:

1
2
3
4
5
SELECT rb_to_array(rb_or(rb_build('{1,2,3}'), rb_build('{2,3,4}')));
rb_to_array
-------------
{1,2,3,4}
(1 row)

rb_xor(roaringbitmap, roaringbitmap)

描述:计算两个roaringbitmap的异或。

返回值类型:roaringbitmap

示例:

1
2
3
4
5
SELECT rb_to_array(rb_xor(rb_build('{1,2,3}'), rb_build('{2,3,4}')));
rb_to_array
-------------
{1,4}
(1 row)

rb_andnot(roaringbitmap, roaringbitmap)

描述:在第一个roaringbitmap集合中,但是不在第二个roaringbitmap中的集合。

返回值类型:roaringbitmap

示例:

1
2
3
4
5
SELECT rb_to_array(rb_andnot(rb_build('{1,2,3}'), rb_build('{2,3,4}')));
rb_to_array
-------------
{1}
(1 row)

rb_cardinality(roaringbitmap)

描述:计算一个roaringbitmap的基数。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT rb_cardinality(rb_build('{1,2,3}'));
rb_cardinality
----------------
3
(1 row)

rb_and_cardinality(roaringbitmap, roaringbitmap)

描述:计算两个roaringbitmap的交集的基数。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT rb_and_cardinality(rb_build('{1,2,3}'), rb_build('{2,3,4}'));
rb_and_cardinality
--------------------
2
(1 row)

rb_or_cardinality(roaringbitmap, roaringbitmap)

描述:计算两个roaringbitmap的并集的基数。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT rb_or_cardinality(rb_build('{1,2,3}'), rb_build('{2,3,4}'));
rb_or_cardinality
-------------------
4
(1 row)

rb_xor_cardinality(roaringbitmap, roaringbitmap)

描述:计算两个roaringbitmap异或以后的基数。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT rb_xor_cardinality(rb_build('{1,2,3}'), rb_build('{2,3,4}'));
rb_xor_cardinality
--------------------
2
(1 row)

rb_andnot_cardinality(roaringbitmap, roaringbitmap)

描述:计算两个roaringbitmap按照andnot计算结果以后的基数。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT rb_andnot_cardinality(rb_build('{1,2,3}'), rb_build('{2,3,4}'));
rb_andnot_cardinality
-----------------------
1
(1 row)

rb_is_empty(roaringbitmap)

描述:判断一个roaringbitmap是否为空。

返回值类型:bool

示例:

1
2
3
4
5
SELECT rb_is_empty(rb_build('{1,2,3}'));
rb_is_empty
-------------
f
(1 row)

rb_equals(roaringbitmap, roaringbitmap)

描述:判断两个roaringbitmap是否相等。

返回值类型:bool

示例:

1
2
3
4
5
SELECT rb_equals(rb_build('{1,2,3}'), rb_build('{2,3,4}'));
rb_equals
-----------
f
(1 row)

rb_intersect(roaringbitmap, roaringbitmap)

描述:判断两个roaringbitmap是否相交。

返回值类型:bool

示例:

1
2
3
4
5
SELECT rb_intersect(rb_build('{1,2,3}'), rb_build('{2,3,4}'));
rb_intersect
--------------
t
(1 row)

rb_min(roaringbitmap)

描述:返回roaringbitmap中的最小值。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT rb_min(rb_build('{1,2,3}'));
rb_min
--------
1
(1 row)

rb_max(roaringbitmap)

描述:返回roaringbitmap中的最大值。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT rb_max(rb_build('{1,2,3}'));
rb_max
--------
3
(1 row)

rb_add(roaringbitmap, bigint)

描述:在roaringbitmap中增加一个元素。

返回值类型:roaringbitmap

示例:

1
2
3
4
5
SELECT rb_to_array(rb_add(rb_build('{1,3}'), 2));
rb_to_array
-------------
{1,2,3}
(1 row)

rb_add、rb_added、rb_contain、rb_containedby、 rb_remove函数,使用bigint作为输入时,不支持使用nvarchar2类型直接作为bigint输入,需要使用::bigint操作进行数据类型强转换。例如:

SELECT rb_to_array(rb_add(rb_build('{1,3}'), '2'::nvarchar2::bigint));  
rb_to_array  
-------------
  {1,2,3}

rb_added(bigint, roaringbitmap)

描述:在roaringbitmap中增加一个元素。

返回值类型:roaringbitmap

示例:

1
2
3
4
5
SELECT rb_to_array(rb_added(2, rb_build('{1,3}')));
rb_to_array
-------------
{1,2,3}
(1 row)

rb_contain(roaringbitmap,bigint)

描述:判断roaringbitmap是否包含指定的元素。

返回值类型:bool

示例:

1
2
3
4
5
SELECT rb_contain(rb_build('{1,3}'), 2);
rb_contain
------------
f
(1 row)

rb_containedby(bigint,roaringbitmap)

描述:判断给定的元素是否被给定的roaringbitmap包含。

示例:

1
2
3
4
5
SELECT rb_containedby(2,rb_build('{1,3}'));
rb_containedby
----------------
f
(1 row)

rb_contain_rb(roaringbitmap,roaringbitmap)

描述:判断第一个roaringbitmap是否包含第二个roaringbitmap。

返回值类型:bool

示例:

1
2
3
4
5
SELECT rb_contain_rb(rb_build('{1,3}'), rb_build('{2,3}'));
rb_contain_rb
---------------
f
(1 row)

rb_containedby_rb(roaringbitmap,roaringbitmap)

描述:判断跟定的第二个roaringbitmap是否包含第一个roaringbitmap。

返回值类型:bool

示例:

1
2
3
4
5
SELECT rb_containedby_rb(rb_build('{1,3}'), rb_build('{2,3}'));
rb_containedby_rb
---------------
f
(1 row)

rb_remove(roaringbitmap,bigint)

描述:从roaringbitmap中移除指定的元素。

返回值类型:roaringbitmap

示例:

1
2
3
4
5
SELECT rb_to_array(rb_remove(rb_build('{1,3}'),1));
rb_to_array
-------------
{3}
(1 row)

rb_clear(roaringbitmap,bigint,bigint)

描述:从roaringbitmap中清除指定范围内的元素。

返回值类型:roaringbitmap

示例:

1
SELECT rb_to_array(rb_clear(rb_build('{1,2,3}'),1,2));                                                                                                                                                                                                                        rb_to_array                                                                                                                                                                                                                                                                            -------------                                                                                                                                                                                                                                                                            {2,3}                                                                                                                                                                                                                                                                                  (1 row)

rb_flip(roaringbitmap,bigint,bigint)

描述:反转指定范围的元素。

示例:

1
2
3
4
5
SELECT rb_to_array(rb_flip(rb_build('{1,2,3,7,9}'), 1,10));
rb_to_array
--------------
{4,5,6,8,10}
(1 row)

rb_rank(roaringbitmap,bigint)

描述:返回小于指定值的集合的基数。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT rb_rank(rb_build('{1,10,100}'),99);
rb_rank
---------
2
(1 row)

相关文档