ビットマップ基数計算関数は、ビットマップデータの基数を計算する機能を提供します。現在、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() と同じですが、空の入力を空のビットマップデータとして扱います。
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() と同じですが、空の入力を空のビットマップデータとして扱います。
rb_xor_cardinality
rb_xor_cardinality() 関数は、2 つのビットマップデータの XOR 演算結果となる新しいビットマップデータの基数を返します。構文は次のとおりです。
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 つのビットマップデータの AND NOT 演算結果となる新しいビットマップデータの基数を返します。構文は次のとおりです。
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)
この関数の入力パラメーターは 1 つのビットマップ列です。
これらのビットマップ列の和集合の基数を返します。
例:
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)
この関数の入力パラメーターは 1 つのビットマップ列です。
これらのビットマップ列の積集合の基数を返します。
例:
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