咆哮するビットマップは、WAH、EWAH、およびConciseなどの従来の圧縮ビットマップを上回る性能を有する圧縮ビットマップです。 いくつかのシナリオでは、轟音ビットマップは、優れた圧縮性能を提供し、従来の圧縮ビットマップよりもほぼ数百倍速いインデックス速度を提供することができます。 インデックス化速度は、非圧縮ビットマップよりもさらに速い。
pg_roaringbitmap拡張子の作成
CREATE EXTENSION if NOT EXISTS roaringbitmap;次のステートメントを実行して、拡張機能のバージョンを表示します。
SELECT extname,extversion FROM pg_extension WHERE extname = 'roaringbitmap';サンプル結果:
extname | extversion
---------------+------------
roaringbitmap | 0.5
(1 row)入力および出力フォーマット
PolarDBは、arrayおよびbytea入力および出力形式のみをサポートします。
Input format
配列:
SELECT roaringbitmap('{1,100,10}'); roaringbitmap ------------------------------------------------ \x3a30000001000000000002001000000001000a006400 (1 row)bytea:
SELECT '\x3a30000001000000000002001000000001000a006400'::roaringbitmap; roaringbitmap ------------------------------------------------ \x3a30000001000000000002001000000001000a006400 (1 row)
Output format
説明デフォルトの出力形式は
byteaです。roaringbitmap.output_formatコマンドを実行して、出力形式を変更できます。配列:
SET roaringbitmap.output_format='array'; SELECT '{1}'::roaringbitmap; roaringbitmap --------------- {1} (1 row)bytea
SET roaringbitmap.output_format='bytea'; SELECT '{1}'::roaringbitmap; roaringbitmap ---------------------------------------- \x3a3000000100000000000000100000000100 (1 row)
テーブルの作成
CREATE TABLE t1 (id integer, bitmap roaringbitmap);整数配列からビットマップを作成する
INSERT INTO t1 SELECT 1,rb_build(ARRAY[1,2,3,4,5,6,7,8,9,200]);
INSERT INTO t1 SELECT 2,rb_build_agg(e) FROM generate_series(1,100) e;ビットマップ計算関数
ビットマップ計算関数は、OR、AND、XOR、およびANDNOTを含みます。
SELECT roaringbitmap('{1,2,3}') | roaringbitmap('{3,4,5}');
SELECT roaringbitmap('{1,2,3}') & roaringbitmap('{3,4,5}');
SELECT roaringbitmap('{1,2,3}') # roaringbitmap('{3,4,5}');
SELECT roaringbitmap('{1,2,3}') - roaringbitmap('{3,4,5}');ビットマップ集計関数Bitmap aggregate functions
ビットマップ集合関数は、OR、AND、XOR、およびBUILDを含みます。
SELECT rb_or_agg(bitmap) FROM t1;
SELECT rb_and_agg(bitmap) FROM t1;
SELECT rb_xor_agg(bitmap) FROM t1;
SELECT rb_build_agg(e) FROM generate_series(1,100) e;ビットマップ基数計算関数
SELECT rb_cardinality('{1,2,3}');ビットマップを整数配列に変換する
SELECT rb_to_array(bitmap) FROM t1 WHERE id = 1;ビットマップを整数のセットに変換する
SELECT unnest(rb_to_array('{1,2,3}'::roaringbitmap));または
SELECT rb_iterate('{1,2,3}'::roaringbitmap);操作
演算子 | 入力 | 出力 | 説明 | 例 | 結果 |
& | roaringbitmap,roaringbitmap | roaringbitmap | ビット単位のAND演算子 | roaringbitmap('{1,2,3}') & roaringbitmap('{3,4,5}') | {3} |
| | roaringbitmap,roaringbitmap | roaringbitmap | ビット単位のOR演算子 | roaringbitmap('{1,2,3}') | roaringbitmap('{3,4,5}') | {1,2、3,4、5} |
| | roaringbitmap,integer | roaringbitmap | とどろくビットマップに要素を追加します。 | roaringbitmap('{1,2,3}') | 6 | {1,2,3,6} |
| | 整数, roaringbitmap | roaringbitmap | とどろくビットマップに要素を追加します。 | 6 | roaringbitmap('{1,2,3}') | {1,2,3,6} |
# | roaringbitmap,roaringbitmap | roaringbitmap | ビット単位の排他的OR演算子 | roaringbitmap('{1,2,3}') # roaringbitmap('{3,4,5}') | {1,2,4,5} |
<< | roaringbitmap,bigint | roaringbitmap | ビット単位の左シフト | roaringbitmap('{1,2,3}') << 2 | {0,1} |
>> | roaringbitmap,bigint | roaringbitmap | ビット単位の右シフト | roaringbitmap('{1,2,3}') >> 3 | {4,5,6} |
- | roaringbitmap,roaringbitmap | roaringbitmap | オフセット演算子 | roaringbitmap('{1,2,3}') - roaringbitmap('{3,4,5}') | {1,2} |
- | roaringbitmap,integer | roaringbitmap | 轟音ビットマップから要素を削除します | roaringbitmap('{1,2,3}') - 3 | {1,2} |
@> | roaringbitmap,roaringbitmap | bool | 含まれている演算子 | roaringbitmap('{1,2,3}') @> roaringbitmap('{3,4,5}') | f |
@> | roaringbitmap,integer | bool | 含まれている演算子 | roaringbitmap('{1,2,3,4,5}') @> 3 | t |
roaringbitmap,roaringbitmap | bool | 含まれている演算子 | roaringbitmap('{1,2,3}') @> 4 | f | |
整数, roaringbitmap | bool | 含まれている演算子 | 3 @> roaringbitmap('{1,2,3,4,5}') | t | |
&& | roaringbitmap,roaringbitmap | bool | 論理AND演算子 | roaringbitmap('{1,2,3}') && roaringbitmap('{3,4,5}') | t |
= | roaringbitmap,roaringbitmap | bool | 等式演算子 | roaringbitmap('{1,2,3}') = roaringbitmap('{3,4,5}') | f |
<> | roaringbitmap,roaringbitmap | bool | 等しくない演算子 | roaringbitmap('{1,2,3}') <> roaringbitmap('{3,4,5}') | t |
機能関数
関数 | 入力 | 出力 | 説明 | 例 | 結果 |
rb_build | integer[] | roaringbitmap | 整数配列から轟音ビットマップを作成する | rb_build('{1,2,3,4,5}') | {1,2、3,4、5} |
rb_index | roaringbitmap,integer | bigint | このroaringbitmapの要素の0ベースのインデックスを返します。 | rb_index('{1,2,3}',3) | 2 |
rb_cardinality | roaringbitmap | bigint | roaringbitmapのカーディナリティを返します。 | rb_cardinality('{1,2,3,4,5}') | 5 |
rb_and_cardinality | roaringbitmap,roaringbitmap | bigint | 2つのroaringbitmapのANDのカーディナリティを返す | rb_and_cardinality('{1,2,3}',rb_build('{3,4,5}')) | 1 |
rb_or_cardinality | roaringbitmap,roaringbitmap | bigint | 2つのroaringbitmapのORのカーディナリティを返します | rb_or_cardinality('{1,2,3}','{3,4,5}') | 5 |
rb_xor_cardinality | roaringbitmap,roaringbitmap | bigint | 2つのroaringbitmapのXORのカーディナリティを返します | rb_xor_cardinality('{1,2,3}','{3,4,5}') | 4 |
rb_andnot_cardinality | roaringbitmap,roaringbitmap | bigint | 2つのroaringbitmapのANDNOTのカーディナリティを返します | rb_andnot_cardinality('{1,2,3}','{3,4,5}') | 2 |
rb_is_empty | roaringbitmap | Boolean | roaringbitmapが空かどうかを確認します。 | rb_is_empty('{1,2,3,4,5}') | f |
rb_fill | roaringbitmap,range_start bigint,range_end bigint | roaringbitmap | 指定された範囲を埋める (range_endは含まない) | rb_fill('{1,2,3}',5,7) | {1,2、3,5、6} |
rb_clear | roaringbitmap,range_start bigint,range_end bigint | roaringbitmap | 指定された範囲をクリアします (range_endは含まれません) | rb_clear('{1,2,3}',2,3) | {1,3} |
rb_flip | roaringbitmap,range_start bigint,range_end bigint | roaringbitmap | 指定された範囲を負にします (range_endは含まれません) 。 | rb_flip('{1,2,3}',2,10) | {1,4、5,6、7,8、9} |
rb_range | roaringbitmap,range_start bigint,range_end bigint | roaringbitmap | 指定した範囲を持つ新しいセットを返す (range_endは含まない) | rb_range('{1,2,3}',2,3) | {2} |
rb_range_cardinality | roaringbitmap,range_start bigint,range_end bigint | bigint | 指定された範囲のカーディナリティを返します (range_endは含まれません) 。 | rb_range_cardinality('{1,2,3}',2,3) | 1 |
rb_min | roaringbitmap | integer | roaringbitmapで最小のオフセットを返します。 ビットマップが空の場合はNULLを返す | rb_min('{1,2,3}') | 1 |
rb_max | roaringbitmap | integer | roaringbitmapで最大のオフセットを返します。 ビットマップが空の場合はNULLを返す | rb_max('{1,2,3}') | 3 |
rb_rank | roaringbitmap,integer | bigint | 指定したオフセット以下の要素数を返します。 | rb_rank('{1,2,3}',3) | 3 |
rb_jaccard_dist | roaringbitmap,roaringbitmap | ダブル精度 | 2つのビットマップのjaccard距離 (またはJaccard類似度係数) を返します。 | rb_jaccard_dist('{1,2,3}','{3,4}') | 0.25 |
rb_select | roaringbitmap,bitset_limit bigint,bitset_offset bigint=0,reverse boolean=false,range_start bigint=0,range_end bigint=4294967296 | roaringbitmap | range [range_start,range_end) 間のビットマップのサブセット [bitset_offset,bitset_offset + bitset_limit) を返す | rb_select('{1,2,3,4,5,6,7,8,9}',5,2) | {3,4、5,6、7} |
rb_to_array | roaringbitmap | integer[] | roaringbitmapを整数配列に変換する | rb_to_array(roaringbitmap('{1,2,3}')) | {1,2,3} |
rb_iterate | roaringbitmap | 整数のセット | roaringbitmapデータから整数のセットを返します。 | SELECT rb_iterate (rb_build('{1,2,3}')) | 123 |
集計関数
関数 | 入力 | 出力 | 説明 | 例 | 結果 |
rb_build_agg | integer | roaringbitmap | 整数セットからroaringbitmapを作成する | select rb_build_agg(id) from (values (1),(2),(3)) t(id) | {1,2,3} |
rb_or_agg | roaringbitmap | roaringbitmap | およびroaringbitmapセットからの集計計算 | select rb_or_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}')) ) t(bitmap) | {1,2,3,4} |
rb_and_agg | roaringbitmap | roaringbitmap | およびroaringbitmapセットからの集計計算 | select rb_and_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}')) ) t(bitmap) | {2,3} |
rb_xor_agg | roaringbitmap | roaringbitmap | roaringbitmapセットからのXOR集計計算 | select rb_xor_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}'))) ) t(bitmap) | {1,4} |
rb_or_cardinality_agg | roaringbitmap | bigint | OR roaringbitmapセットから計算を集計し、カーディナリティを返します。 | select rb_or_cardinality_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}'))) ) t(bitmap) | 4 |
rb_and_cardinality_agg | roaringbitmap | bigint | そしてroaringbitmapセットから計算を集計し、カーディナリティを返します | select rb_and_cardinality_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}'))) ) t(bitmap) | 2 |
rb_xor_cardinality_agg | roaringbitmap | bigint | roaringbitmapセットからのXOR集計計算、カーディナリティを返します | select rb_xor_cardinality_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}'))) ) t(bitmap) | 2 |