すべてのプロダクト
Search
ドキュメントセンター

PolarDB:pg_roaringbitmap

最終更新日:Nov 20, 2024

咆哮するビットマップは、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