RoaringBitmap

RoaringBitmap是一种高效的Bitmap压缩算法,目前已被广泛应用在各种语言和各种大数据平台,适合计算超高基维的数据,常用于去重、标签筛选、时间序列等计算中。本文为您介绍MaxCompute支持的RoaringBitmap相关函数。

基本原理

RoaringBitmap算法将32位和64位的整数划分如下:

  • 32位整数分成216个桶,高16位为桶号,低16位存储于桶内。

  • 64位整数分成232个桶,高32位用于在一级索引中确定哪一个RoaringBitmap容器将被用来存储低32位的整数值。

  • 桶内数据的表示方式:Array Container(数组容器)、Bitmap Container(位图容器)、Run Container(运行容器)。

RoaringBitmap的内部实现分为RoaringBitmap32RoaringBitmap64,分别表示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_DESERIALIZEBinary类型数据反序列化成RoaringBitmap。

  • RoaringBitmap类型暂不支持屏显,即所有输出类型为RoaringBitmap的函数都会执行失败,但是可以在外面嵌套一层rb_to_array,将RoaringBitmap类型转换为整型数组再输出。如SELECT rb_to_array(rb_build(array(1, 2, 2))); 语句的返回结果为[1, 2]

聚合函数

MaxCompute支持的RoaringBitmap相关的聚合函数如下。

函数名

功能描述

RB_BUILD_AGG

将整型列转换为RoaringBitmap。

RB_CARDINALITY_AGG

构造RoaringBitmap计算整型列基数值。

RB_AND_AGG

计算RoaringBitmap列的交集,即获取在所有RoaringBitmap中均存在的元素集合。

RB_OR_AGG

计算RoaringBitmap列的并集,即获取所有RoaringBitmap中的全部元素集合。

RB_XOR_AGG

RoaringBitmap列中所有数据进行异或计算,即获取在RoaringBitmap中仅出现一次的元素集合。

RB_AND_CARDINALITY_AGG

计算RoaringBitmap列的交集的基数值。

RB_OR_CARDINALITY_AGG

计算RoaringBitmap列的并集的基数值。

RB_XOR_CARDINALITY_AGG

计算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:必填。属性列,类型为INTBIGINT。

  • 返回值说明

    返回col中所有数据的一个RoaringBitmap。返回规则如下:

    • colINT类型时,返回RoaringBitmap32类型。

    • colBIGINT类型时,返回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:必填。属性列,类型为INTBIGINT。

  • 返回值说明

    返回整型列的基数值,类型为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相关的非聚合函数如下。

函数名

功能描述

RB_BUILD

将整型数组转换为一个RoaringBitmap。

RB_TO_ARRAY

RoaringBitmap转换为整型数组,并对数组元素从小到大进行排序。

RB_CARDINALITY

计算RoaringBitmap的基数值。

RB_AND

计算两个RoaringBitmap的交集。

说明

rb_and_null2empty函数也支持计算两个RoaringBitmap的交集,且用法与RB_AND函数一致。

RB_OR

计算两个RoaringBitmap的并集。

说明

rb_or_null2empty函数也支持计算两个RoaringBitmap的并集,且用法与RB_OR函数一致。

RB_XOR

计算两个RoaringBitmap的异或结果。

说明

rb_xor_null2empty函数也支持计算两个RoaringBitmap的异或结果,且用法与RB_XOR函数一致。

RB_ANDNOT

计算两个RoaringBitmap的补集。

说明

rb_andnot_null2empty函数也支持计算两个RoaringBitmap的补集,且用法与RB_ANDNOT函数一致。

RB_AND_CARDINALITY

计算两个RoaringBitmap的交集的基数。

说明

rb_and_null2empty_cardinality函数也支持计算两个RoaringBitmap的交集的基数,且用法与RB_AND_CARDINALITY函数一致。

RB_OR_CARDINALITY

计算两个RoaringBitmap的并集的基数。

说明

rb_or_null2empty_cardinality函数也支持计算两个RoaringBitmap的并集的基数,且用法与RB_OR_CARDINALITY函数一致。

RB_XOR_CARDINALITY

计算两个RoaringBitmap的异或结果的基数。

说明

rb_xor_null2empty_cardinality函数也支持计算两个RoaringBitmap的异或结果的基数,且用法与RB_XOR_CARDINALITY函数一致。

RB_ANDNOT_CARDINALITY

计算两个RoaringBitmap的补集的基数。

说明

rb_andnot_null2empty_cardinality函数也支持计算两个RoaringBitmap的补集的基数,且用法与RB_ANDNOT_CARDINALITY函数一致。

RB_EQUAL

判断两个RoaringBitmap是否相等。

RB_NOT_EQUAL

判断两个RoaringBitmap是否不相等。

RB_CONTAINS

判断第一个RoaringBitmap是否包含第二个RoaringBitmap。

RB_INTERSECT

判断两个RoaringBitmap是否相交。

RB_IS_EMPTY

判断RoaringBitmap是否为空。

RB_MAXIMUM

获取RoaringBitmap中的最大值。

RB_MINIMUM

获取RoaringBitmap中的最小值。

RB_RANGE

获取[start, end)范围内RoaringBitmap的新集合。

RB_RANGE_CARDINALITY

获取RoaringBitmap[start, end)范围内新集合的基数。

RB_FILL

获取RoaringBitmap填充[start, end)之后的新集合。

RB_CLEAR

获取RoaringBitmap清除[start, end)之后的新集合。

RB_SERIALIZE

RoaringBitmap序列化成BINARY类型。

RB_DESERIALIZE

BINARY反序列化为64位的RoaringBitmap。

RB_DESERIALIZE_32

BINARY反序列化为32位的RoaringBitmap。

RB_BUILD

  • 命令格式

    roaringbitmap rb_build(array<int|bigint> a)
  • 命令说明

    将整型数组转换为一个RoaringBitmap。

  • 参数说明

    a:必填。ARRAY数组类型,数组中的元素类型可以为INTBIGINT,数组不能为空。

  • 返回值说明

    返回包含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类型数据。

  • 返回值说明

    返回INTBIGINT类型。

  • 示例

    SELECT rb_maximum(rb_build(array(-1, 0, 1, 2)));

    返回结果如下。

    +------------+
    | _c0        |
    +------------+
    | 2          |
    +------------+

RB_MINIMUM

  • 命令格式

    int|bigint rb_minimum(roaringbitmap a)
  • 命令说明

    获取RoaringBitmap中的最小值。

  • 参数说明

    a:必填。RoaringBitmap类型数据。

  • 返回值说明

    返回INTBIGINT类型。

  • 示例

    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反序列化后的64RoaringBitmap。

  • 示例

    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反序列化后的32RoaringBitmap。

  • 示例

    SELECT rb_to_array(rb_deserialize_32(rb_serialize(rb_build(array(1, 2, 3))))); 

    返回结果如下。

    +------------+
    | _c0        |
    +------------+
    | [1,2,3]    |
    +------------+