ビットマップ集約関数は、数値型をビットマップ型に集約する、つまりビットマップデータ間の集約演算を提供します。OceanBaseデータベースで現在サポートされているビットマップ集約関数は、rb_build_agg()、rb_or_agg()、rb_and_agg()です。
rb_build_agg
rb_build_agg() 関数は、数値列をビットマップデータに集約します。構文は以下のとおりです:
rb_build_agg(values)
入力パラメータ values (UINT64) は、集約ビットマップデータを構築するための数値列です。OceanBaseがサポートする有効な値の範囲は [0, UINT64_MAX] です。ただし、PGとの互換性のため、[INT32_MIN,0) の範囲の負の整数の入力もサポートしています。出力時には、負の整数はUINT32の値に変換して出力されます。例えば、入力が -1 の場合、出力は 4294967295 となります。
この関数は現在、整数型の入力のみをサポートしており、非整数型の入力はサポートしていません。サポートされていない型を指定した場合はエラーが発生します。文字列型の場合は、整数型に変換してから入力することができます。
例:
CREATE TABLE t1(val bigint);
INSERT INTO t1 VALUES(1),(2),(3);
SELECT rb_to_string(rb_build_agg(val)) FROM t1;
+---------------------------------+
| rb_to_string(rb_build_agg(val)) |
+---------------------------------+
| 1,2,3 |
+---------------------------------+
1 row in set
rb_or_agg
rb_or_agg() 関数は、ビットマップ列の複数行のデータにOR演算を行い、ビットマップデータに集約します。構文は以下のとおりです:
rb_or_agg(rb_in)
入力パラメータ rb_in は、集約演算を行うビットマップ列です。
例:
CREATE TABLE t2(rb roaringbitmap);
INSERT INTO t2 VALUES (rb_from_string('1,2,3')),(rb_from_string('2,3,4'));
SELECT rb_to_string(rb_or_agg(rb)) FROM t2;
+-----------------------------+
| rb_to_string(rb_or_agg(rb)) |
+-----------------------------+
| 1,2,3,4 |
+-----------------------------+
1 row in set
rb_and_agg
rb_and_agg() 関数は、ビットマップ列の複数行のデータにAND演算を行い、ビットマップデータに集約します。構文は以下のとおりです:
rb_and_agg(rb_in)
入力パラメータ rb_in は、集約演算を行うビットマップ列です。
例:
SELECT rb_to_string(rb_and_agg(rb)) FROM t2;
+------------------------------+
| rb_to_string(rb_and_agg(rb)) |
+------------------------------+
| 2,3 |
+------------------------------+
1 row in set