跳到主要内容

位图基数计算函数

位图基数计算函数提供了位图数据基数的计算。seekdb 当前所支持的位图基数计算函数包括 rb_cardinality()rb_and_cardinality()rb_or_cardinality()rb_xor_cardinality()rb_andnot_cardinality()rb_and_null2empty_cardinality()rb_or_null2empty_cardinality()rb_andnot_null2empty_cardinality()rb_or_cardinality_agg()rb_and_cardinality_agg()

rb_cardinality

rb_cardinality() 函数返回输入位图数据的基数。语法如下:

rb_cardinality(rb)

示例如下:

SELECT rb_cardinality(rb_from_string('1,2,3'));
+-----------------------------------------+
| rb_cardinality(rb_from_string('1,2,3')) |
+-----------------------------------------+
| 3 |
+-----------------------------------------+
1 row in set (0.001 sec)

rb_and_cardinality 和 rb_and_null2empty_cardinality

rb_and_cardinality() 函数返回两个位图数据做与计算后,得到的新位图数据的基数。语法如下:

rb_and_cardinality(rb1, rb2)

参数 rb1rb2 的顺序不影响结果。

示例如下:

SELECT rb_and_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4'));
+----------------------------------------------------------------------+
| rb_and_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4')) |
+----------------------------------------------------------------------+
| 2 |
+----------------------------------------------------------------------+
1 row in set (0.001 sec)
SELECT rb_and_cardinality(rb_from_string('1,2,3'), NULL);
+---------------------------------------------------+
| rb_and_cardinality(rb_from_string('1,2,3'), NULL) |
+---------------------------------------------------+
| NULL |
+---------------------------------------------------+
1 row in set (0.001 sec)

rb_and_null2empty_cardinality() 函数计算逻辑与 rb_and_cardinality() 一致,但把空输入视为空的位图数据。

SELECT rb_and_null2empty_cardinality(rb_from_string('1,2,3'), NULL);
+--------------------------------------------------------------+
| rb_and_null2empty_cardinality(rb_from_string('1,2,3'), NULL) |
+--------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------+
1 row in set (0.001 sec)

rb_or_cardinality 和 rb_or_null2empty_cardinality

rb_or_cardinality() 函数返回两个位图数据做或计算后,得到的新位图数据的基数。语法如下:

rb_or_cardinality(rb1, rb2)

参数 rb1rb2 的顺序不影响结果。

示例如下:

SELECT rb_or_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4'));
+---------------------------------------------------------------------+
| rb_or_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4')) |
+---------------------------------------------------------------------+
| 4 |
+---------------------------------------------------------------------+
1 row in set (0.001 sec)
SELECT rb_or_null2empty_cardinality(rb_from_string('1,2,3'), NULL);
+-------------------------------------------------------------+
| rb_or_null2empty_cardinality(rb_from_string('1,2,3'), NULL) |
+-------------------------------------------------------------+
| 3 |
+-------------------------------------------------------------+
1 row in set (0.001 sec)

rb_or_null2empty_cardinality() 函数计算逻辑与 rb_or_cardinality() 一致,但把空输入视为空的位图数据。

rb_xor_cardinality

rb_xor_cardinality() 函数返回两个位图数据做异或计算后,得到的新位图数据的基数。语法如下:

rb_xor_cardinality(rb1, rb2)

参数 rb1rb2 的顺序不影响结果。

示例如下:

SELECT rb_xor_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4'));
+----------------------------------------------------------------------+
| rb_xor_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4')) |
+----------------------------------------------------------------------+
| 2 |
+----------------------------------------------------------------------+
1 row in set (0.001 sec)

rb_andnot_cardinality 和 rb_andnot_null2empty_cardinality

rb_andnot_cardinality() 函数返回两个位图数据做与非计算后,得到的新位图数据的基数。语法如下:

rb_andnot_cardinality(rb1, rb2)

该函数将以参数 rb1 为计算基础,计算其与 rb2 的差,即返回的是位图数据值 rb1 - rb2 的基数。

示例如下:

SELECT rb_andnot_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4'));
+-------------------------------------------------------------------------+
| rb_andnot_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4')) |
+-------------------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------------------+
1 row in set (0.001 sec)
SELECT rb_andnot_null2empty_cardinality(rb_from_string('1,2,3'), NULL);
+-----------------------------------------------------------------+
| rb_andnot_null2empty_cardinality(rb_from_string('1,2,3'), NULL) |
+-----------------------------------------------------------------+
| 3 |
+-----------------------------------------------------------------+
1 row in set (0.001 sec)

rb_andnot_null2empty_cardinality() 函数计算逻辑与 rb_andnot_cardinality() 一致,但把空输入视为空的位图数据。

rb_or_cardinality_agg

rb_or_cardinality_agg() 函数用于计算位图列的并集基数。语法如下:

rb_or_cardinality_agg(rb)

该函数输入参数为一个位图列。

返回这些位图列的并集基数。

示例如下:

CREATE TABLE t1(rb roaringbitmap);

INSERT INTO t1 VALUES (rb_from_string('1,2,3')),(rb_from_string('2,3,4'));

SELECT rb_or_cardinality_agg(rb) FROM t1;
+---------------------------+
| rb_or_cardinality_agg(rb) |
+---------------------------+
| 4 |
+---------------------------+
1 row in set (0.001 sec)

rb_and_cardinality_agg

rb_and_cardinality_agg() 函数用于计算位图列的交集基数。语法如下:

rb_and_cardinality_agg(rb)

该函数输入参数为一个位图列。

返回这些位图列的交集基数。

示例如下:

CREATE TABLE t2(rb roaringbitmap);

INSERT INTO t2 VALUES (rb_from_string('1,2,3')),(rb_from_string('2,3,4'));

SELECT rb_and_cardinality_agg(rb) FROM t2;
+----------------------------+
| rb_and_cardinality_agg(rb) |
+----------------------------+
| 2 |
+----------------------------+
1 row in set (0.001 sec)