Roaring Bitmap函数
GaussDB(DWS)自8.1.3集群版本开始,支持高效的位图处理函数和操作符,可用于用户画像,精准营销等场景,极大的提高了查询性能。
rb_build(array)
描述:将int数组转成roaringbitmap类型。
返回值类型:roaringbitmap
示例:
1 2 3 4 5 |
SELECT rb_build('{1,2,3}'); rb_build ------------------------------------------------ \x3a300000010000000000020010000000010002000300 (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 |
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_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的基数。
返回值类型:int
示例:
1 2 3 4 5 |
SELECT rb_cardinality(rb_build('{1,2,3}')); rb_cardinality ---------------- 3 (1 row) |
rb_and_cardinality(roaringbitmap, roaringbitmap)
描述:计算两个roaringbitmap的交集的基数。
返回值类型:int
示例:
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的并集的基数。
返回值类型:int
示例:
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异或以后的基数。
返回值类型:int
示例:
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计算结果以后的基数。
返回值类型:int
示例:
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中的最小值。
返回值类型:int
示例:
1 2 3 4 5 |
SELECT rb_min(rb_build('{1,2,3}')); rb_min -------- 1 (1 row) |
rb_max(roaringbitmap)
描述:返回roaringbitmap中的最大值。
返回值类型:int
示例:
1 2 3 4 5 |
SELECT rb_max(rb_build('{1,2,3}')); rb_max -------- 3 (1 row) |
rb_add(roaringbitmap, int)
描述:在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_added(int, 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,int)
描述:判断roaringbitmap是否包含指定的元素。
返回值类型:bool
示例:
1 2 3 4 5 |
SELECT rb_contain(rb_build('{1,3}'), 2); rb_contain ------------ f (1 row) |
rb_containedby(int,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,int)
描述:从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,int,int)
描述:从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,int,int)
描述:反转指定范围的元素。
示例:
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,int)
描述:返回小于指定值的集合的基数。
返回值类型:int
示例:
1 2 3 4 5 |
SELECT rb_rank(rb_build('{1,10,100}'),99); rb_rank --------- 2 (1 row) |