ビットマップカードナリティ計算関数は、ビットマップデータのカードナリティを計算します。OceanBaseデータベースで現在サポートされているビットマップカードナリティ計算関数には、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
rb_and_cardinality と rb_and_null2empty_cardinality
rb_and_cardinality() 関数は、2つのビットマップデータをAND演算した後の新しいビットマップデータのカードナリティを返します。構文は以下のとおりです:
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
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
rb_and_null2empty_cardinality() 関数の計算ロジックは rb_and_cardinality() と同じですが、NULL入力を空のビットマップデータと見なします。
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
rb_or_cardinality と rb_or_null2empty_cardinality
rb_or_cardinality() 関数は、2つのビットマップデータをOR演算した後の新しいビットマップデータのカードナリティを返します。構文は以下のとおりです:
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
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
rb_or_null2empty_cardinality() 関数の計算ロジックは rb_or_cardinality() と一致しますが、NULL入力を空のビットマップデータと見なします。
rb_xor_cardinality
rb_xor_cardinality() 関数は、2つのビットマップデータに対して排他的論理和を計算した後の新しいビットマップデータのカードナリティを返します。構文は以下のとおりです:
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
rb_andnot_cardinalityとrb_andnot_null2empty_cardinality
rb_andnot_cardinality() 関数は、2つのビットマップデータに対してNAND演算を行った後の新しいビットマップデータのカードナリティを返します。構文は以下のとおりです:
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
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
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
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