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

AnalyticDB:roaringbitmap

最終更新日:Sep 27, 2024

とどろくビットマップは、効率的なデータ構造である。 ビットマップと比較して、轟音ビットマップは、より高い処理性能を提供し、より少ないメモリリソースを使用する。 咆哮するビットマップは、交差、和集合、差分集合演算、重複排除などの計算シナリオに適しています。 ほとんどの場合、とどろくビットマップは、ユーザープロファイリング、パーソナライズされた推奨、および精密マーケティングに使用されます。

背景情報

ビットマップは、値0と1で構成される一般的なデータ構造です。 各列に可能なすべての値を格納するために個別のビットマップが作成されます。 各ビットは、データ行が対応する列に値を有するかどうかを示す。 従来のビットマップは、大量のメモリリソースを使用する。 圧縮ビットマップの使用を推奨します。 轟音ビットマップは、さまざまなビッグデータプラットフォーム上のほぼすべての一般的なプログラミング言語で使用される効率的な圧縮ビットマップです。

概要

轟音ビットマップでは、各32ビット整数は、16の最上位ビットと16の最下位ビットを含む。 上位16ビットは複数のチャンクに格納され、下位16ビットはコンテナに格納される。 各チャンクは2 ^ 16までの整数を格納できます。 轟音ビットマップは、コンテナを動的に拡張するアレイに格納し、16の最上位ビットに基づいてコンテナをソートする。 最上位16ビットとバイナリ検索方法を使用して、コンテナをすばやく検索できます。 データ特性に基づいてデータを格納するには、次の種類のコンテナを使用します。

  • Array container: 分散データと非連続データを格納します。 配列コンテナーに格納できる整数は4,096個未満です。

  • ビットマップコンテナ: 多数の連続した整数を格納します。 ビットマップコンテナは、4,096以上の整数を格納できます。

  • Run container: 多数の連続して増加する値を格納します。 実行コンテナーは、コンテナーのサイズが配列コンテナーのサイズおよびビットマップコンテナーのサイズよりも小さい場合にのみ使用できます。  

Roaringビットマップは、前述のストレージ構造を使用してデータ圧縮率を大幅に改善し、特定の値を迅速に取得します。 Roaringビットマップは、3つのタイプのコンテナ間のAND、OR、XORなどのビットマップ演算をサポートします。 轟音ビットマップは、優れたストレージとコンピューティング性能を提供します。

とどろくビットマップの詳細については、『GitHub』をご参照ください。

使用上の注意

V6.3.8.9以降のAnalyticDB for PostgreSQLインスタンスのみが轟音ビットマップをサポートしています。 AnalyticDB For PostgreSQLインスタンスのマイナーバージョンを表示する方法については、「インスタンスのマイナーバージョンの表示」をご参照ください。

轟音ビットマップを使用する

Install the extension

AnalyticDB for PostgreSQLインスタンスで轟音ビットマップを使用する前に、インスタンスの [拡張機能] ページにroaringbitmap拡張機能をインストールします。 詳細については、「拡張機能のインストール、更新、およびアンインストール」をご参照ください。

テーブルの作成

轟音のビットマップデータを格納するために使用されるテーブルを作成します。

CREATE TABLE t1 (id integer, bitmap roaringbitmap);

データの挿入

roaringビットマップデータを挿入するには、rb_build関数を使用します。

-- Set the bit values at specific positions in an array to 1. 
INSERT INTO t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
-- Set the bit values of multiple elements to 1 and aggregate the bit values into a roaring bitmap.  
INSERT INTO t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;

クエリデータ

1に設定されているビットの下付き文字を取得します。

SELECT RB_ITERATE(bitmap) FROM t1 WHERE id = 1;

ビットマップ操作のサンプル:

  • OR、AND、XOR、ANDNOTなどのビットマップ操作を実行します。

    SELECT RB_OR(a.bitmap,b.bitmap) FROM (SELECT bitmap FROM t1 WHERE id = 1) AS a,(SELECT bitmap FROM t1 WHERE id = 2) AS b;
  • 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;
  • 轟音ビットマップのカーディナリティを計算します。 カーディナリティは、轟音ビットマップにおいて1に設定されるビットの数である。

    SELECT RB_CARDINALITY(bitmap) FROM t1;

ビットマップ計算関数

関数

入力

出力

説明

rb_build

integer[]

roaringbitmap

整数配列から轟音ビットマップを作成します。

rb_build('{1,2,3,4,5}')

rb_and

roaringbitmap,roaringbitmap

roaringbitmap

AND演算を実行します。

rb_and(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or

roaringbitmap,roaringbitmap

roaringbitmap

OR演算を実行します。

rb_or(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_xor

roaringbitmap,roaringbitmap

roaringbitmap

XOR演算を実行します。

rb_xor(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot

roaringbitmap,roaringbitmap

roaringbitmap

ANDNOT操作を実行します。

rb_andnot(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_cardinality

roaringbitmap

integer

カーディナリティを計算します。

rb_cardinality(rb_build('{1,2,3,4,5}'))

rb_and_cardinality

roaringbitmap,roaringbitmap

integer

2つの轟音ビットマップに対してAND演算を実行してカーディナリティを計算します。

rb_and_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or_cardinality

roaringbitmap,roaringbitmap

integer

2つの轟音ビットマップに対してOR演算を実行して濃度を計算します。

rb_or_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_xor_cardinality

roaringbitmap,roaringbitmap

integer

2つの轟音ビットマップに対してXOR演算を実行することによって濃度を計算します。

rb_xor_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot_cardinality

roaringbitmap,roaringbitmap

integer

2つの轟音ビットマップに対してANDNOT演算を実行してカーディナリティを計算します。

rb_andnot_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_is_empty

roaringbitmap

Boolean

轟音ビットマップが空かどうかをチェックします。

rb_is_empty(rb_build('{1,2,3,4,5}'))

rb_equals

roaringbitmap,roaringbitmap

Boolean

2つの轟音ビットマップが同じかどうかをチェックします。

rb_equals(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_intersect

roaringbitmap,roaringbitmap

Boolean

2つの轟音ビットマップが交差するかどうかを確認します。

rb_intersect(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_remove

roaringbitmap,integer

roaringbitmap

轟音ビットマップから特定のオフセットを削除します。

rb_remove(rb_build('{1,2,3}'),3)

rb_flip

roaringbitmap,integer

roraingbitmap

轟音ビットマップの特定のオフセットを反転します。

rb_flip(rb_build('{1,2,3}'),3)

rb_flip

roaringbitmap,integer,integer

roaringbitmap

轟音ビットマップの特定のオフセット範囲を反転します。

rb_flip(rb_build('{1,2,3}'),2,3)

rb_minimum

roaringbitmap

integer

轟音ビットマップの最小オフセットを返します。 轟音ビットマップが空の場合、-1が返されます。

rb_minimum(rb_build('{1,2,3}'))

rb_maximum

roaringbitmap

integer

轟音ビットマップで最大のオフセットを返します。 轟音ビットマップが空の場合、0が返されます。

rb_maximum(rb_build('{1,2,3}'))

rb_rank

roaringbitmap,integer

integer

轟音ビットマップ内の特定のオフセット以下の要素の数を返します。

rb_rank(rb_build('{1,2,3}'),3)

rb_iterate

roaringbitmap

setof整数

轟音ビットマップからのオフセットのリストを返します。

rb_iterate(rb_build('{1,2,3}'))

rb_contains

roaringbitmap, integer

bool

轟音ビットマップに特定のオフセットが含まれているかどうかをチェックします。

rb_contains(rb_build('{1,2,3}'),1)

rb_contains

roaringbitmap,integer,integer

bool

轟音ビットマップに特定のオフセット範囲が含まれているかどうかを確認します。

rb_contains(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_contains

roaringbitmap, roaringbitmap

bool

轟音ビットマップに別の轟音ビットマップが含まれているかどうかをチェックします。

 rb_contains(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_becentained

整数, roaringbitmap

bool

特定のオフセットが轟音ビットマップに含まれているかどうかをチェックします。

rb_becontained(1, rb_build('{1,2,3}'))

rb_becentained

roaringbitmap,roaringbitmap

bool

轟音ビットマップが別の轟音ビットマップに含まれているかどうかをチェックします。

rb_becontained(rb_build('{1}'), rb_build('{1,2,3}'))

rb_add

roaringbitmap, integer

roaringbitmap

特定のオフセットを轟音ビットマップに追加します。

rb_add(rb_build('{1,2,3,4}'), 5)

rb_add_2

整数, roaringbitmap

roaringbitmap

roaringbitmapに特定のオフセットを追加します。

rb_add_2(5, rb_build('{1,2,3,4}'))

rb_add

roaringbitmap,integer, integer

roaringbitmap

特定のオフセット範囲を轟音ビットマップに追加します。

rb_add_2(5, rb_build('{1,2,3,4}'))

rb_remove

roaringbitmap,integer, integer

roaringbitmap

轟音ビットマップから特定のオフセットを削除します。

rb_remove(rb_build('{1,2,3,4,6,7,8}'), 6,8)

rb_jaccard_index

roaringbitmap,roaringbitmap

float8

2つの轟音ビットマップ間のJaccard類似係数を計算します。

rb_remove(rb_build('{1,2,3,4,6,7,8}'), 6,8)

rb_to_array

roaringbitmap

integer[]

とどろくビットマップを配列に変換します。

rb_jaccard_index(rb_build('{1,2,3,4}'), rb_build('{1,2}'))

rb_iterate_decrement

roaringbitmap

integer[]

轟音ビットマップからのオフセットのリストを降順で返します。

rb_iterate_decrement(rb_build('{1,2,3,4}'))

ビットマップ集計関数Bitmap aggregate functions

関数

入力

出力

説明

rb_build_agg

integer

roaringbitmap

オフセットのグループから轟音ビットマップを作成します。

rb_build_agg(1)

rb_or_agg

roaringbitmap

roaringbitmap

OR集計操作を実行します。

rb_or_agg(rb_build('{1,2,3}'))

rb_and_agg

roaringbitmap

roaringbitmap

AND集計操作を実行します。

rb_and_agg(rb_build('{1,2,3}'))

rb_xor_agg

roaringbitmap

roaringbitmap

XOR集計演算を実行します。

rb_xor_agg(rb_build('{1,2,3}'))

rb_or_cardinality_agg

roaringbitmap

integer

2つの轟音ビットマップに対してOR集計演算を実行して濃度を計算します。

rb_or_cardinality_agg(rb_build('{1,2,3}'))

rb_and_cardinality_agg

roaringbitmap

integer

2つの轟音ビットマップに対してAND集計演算を実行して濃度を計算します。

rb_and_cardinality_agg(rb_build('{1,2,3}'))

rb_xor_cardinality_agg

roaringbitmap

integer

2つの轟音ビットマップに対してXOR集計演算を実行して濃度を計算します。

rb_xor_cardinality_agg(rb_build('{1,2,3}'))

演算子

演算子

正しい

出力

説明

&

roaringbitmap

roaringbitmap

roaringbitmap

2つの轟音ビットマップに対してAND演算を実行します。

rb_build('{1,2,3}') & rb_build('{1,2,4}')

|

roaringbitmap

roaringbitmap

roaringbitmap

2つの轟音ビットマップに対してOR演算を実行します。

rb_build('{1,2}') | rb_build('{1,3}')

#

roaringbitmap

roaringbitmap

roaringbitmap

2つの轟音ビットマップに対してXOR演算を実行します。

rb_build('{1,2}') # rb_build('{1,3}')

~

roaringbitmap

roaringbitmap

roaringbitmap

2つの轟音ビットマップに対してANDNOT操作を実行します。

rb_build('{2,3}') ~ rb_build('{2,4}')

+

roraingbitmap

integer

roaringbitmap

特定のオフセットを轟音ビットマップに追加します。

rb_build('{2,3}') + 1

-

roraingbitmap

integer

roaringbitmap

轟音ビットマップから特定のオフセットを削除します。

rb_build('{1,2,3}') - 1

=

roaringbitmap

roaringbitmap

Boolean

2つの轟音ビットマップが同じかどうかをチェックします。

rb_build('{2,3}') = rb_build('{2,3}')

<>

roaringbitmap

roaringbitmap

Boolean

2つの轟音ビットマップが異なるかどうかを確認します。

rb_build('{2,3}') <> rb_build('{1,2,3}')

&&

roaringbitmap

roaringbitmap

Boolean

2つの轟音ビットマップが交差するかどうかを確認します。

rb_build('{2,3}') && rb_build('{3,4}')

@>

roaringbitmap

roaringbitmap

Boolean

轟音ビットマップに別の轟音ビットマップが含まれているかどうかをチェックします。

rb_build('{2,3}') @> rb_build('{2}')

@>

roaringbitmap

integer

Boolean

轟音ビットマップに特定のオフセットが含まれているかどうかをチェックします。

rb_build('{2,3}') @> 2

<@

roaringbitmap

roaringbitmap

Boolean

轟音ビットマップが別の轟音ビットマップに含まれているかどうかをチェックします。

rb_build('{2,3}') <@ rb_build('{1,2,3}')

<@

integer

roaringbitmap

Boolean

特定のオフセットが轟音ビットマップに含まれているかどうかをチェックします。

rb_build('{2,3}') <@ rb_build('{3}')