ビットマップ基数計算関数は、ビットマップデータの基数を計算するために提供されています。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つのビットマップデータに対して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)
この関数の入力パラメータは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)
この関数の入力パラメータはビットマップ列です。
これらのビットマップ列の共通基数を返します。
例:
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