ビットマップ出力関数は、ビットマップデータの出力形式を選択するために使用されます。例えば、文字列としてビットマップデータの各要素を順番に出力し、カンマで区切ることができます。OceanBaseデータベースが現在サポートしているビットマップ出力関数には、rb_to_varbinary()、rb_to_string()、および rb_to_array() が含まれます。
rb_to_varbinary
rb_to_varbinary()関数は、ビットマップデータをvarbinary形式で出力するために使用されます。構文は以下のとおりです:
rb_to_varbinary(rb, [format])
formatパラメータはオプションであり、現在はroaringのみサポートしています。設定後、出力されるバイナリデータ型はBITMAP_32とBITMAP_64の2種類の互換フォーマットのみとなります。formatを設定しない場合、デフォルトの出力形式はOceanBaseタイプのvarbinary形式(BITMAP_32とBITMAP_6を含む7種類のサブタイプ)となります。
例:
SELECT rb_to_varbinary((1,2,3));
+------------------------------------------------------------------------------------+
| rb_to_varbinary(rb_from_string('1,2,3')) |
+------------------------------------------------------------------------------------+
| 0x010303010000000200000003000000 |
+------------------------------------------------------------------------------------+
1 row in set
SELECT rb_to_varbinary((1,2,3),'roaring');
+----------------------------------------------------------------------------------------------------------+
| rb_to_varbinary(rb_from_string('1,2,3'), 'roaring') |
+----------------------------------------------------------------------------------------------------------+
| 0x01053A300000010000000000020010000000010002000300 |
+----------------------------------------------------------------------------------------------------------+
1 row in set
rb_to_string
rb_to_string()関数は、ビットマップデータの各要素を文字列形式で順番に出力し、それぞれの要素をカンマで区切ります。要素の出力形式はUINT64であり、最大出力可能な要素数は1000000です。構文は以下のとおりです:
rb_to_string(rb)
例:
SELECT rb_to_string(rb_from_string('1,2,3'));
+---------------------------------------+
| rb_to_string(rb_from_string('1,2,3')) |
+---------------------------------------+
| 1,2,3 |
+---------------------------------------+
1 row in set
SELECT rb_to_string(x'010101000000');
+-------------------------------+
| rb_to_string(x'010101000000') |
+-------------------------------+
| 1 |
+-------------------------------+
1 row in set
rb_iterate
rb_iterate()関数は、ビットマップデータの値を1列複数行に展開します。この関数はSELECTの後でもFROMの後でも使用できます。
SELECTの後で使用する場合、複数のrb_iterate()関数が使用されると、複数の列が返され、列名はデフォルトでrb_iterateになります。返される行数は最大行数であり、列数が少ない場合は、余分な行にNULL値が入力されます。FROMの後で使用する場合、複数のrb_iterate()関数が使用されると、返されたテーブルに対して順番にJOIN操作を実行したものと同じになり、返される行数はデカルト積になります。構文は以下のとおりです:
table = rb_iterate(rb) [AS] [alias]
パラメータの説明は以下のとおりです:
| パラメータ | データ型 | デフォルト値 | 説明 | 必須 |
|---|---|---|---|---|
| rb | RoaringBitmap | 出力対象のビットマップデータ。 | はい | |
| alia | String | rb_iterate | エイリアス。ASキーワードを付けることも、付けないこともできます。 | いいえ |
戻り値はuint64型の1列複数行のテーブルです。
例:
SELECT rb_iterate(rb_from_string('1,2,3'));
+------------+
| rb_iterate |
+------------+
| 1 |
| 2 |
| 3 |
+------------+
3 rows in set
FROMの後に複数のrb_iterate()関数を使用する例:
SELECT * FROM rb_iterate(rb_from_string('1,2,3')) AS t1, rb_iterate(rb_from_string('11,22')) AS t2;
+------+------+
| t1 | t2 |
+------+------+
| 1 | 11 |
| 1 | 22 |
| 2 | 11 |
| 2 | 22 |
| 3 | 11 |
| 3 | 22 |
+------+------+
6 rows in set
SELECTの後に複数のrb_iterate()関数を使用すると、複数の列が返されます。例:
SELECT rb_iterate(rb_from_string('1,2,3')), rb_iterate(rb_from_string('11,22'));
+------------+------------+
| rb_iterate | rb_iterate |
+------------+------------+
| 1 | 11 |
| 2 | 22 |
| 3 | NULL |
+------------+------------+
3 rows in set
CREATE TABLE t1 (id int, rb roaringbitmap, rb2 roaringbitmap);
INSERT INTO t1 VALUES (1, rb_from_string('1,2,3'), rb_from_string('33,44')),(2, rb_from_string('3,4'), rb_from_string('44,55,66'));
SELECT rb_iterate(rb) FROM t1;
+------------+
| rb_iterate |
+------------+
| 1 |
| 2 |
| 3 |
| 3 |
| 4 |
+------------+
5 rows in set
rb_to_array
rb_to_array()関数は、ビットマップデータを配列形式で出力するために使用されます。構文は以下のとおりです:
rb_to_array(rb)
この関数の入力パラメータはビットマップデータです。
戻り値は順序付き配列です。
例:
SELECT rb_to_array(rb_from_string('0,1,2,3,4,5,6,7,8,9,123789,68719476736'));
+-----------------------------------------------------------------------+
| rb_to_array(rb_from_string('0,1,2,3,4,5,6,7,8,9,123789,68719476736')) |
+-----------------------------------------------------------------------+
| [0,1,2,3,4,5,6,7,8,9,123789,68719476736] |
+-----------------------------------------------------------------------+
1 row in set