位图基数计算函数
位 图基数计算函数提供了位图数据基数的计算。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)
参数 rb1 和 rb2 的顺序不影响结果。
示例如下:
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)
参数 rb1 和 rb2 的顺序不影响结果。
示例如下:
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)
参数 rb1 和 rb2 的顺序不影响结果。
示例如下:
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)