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] | +------------+