ビットマップ集計関数は、数値型をビットマップ型、すなわちビットマップデータ間の集計演算に集約する機能を提供します。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