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

Hologres:Roaring ビットマップ関数

最終更新日:May 20, 2025

このトピックでは、Roaring ビットマップ関数の入力パラメーターと Hologres での使用方法について説明します。

背景情報

Roaring ビットマップは、複数のビッグデータプラットフォームのさまざまなプログラミング言語で使用される、効率的に圧縮されたビットマップです。超高カーディナリティディメンションに最適であり、重複排除、タグベースのフィルタリング、および時系列データの収集に使用できます。

Roaring ビットマップアルゴリズムは、32 ビット整数を 2 の 16 乗個のブロック(チャンク)に分割します。各ブロックは、整数の上位 16 ビットに対応します。コンテナーには、値の下位 16 ビットが格納されます。Roaring ビットマップは、コンテナーをプライマリインデックスとして動的配列に格納します。コンテナーには、スパースチャンク用の配列コンテナーとデンスチャンク用のビットマップコンテナーの 2 種類があります。配列コンテナーには最大 4,096 個の整数を格納できます。ビットマップコンテナーには 4,096 個を超える整数を格納できます。16

Roaring ビットマップはこのストレージ構造を使用して、特定の値を迅速に取得します。また、2 種類のコンテナー間で AND、OR、XOR などのビット単位の演算も提供します。その結果、Roaring ビットマップは優れたストレージパフォーマンスとコンピューティングパフォーマンスを実現します。

制限事項

Hologres で Roaring ビットマップ関数を使用する場合は、次の制限事項に注意してください。

  • これらの関数は、Hologres V0.10 以降の専用インスタンスでのみサポートされています。

    説明

    インスタンスのバージョンは、Hologres コンソールで確認できます。インスタンスが V0.10 より前の場合、[アップグレードの準備が失敗した場合に返される一般的なエラーメッセージ] を使用するか、Hologres DingTalk グループに参加してフィードバックを提供できます。詳細については、「オンラインサポートを受けるにはどうすればよいですか。」をご参照ください。

  • これらの関数はデフォルトで public スキーマにロードされ、public スキーマにのみロードできます。

  • Hologres V3.1 以後では、64 ビット Roaring ビットマップ (RoaringBitmap64) がサポートされています。一部の Roaring ビットマップ関数は、RoaringBitmap64 型のデータを処理できます。 RoaringBitmap64 型のデータを処理する場合、これらの関数は定数入力パラメーターをサポートしていません。

  • Roaring ビットマップ関数を使用する前に、次の文を実行して拡張機能を有効にする必要があります。この拡張機能はデータベースレベルの関数です。データベースごとに 1 回だけ文を実行する必要があります。新しいデータベースを作成する場合は、文を再度実行する必要があります。

    --拡張機能を作成する
    CREATE EXTENSION roaringbitmap;

    Roaring ビットマップ関数の拡張機能を削除する場合は、次の文を実行します。

    DROP EXTENSION roaringbitmap;
    重要

    DROP EXTENSION <extension_name> CASCADE; 文を使用して拡張機能を削除することはお勧めしません。 CASCADE 文は、指定された拡張機能だけでなく、拡張機能のデータと拡張機能に依存するオブジェクトも削除します。拡張データには、PostGIS データ、Roaring ビットマップデータ、Proxima データ、バイナリログデータ、BSI データが含まれます。オブジェクトには、メタデータ、テーブル、ビュー、サーバーデータが含まれます。

  • Roaring ビットマップを格納するフィールドをビットマップインデックスまたはディクショナリインデックスとして指定することはできません。

  • Roaring ビットマップ列を含むテーブルを作成する場合は、列のデータ型を RoaringBitmap(32 ビット)または RoaringBitmap64(64 ビット)として明示的に指定する必要があります。 2 つのタイプの Roaring ビットマップデータを混在させて計算することはできません。

    -- 32 ビット Roaring ビットマップ列を含むテーブルを作成する
    CREATE TABLE t_rb_32 (
        bucket int,
        x roaringbitmap
    );
    
    -- 64 ビット Roaring ビットマップ列を含むテーブルを作成する
    CREATE TABLE t_rb_64 (
        bucket int,
        x roaringbitmap64
    );
    
    -- 2 つのタイプの Roaring ビットマップデータの混在計算はサポートされておらず、エラーが返されます。
    -- エラー: 演算子が存在しません: roaringbitmap & roaringbitmap64
    SELECT
        a.x & b.x
    FROM
        t_rb_32 a
    JOIN t_rb_64 b ON a.bucket = b.bucket;

演算子

次の演算子は、RoaringBitmap 型と RoaringBitmap64 型のデータの処理をサポートしています。

演算子

入力型

出力型

説明

備考

&

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

入力型と同じ。

AND 演算を実行します。

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

なし

|

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

入力型と同じ。

OR 演算を実行します。

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

なし

RoaringBitmap | RoaringBitmap64, INTEGER

RoaringBitmap | RoaringBitmap64

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

Hologres V1.3.16 以降でのみ、この演算子がサポートされています。

INTEGER, RoaringBitmap | RoaringBitmap64

RoaringBitmap | RoaringBitmap64

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

Hologres V1.3.16 以降でのみ、この演算子がサポートされています。

#

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

入力型と同じ。

XOR 演算を実行します。

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

なし

<<

RoaringBitmap | RoaringBitmap64, BIGINT

RoaringBitmap | RoaringBitmap64

値を指定された桁数だけ左にシフトします。

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

Hologres V1.3.16 以降でのみ、この演算子がサポートされています。

>>

RoaringBitmap | RoaringBitmap64, BIGINT

RoaringBitmap | RoaringBitmap64

値を指定された桁数だけ右にシフトします。

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

Hologres V1.3.16 以降でのみ、この演算子がサポートされています。

-

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

入力型と同じ。

ANDNOT 演算を実行します。

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

Hologres V1.3.16 以降でのみ、この演算子がサポートされています。

RoaringBitmap | RoaringBitmap64, INTEGER

RoaringBitmap | RoaringBitmap64

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

なし

@>

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

BOOLEAN

A に B が含まれているかどうかを確認します。

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

なし

RoaringBitmap | RoaringBitmap64, INTEGER

BOOLEAN

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

なし

<@

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

BOOLEAN

A が B に含まれているかどうかを確認します。

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

なし

integer, RoaringBitmap | RoaringBitmap64

BOOLEAN

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

なし

&&

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

BOOLEAN

A が B と交差するかどうかを確認します。

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

なし

=

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

BOOLEAN

2 つのオブジェクトが等しいかどうかを確認します。

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

なし

<>

RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

BOOLEAN

2 つのオブジェクトが等しくないかどうかを確認します。

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

なし

Roaring ビットマップ計算関数

  • RoaringBitmap 型と RoaringBitmap64 型のデータの処理をサポートする関数

    関数

    入力型

    出力型

    説明

    rb_build_agg

    INTEGER|BIGINT

    入力パラメーターのデータ型は次のとおりです。

    • INTEGER: RoaringBitmap 型を返します。

    • BIGINT: RoaringBitmap64 型を返します。

    オフセットを Roaring ビットマップに集約します。

    説明

    Hologres V3.1 以降のみが、BIGINT 入力パラメーター 活字をサポートし、RoaringBitmap64 活字を返します。

    rb_build_agg(1)

    rb_cardinality

    RoaringBitmap | RoaringBitmap64

    INTEGER

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

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

    rb_and_cardinality

    RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

    INTEGER

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

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

    rb_or_cardinality

    RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64

    INTEGER

    2 つの RoaringBitmap に対して OR 演算を実行してカーディナリティを計算します。

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

    rb_range

    RoaringBitmap | RoaringBitmap64、BIGINT、BIGINT

    RoaringBitmap | RoaringBitmap64

    開始位置(含む)から終了位置(含まない)までの新しいコレクションを返します。開始位置は 1 です。

    説明

    Hologres V1.3.16 以降でのみ、この関数がサポートされています。

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

    rb_minimum

    RoaringBitmap | RoaringBitmap64

    INTEGER

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

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

    rb_maximum

    RoaringBitmap | RoaringBitmap64

    INTEGER

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

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

    rb_to_array

    RoaringBitmap | RoaringBitmap64

    INTEGER[]

    Roaring ビットマップの作成元の整数配列を返します。

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

    rb_to_array_string

    RoaringBitmap | RoaringBitmap64、TEXT

    TEXT

    Roaring ビットマップの作成元の整数配列と入力テキストを連結して生成された文字列を返します。

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

  • RoaringBitmap64 型のデータのみの処理をサポートする関数

    関数

    入力タイプ

    出力タイプ

    説明

    rb64_build

    BIGINT[]

    RoaringBitmap64

    配列から 64 ビットの RoaringBitmap を作成します。

    説明

    Hologres V3.1 以降でこの関数がサポートされています。

    --Prepare data  -- データの準備
    CREATE TABLE public.tn (
        id INT,
        num BIGINT[]
    );
    INSERT INTO public.tn ("id", "num") VALUES (01, '{1,2}');
    
    SELECT rb64_build (num) rb_num,num FROM public.tn;

    次の結果が返されます。

    rb_num	num
    \x030100000000000000000000003a30000001000000000001001000000001000200	{1,2}
  • RoaringBitmap 型のデータのみの処理をサポートする関数

    関数

    入力型

    出力型

    説明

    rb_build

    INTEGER[]

    RoaringBitmap

    配列から 32 ビットの RoaringBitmap を作成します。

    --次の結果が返されます: \x3a3000000100000000000000100000000100
    SELECT rb_build_agg(1);

    roaringbitmap_in

    TEXT

    RoaringBitmap

    この関数は、TEXT 型のデータを RoaringBitmap 型に変換するために使用されます。

    説明

    Hologres V2.1.33 以降でこの関数がサポートされています。

    --サンプル テーブルを作成します。
    CREATE TABLE rb_text (
        id int,
        a text
    );
    
    -- サンプル テーブルにデータを挿入します。
    INSERT INTO rb_text
        VALUES (1, '\x3a300000010000000000090010000000010002000300040005000600070008000900c800');
    
    --フィールド a のデータ型を RoaringBitmap 型に変換し、AND 演算を実行します。
    SELECT
        rb_and_cardinality_agg (roaringbitmap_in (a::cstring))
    FROM
        rb_text;
    --次の結果が返されます:
    rb_and_cardinality_agg|
    -----------------------
                        10|

    rb_index

    RoaringBitmap, INTEGER

    BIGINT

    RoaringBitmap データ内の要素のインデックスを 0 から返します。要素が存在しない場合は、-1 が返されます。

    説明

    Hologres V1.3.16 以降でのみ、この関数がサポートされています。

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

    rb_and_null2empty

    RoaringBitmap, RoaringBitmap

    RoaringBitmap

    AND 演算を実行します。入力パラメーターの値が NULL の場合、関数はパラメーター値を空と見なします。

    説明

    Hologres V1.1.42 以降でのみ、この関数がサポートされています。

    rb_and_null2empty(rb_build(null),rb_build('{3,4,5}'))

    rb_or_null2empty

    RoaringBitmap, RoaringBitmap

    RoaringBitmap

    OR 演算を実行します。入力パラメーターの値が NULL の場合、関数はパラメーター値を空と見なします。

    説明

    Hologres V1.1.42 以降でのみ、この関数がサポートされています。

    rb_or_null2empty(rb_build(null),rb_build('{3,4,5}'))

    rb_andnot_null2empty

    RoaringBitmap, RoaringBitmap

    RoaringBitmap

    ANDNOT 演算を実行します。入力パラメーターの値が NULL の場合、関数はパラメーター値を空と見なします。

    説明

    Hologres V1.1.42 以降でのみ、この関数がサポートされています。

    rb_andnot_null2empty(rb_build(null),rb_build('{3,4,5}'))

    rb_and_null2empty_cardinality

    RoaringBitmap, RoaringBitmap

    INTEGER

    2 つの RoaringBitmap に対して AND 演算を実行することにより、濃度 (cardinality) を計算します。入力パラメーターの値が NULL の場合、関数はパラメーター値を空と見なします。

    説明

    Hologres V1.1.42 以降でのみ、この関数がサポートされています。

    rb_and_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))

    rb_or_null2empty_cardinality

    RoaringBitmap, RoaringBitmap

    INTEGER

    2 つの RoaringBitmap に対して OR 演算を実行することにより、濃度 (cardinality) を計算します。入力パラメーターの値が NULL の場合、関数はパラメーター値を空と見なします。

    説明

    Hologres V1.1.42 以降でのみ、この関数がサポートされています。

    rb_or_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))

    rb_xor_cardinality

    RoaringBitmap, RoaringBitmap

    INTEGER

    2 つの RoaringBitmap に対して XOR 演算を実行することにより、濃度 (cardinality) を計算します。

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

    rb_andnot_cardinality

    RoaringBitmap, RoaringBitmap

    INTEGER

    2 つの RoaringBitmap に対して ANDNOT 演算を実行することにより、濃度 (cardinality) を計算します。

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

    rb_andnot_null2empty_cardinality

    RoaringBitmap, RoaringBitmap

    INTEGER

    2 つの RoaringBitmap に対して ANDNOT 演算を実行することにより、濃度 (cardinality) を計算します。入力パラメーターの値が NULL の場合、関数はパラメーター値を空と見なします。

    説明

    Hologres V1.1.42 以降でのみ、この関数がサポートされています。

    rb_andnot_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))

    rb_is_empty

    RoaringBitmap

    BOOLEAN

    RoaringBitmap が空かどうかを確認します。

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

    rb_fill

    RoaringBitmap, BIGINT, BIGINT

    RoaringBitmap

    RoaringBitmap の指定された範囲 (範囲の終端を除く) を入力します。

    説明

    Hologres V1.3.16 以降でのみ、この関数がサポートされています。

    rb_fill(rb_build('{1,2,3}'), 5, 7)

    rb_clear

    RoaringBitmap, BIGINT, BIGINT

    RoaringBitmap

    RoaringBitmap の指定された範囲 (範囲の終端を除く) をクリアします。

    説明

    Hologres V1.3.16 以降でのみ、この関数がサポートされています。

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

    rb_contains_bitmap

    RoaringBitmap, RoaringBitmap

    BOOLEAN

    最初のビットマップに 2 番目のビットマップが含まれているかどうかを確認します。

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

    rb_flip

    RoaringBitmap,INTEGER,INTEGER

    RoaringBitmap

    RoaringBitmap 内の指定されたオフセットを反転します。

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

    rb_range_cardinality

    RoaringBitmap, BIGINT, BIGINT

    BIGINT

    開始位置 (含む) から終了位置 (含まない) までの範囲の濃度 (cardinality) を返します。開始位置は 1 です。

    説明

    Hologres V1.3.16 以降でのみ、この関数がサポートされています。

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

    rb_rank

    RoaringBitmap,INTEGER

    INTEGER

    RoaringBitmap 内の特定のオフセット以下の要素の数を返します。

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

    rb_jaccard_dist

    RoaringBitmap, RoaringBitmap

    DOUBLE PRECISION

    2 つの RoaringBitmap 間の Jaccard 距離または Jaccard 類似係数を返します。

    説明

    Hologres V1.3.16 以降でのみ、この関数がサポートされています。

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

    rb_select

    RoaringBitmap, bitset_limit bigint, bitset_offset bigint=0, reverse boolean=false, range_start bigint=-2147483648, range_end bigint=2147483647

    RoaringBitmap

    範囲 [range_start, range_end) 内のビットマップのサブセット [bitset_offset, bitset_offset + bitset_limit) を返します。

    rb_select(rb_build('{1,2,3,4,5,6,7,8,9}'), 5, 2)

    rb_iterate

    RoaringBitmap

    Set of Integer

    RoaringBitmap からオフセットのリストを返します。

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

集約関数

  • RoaringBitmap 型と RoaringBitmap64 型の処理をサポートする関数

    関数名

    入力型

    出力型

    説明

    rb_or_agg

    RoaringBitmap | RoaringBitmap64

    入力パラメーター型と一致します。

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

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

    rb_and_agg

    RoaringBitmap | RoaringBitmap64

    入力パラメーター型と一致します。

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

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

    rb_or_cardinality_agg

    RoaringBitmap | RoaringBitmap64

    INTEGER

    2 つの RoaringBitmap に対する OR 集約操作からカーディナリティを計算します。

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

    rb_and_cardinality_agg

    RoaringBitmap | RoaringBitmap64

    INTEGER

    2 つの RoaringBitmap に対する AND 集約操作からカーディナリティを計算します。

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

  • RoaringBitmap 型の処理のみをサポートする関数

    関数名

    入力型

    出力型

    説明

    rb_xor_agg

    RoaringBitmap

    RoaringBitmap

    XOR 集約操作を実行します。

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

    rb_xor_cardinality_agg

    RoaringBitmap

    INTEGER

    2 つの RoaringBitmap に対する XOR 集約操作からカーディナリティを計算します。

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

以下の関数は、RoaringBitmap 型のデータの処理のみをサポートしています。

関数名

入力型

出力型

説明

roaringbitmap_text

TEXT、BOOLEAN

RoaringBitmap

TEXT 型のバイナリ RoaringBitmap データを RoaringBitmap 構造にデシリアライズします。 2 番目のパラメーターは、フォーマットを確認するかどうかを示します。 このパラメーターは true に設定することをお勧めします。 そうしないと、無効なビットマップデータが返されます。

roaringbitmap_text(':0', true)

rb_to_text

RoaringBitmap

TEXT

RoaringBitmap 構造を、出力用の TEXT 型のバイナリ RoaringBitmap データに変換します。

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

WordPress の詳細については、WordPress の Web サイトをご参照ください。

  1. 拡張機能をインストールします。

    CREATE EXTENSION roaringbitmap;
  2. Roaring Bitmap データを格納するために使用するテーブルを作成します。

    -- t1 という名前のテーブルを作成します
    CREATE TABLE public.t1 (id integer, bitmap roaringbitmap);
  3. rb_build 関数を使用して、Roaring Bitmap データをテーブルに挿入します。

    -- 配列の位置にあるビット値を 1 に設定します
    INSERT INTO public.t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
    
    -- 複数の要素のビット値を 1 に設定し、ビット値を Roaring Bitmap に集約します
    INSERT INTO public.t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  4. OR、AND、XOR、ANDNOT などのビット単位の演算を実行します。

    SELECT  RB_OR(a.bitmap,b.bitmap)
    FROM    (
                SELECT  bitmap
                FROM    public.t1
                WHERE   id = 1
            ) AS a
            ,(
                SELECT  bitmap
                FROM    public.t1
                WHERE   id = 2
            ) AS b
    ;
  5. OR、AND、XOR、BUILD などのビット単位の集約操作を実行して、新しい Roaring Bitmap を生成します。

    SELECT RB_OR_AGG(bitmap) FROM public.t1;
    SELECT RB_AND_AGG(bitmap) FROM public.t1;
    SELECT RB_XOR_AGG(bitmap) FROM public.t1;
    SELECT RB_BUILD_AGG(id) FROM public.t1;
  6. Roaring Bitmap のカーディナリティを計算します。カーディナリティは、Roaring Bitmap で 1 に設定されているビットの数です。

    SELECT RB_CARDINALITY(bitmap) FROM public.t1;
  7. 1 に設定されているビットの添え字を取得します。

    SELECT RB_ITERATE(bitmap) FROM public.t1 WHERE id = 1;
  8. Roaring Bitmap を配列に変換します。

    SELECT RB_TO_ARRAY(bitmap) FROM public.t1 WHERE id = 1;