Tüm Ürünler
Search
Belge Merkezi

Hologres:Roaringbitmap

Son Güncelleme:Oct 06, 2026

Roaring bitmap'ler, birçok programlama dili ve büyük veri platformunda desteklenen verimli sıkıştırılmış bit eşlemleridir. Hologres'te roaring bitmap işlevleri; yinelenen öğeleri kaldırma, etiket tabanlı filtreleme ve zaman serisi toplama gibi ultra yüksek kardinaliteli iş yükleri için uygundur.

Çalışma mekanizması

Bir roaring bitmap, 32 bitlik tamsayıları 2^16 parçaya böler. Aynı parçadaki tamsayılar aynı 16 en anlamlı biti paylaşır; 16 en az anlamlı bit ise bir kapsayıcıda saklanır. Kapsayıcılar, birincil dizin olarak dinamik bir dizi içinde tutulur.

İki tür kapsayıcı, depolama alanı ve performansı dengeler:

Kapsayıcı türü Kullanım amacı Kapasite
Dizi kapsayıcısı Seyrek parçalar 4.096 adede kadar tamsayı
Bitmap kapsayıcısı Yoğun parçalar 4.096'dan fazla tamsayı

Bu yapı, hızlı değer erişimi ve kapsayıcılar arasında verimli bit düzeyinde işlemler (AND, OR, XOR) gerçekleştirmeyi sağlar.

Sınırlamalar

  • Yalnızca Hologres V0.10 ve sonraki sürümlerin özel örnekleri roaring bitmap işlevlerini destekler.

    Örnek sürümünüzü Hologres konsolunda kontrol edin. Sürüm V0.10'dan önceyse örneği konsolda yükseltin veya teknik destek için DingTalk grubuna katılın. Bkz. Yaygın yükseltme hazırlık hata mesajları ve Hologres için çevrimiçi destek alma .
  • Roaring bitmap işlevleri varsayılan olarak public şemasına yüklenir ve yalnızca public şemasına yüklenebilir.

  • Hologres V3.1'den itibaren RoaringBitmap64 veri türü desteklenir. Bazı roaring bitmap işlevleri RoaringBitmap64 türündeki verileri işleyebilir. Bu işlevler RoaringBitmap64 verilerini işlerken sabit giriş parametrelerini desteklemez.

  • Roaring bitmap işlevlerini kullanmadan önce aşağıdaki ifadeyle uzantıyı etkinleştirin. Uzantı veritabanı kapsamındadır; her veritabanı için bu işlemi bir kez çalıştırın. Oluşturduğunuz her yeni veritabanı için tekrarlayın.

    -- Enable the extension.
    CREATE EXTENSION roaringbitmap;

    Uzantıyı kaldırmak için:

    DROP EXTENSION roaringbitmap;
    Önemli

    DROP EXTENSION <extension_name> CASCADE; kullanımından kaçının. CASCADE seçeneği, uzantıyı tüm verileri ve bağımlı nesnelerle birlikte kaldırır; buna PostGIS verileri, roaring bitmap verileri, Proxima verileri, ikili günlük verileri ve BSI verileri ile bağımlı meta veriler, tablolar, görünümler ve sunucu nesneleri dahildir.

  • Roaring bitmap sütunları bitmap veya sözlük dizini olarak belirtilemez.

  • Roaring bitmap sütunu içeren bir tablo oluştururken sütun türünü açıkça roaringbitmap (32 bit) veya roaringbitmap64 (64 bit) olarak belirtin. İki tür arasında karma hesaplamalar desteklenmez.

    -- Create a table with a 32-bit roaring bitmap column.
    CREATE TABLE t_rb_32 (
        bucket int,
        x roaringbitmap
    );
    
    -- Create a table with a 64-bit roaring bitmap column.
    CREATE TABLE t_rb_64 (
        bucket int,
        x roaringbitmap64
    );
    
    -- Mixed calculations return an error.
    -- ERROR: operator does not exist: roaringbitmap & roaringbitmap64
    SELECT
        a.x & b.x
    FROM
        t_rb_32 a
    JOIN t_rb_64 b ON a.bucket = b.bucket;

İşleçler

Aksi belirtilmedikçe aşağıdaki tüm işleçler hem RoaringBitmap hem de RoaringBitmap64 türlerini destekler.

İşleç Giriş türü Çıkış türü Açıklama Örnek Sonuç
& RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 Girişle aynı AND rb_build('{1,2,3}') & rb_build('{3,4,5}') {3}
| RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 Girişle aynı OR rb_build('{1,2,3}') | rb_build('{3,4,5}') {1,2,3,4,5}
| RoaringBitmap | RoaringBitmap64, INTEGER RoaringBitmap | RoaringBitmap64 OR (bitmap, tamsayı); V1.3.16+ rb_build('{1,2,3}') | 6 {1,2,3,6}
| INTEGER, RoaringBitmap | RoaringBitmap64 RoaringBitmap | RoaringBitmap64 OR (tamsayı, bitmap); V1.3.16+ 6 | rb_build('{1,2,3}') {1,2,3,6}
# RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 Girişle aynı XOR rb_build('{1,2,3}') # rb_build('{3,4,5}') {1,2,4,5}
<< RoaringBitmap | RoaringBitmap64, BIGINT RoaringBitmap | RoaringBitmap64 Sola kaydırma; V1.3.16+ rb_build('{1,2,3}') << 2 {3,4,5}
>> RoaringBitmap | RoaringBitmap64, BIGINT RoaringBitmap | RoaringBitmap64 Sağa kaydırma; V1.3.16+ rb_build('{1,2,3}') >> 3 —
- RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 Girişle aynı ANDNOT (bitmap, bitmap); V1.3.16+ rb_build('{1,2,3}') - rb_build('{3,4,5}') {1,2}
- RoaringBitmap | RoaringBitmap64, INTEGER RoaringBitmap | RoaringBitmap64 ANDNOT (bitmap, tamsayı) rb_build('{1,2,3}') - 3 {1,2}
@> RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 BOOLEAN A, B'yi içerir rb_build('{1,2,3}') @> rb_build('{3,4,5}') false
@> RoaringBitmap | RoaringBitmap64, INTEGER BOOLEAN A, tamsayıyı içerir rb_build('{1,2,3}') @> 3 true
<@ RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 BOOLEAN A, B tarafından kapsanır rb_build('{1,2,3}') <@ rb_build('{3,4,5}') false
<@ INTEGER, RoaringBitmap | RoaringBitmap64 BOOLEAN Tamsayı, A tarafından kapsanır 3 <@ rb_build('{1,2,3}') true
&& RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 BOOLEAN A, B ile kesişir rb_build('{1,2,3}') && rb_build('{3,4,5}') true
= RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 BOOLEAN Eşittir rb_build('{1,2,3}') = rb_build('{3,4,5}') false
<> RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 BOOLEAN Eşit değildir rb_build('{1,2,3}') <> rb_build('{3,4,5}') true

Roaring bitmap işlevleri

Hem RoaringBitmap hem de RoaringBitmap64'ü destekleyen işlevler

İşlev Giriş türü Çıkış türü Açıklama Örnek Sonuç
rb_build_agg INTEGER | BIGINT RoaringBitmap | RoaringBitmap64 Ofsetleri bir roaring bitmap'te toplar. BIGINT girişi (RoaringBitmap64 döndüren) V3.1+ gerektirir. rb_build_agg(1) {1}
rb_cardinality RoaringBitmap | RoaringBitmap64 INTEGER Bir roaring bitmap'teki öğe sayısını döndürür. rb_cardinality(rb_build('{1,2,3,4,5}')) 5
rb_and_cardinality RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 INTEGER İki roaring bitmap'in AND işleminin kardinalitesini döndürür. rb_and_cardinality(rb_build('{1,2,3}'), rb_build('{3,4,5}')) 1
rb_or_cardinality RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 INTEGER İki roaring bitmap'in OR işleminin kardinalitesini döndürür. rb_or_cardinality(rb_build('{1,2,3}'), rb_build('{3,4,5}')) 5
rb_range RoaringBitmap | RoaringBitmap64, BIGINT, BIGINT RoaringBitmap | RoaringBitmap64 [başlangıç, bitiş) aralığındaki öğeleri döndürür; başlangıç 1 tabanlıdır. V1.3.16+ gerektirir. rb_range(rb_build('{1,2,3}'), 2, 3) —
rb_minimum RoaringBitmap | RoaringBitmap64 INTEGER Minimum ofseti döndürür. Bitmap boşsa -1 döndürür. rb_minimum(rb_build('{1,2,3}')) 1
rb_maximum RoaringBitmap | RoaringBitmap64 INTEGER Maksimum ofseti döndürür. Bitmap boşsa 0 döndürür. rb_maximum(rb_build('{1,2,3}')) 3
rb_to_array RoaringBitmap | RoaringBitmap64 INTEGER[] Bir roaring bitmap'i tamsayı dizisine dönüştürür. rb_to_array(rb_build('{1,2,3}')) {1,2,3}
rb_to_array_string RoaringBitmap | RoaringBitmap64, TEXT TEXT Bir roaring bitmap'i belirtilen ayırıcıyla birleştirerek bir dizeye dönüştürür. rb_to_array_string(rb_build('{1,2,3}'), ',') 1,2,3

Yalnızca RoaringBitmap64'ü destekleyen işlevler

İşlev Giriş türü Çıkış türü Açıklama Örnek Sonuç
rb64_build BIGINT[] RoaringBitmap64 Bir BIGINT dizisinden 64 bitlik bir roaring bitmap oluşturur. V3.1+ gerektirir. Aşağıdaki örneğe bakın. —
-- 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;

Beklenen çıktı:

rb_num                                                                          | num
--------------------------------------------------------------------------------+------
\x030100000000000000000000003a30000001000000000001001000000001000200             | {1,2}

Yalnızca RoaringBitmap'i (32 bit) destekleyen işlevler

İşlev Giriş türü Çıkış türü Açıklama Örnek Sonuç
rb_build INTEGER[] RoaringBitmap Bir tamsayı dizisinden 32 bitlik bir roaring bitmap oluşturur. rb_build('{1,2,3,4,5}') {1,2,3,4,5}
roaringbitmap_in TEXT RoaringBitmap Metin olarak kodlanmış bir roaring bitmap'i RoaringBitmap türüne dönüştürür. V2.1.33+ gerektirir. Aşağıdaki örneğe bakın. —
rb_index RoaringBitmap, INTEGER BIGINT Bir öğenin 0 tabanlı dizinini döndürür. Öğe yoksa -1 döndürür. V1.3.16+ gerektirir. rb_index(rb_build('{1,2,3}'), 3) 2
rb_and_null2empty RoaringBitmap, RoaringBitmap RoaringBitmap AND işlemi. Girişlerden biri NULL ise diğer girişi döndürür; girişlerden biri boş bitmap ({}) ise {} döndürür. V1.1.42+ gerektirir. rb_and_null2empty(rb_build(null), rb_build('{3,4,5}')) {}
rb_or_null2empty RoaringBitmap, RoaringBitmap RoaringBitmap OR işlemi; NULL girişleri boş bitmap olarak kabul eder. V1.1.42+ gerektirir. rb_or_null2empty(rb_build(null), rb_build('{3,4,5}')) {3,4,5}
rb_andnot_null2empty RoaringBitmap, RoaringBitmap RoaringBitmap ANDNOT işlemi; NULL girişleri boş bitmap olarak kabul eder. V1.1.42+ gerektirir. rb_andnot_null2empty(rb_build(null), rb_build('{3,4,5}')) {}
rb_and_null2empty_cardinality RoaringBitmap, RoaringBitmap INTEGER AND kardinalitesini döndürür. NULL girişleri boş bitmap ({}) olarak kabul eder. V1.1.42+ gerektirir. rb_and_null2empty_cardinality(rb_build(null), rb_build('{3,4,5}')) 0
rb_or_null2empty_cardinality RoaringBitmap, RoaringBitmap INTEGER OR kardinalitesini döndürür; NULL girişleri boş bitmap olarak kabul eder. V1.1.42+ gerektirir. rb_or_null2empty_cardinality(rb_build(null), rb_build('{3,4,5}')) 3
rb_xor_cardinality RoaringBitmap, RoaringBitmap INTEGER İki roaring bitmap'in XOR işleminin kardinalitesini döndürür. rb_xor_cardinality(rb_build('{1,2,3}'), rb_build('{3,4,5}')) 4
rb_andnot_cardinality RoaringBitmap, RoaringBitmap INTEGER İki roaring bitmap'in ANDNOT işleminin kardinalitesini döndürür. rb_andnot_cardinality(rb_build('{1,2,3}'), rb_build('{3,4,5}')) 2
rb_andnot_null2empty_cardinality RoaringBitmap, RoaringBitmap INTEGER ANDNOT kardinalitesini döndürür; NULL girişleri boş bitmap olarak kabul eder. V1.1.42+ gerektirir. rb_andnot_null2empty_cardinality(rb_build(null), rb_build('{3,4,5}')) 0
rb_is_empty RoaringBitmap BOOLEAN Bir roaring bitmap'in boş olup olmadığını kontrol eder. rb_is_empty(rb_build('{1,2,3,4,5}')) false
rb_fill RoaringBitmap, BIGINT, BIGINT RoaringBitmap [başlangıç, bitiş) aralığındaki ofsetleri doldurur; bitiş hariçtir. V1.3.16+ gerektirir. rb_fill(rb_build('{1,2,3}'), 5, 7) {1,2,3,5,6}
rb_clear RoaringBitmap, BIGINT, BIGINT RoaringBitmap [başlangıç, bitiş) aralığındaki ofsetleri temizler; bitiş hariçtir. V1.3.16+ gerektirir. rb_clear(rb_build('{1,2,3}'), 2, 3) —
rb_contains_bitmap RoaringBitmap, RoaringBitmap BOOLEAN İlk bitmap'in ikinci bitmap'in tüm öğelerini içerip içermediğini kontrol eder. rb_contains_bitmap(rb_build('{1,2,3}'), rb_build('{3}')) true
rb_flip RoaringBitmap, INTEGER, INTEGER RoaringBitmap Belirtilen aralıktaki ofsetleri tersine çevirir. rb_flip(rb_build('{1,2,3}'), 2, 3) —
rb_range_cardinality RoaringBitmap, BIGINT, BIGINT BIGINT [başlangıç, bitiş) aralığındaki öğelerin kardinalitesini döndürür; başlangıç 1 tabanlıdır. V1.3.16+ gerektirir. rb_range_cardinality(rb_build('{1,2,3}'), 2, 3) —
rb_rank RoaringBitmap, INTEGER INTEGER Belirtilen ofsetten küçük veya ona eşit olan öğelerin sayısını döndürür. rb_rank(rb_build('{1,2,3}'), 3) 3
rb_jaccard_dist RoaringBitmap, RoaringBitmap DOUBLE PRECISION İki roaring bitmap arasındaki Jaccard uzaklığını veya Jaccard benzerlik katsayısını döndürür. V1.3.16+ gerektirir. rb_jaccard_dist(rb_build('{1,2,3}'), rb_build('{3,4}')) 0.75
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) aralığının [bitset_offset, bitset_offset+bitset_limit) alt kümesini döndürür. rb_select(rb_build('{1,2,3,4,5,6,7,8,9}'), 5, 2) —
rb_iterate RoaringBitmap Set of INTEGER Bir roaring bitmap'teki her ofseti bir satır olarak döndürür. rb_iterate(rb_build('{1,2,3}')) 1, 2, 3

roaringbitmap_in örneği:

-- Create a sample table.
CREATE TABLE rb_text (
    id int,
    a text
);

-- Insert data.
INSERT INTO rb_text
    VALUES (1, '\x3a300000010000000000090010000000010002000300040005000600070008000900c800');

-- Convert to RoaringBitmap and compute AND cardinality.
SELECT
    rb_and_cardinality_agg(roaringbitmap_in(a::cstring))
FROM
    rb_text;

Beklenen çıktı:

 rb_and_cardinality_agg
------------------------
                     10

Roaring bitmap toplama işlevleri

Hem RoaringBitmap hem de RoaringBitmap64'ü destekleyen işlevler

Aşağıdaki tüm örnekler, toplamaların birden çok bitmap'i nasıl birleştirdiğini göstermek için çok satırlı giriş kullanır.

İşlev Giriş türü Çıkış türü Açıklama Örnek Sonuç
rb_or_agg RoaringBitmap | RoaringBitmap64 Girişle aynı Tüm giriş satırları üzerinde OR toplamı. Aşağıdaki örneğe bakın. —
rb_and_agg RoaringBitmap | RoaringBitmap64 Girişle aynı Tüm giriş satırları üzerinde AND toplamı. Aşağıdaki örneğe bakın. —
rb_or_cardinality_agg RoaringBitmap | RoaringBitmap64 INTEGER OR toplamının kardinalitesini döndürür. Aşağıdaki örneğe bakın. —
rb_and_cardinality_agg RoaringBitmap | RoaringBitmap64 INTEGER AND toplamının kardinalitesini döndürür. Aşağıdaki örneğe bakın. —
-- OR aggregate: returns the union of all input bitmaps.
SELECT rb_or_agg(bitmap)
FROM (VALUES
    (rb_build('{1,2,3}')),
    (rb_build('{2,3,4}'))
) t(bitmap);
-- Result: {1,2,3,4}

-- AND aggregate: returns the intersection of all input bitmaps.
SELECT rb_and_agg(bitmap)
FROM (VALUES
    (rb_build('{1,2,3}')),
    (rb_build('{2,3,4}'))
) t(bitmap);
-- Result: {2,3}

-- OR cardinality aggregate.
SELECT rb_or_cardinality_agg(bitmap)
FROM (VALUES
    (rb_build('{1,2,3}')),
    (rb_build('{2,3,4}'))
) t(bitmap);
-- Result: 4

-- AND cardinality aggregate.
SELECT rb_and_cardinality_agg(bitmap)
FROM (VALUES
    (rb_build('{1,2,3}')),
    (rb_build('{2,3,4}'))
) t(bitmap);
-- Result: 2

Yalnızca RoaringBitmap'i (32 bit) destekleyen işlevler

İşlev Giriş türü Çıkış türü Açıklama Örnek Sonuç
rb_xor_agg RoaringBitmap RoaringBitmap Tüm giriş satırları üzerinde XOR toplamı. Aşağıdaki örneğe bakın. —
rb_xor_cardinality_agg RoaringBitmap INTEGER XOR toplamının kardinalitesini döndürür. Aşağıdaki örneğe bakın. —
-- XOR aggregate: returns elements in exactly one of the two bitmaps.
SELECT rb_xor_agg(bitmap)
FROM (VALUES
    (rb_build('{1,2,3}')),
    (rb_build('{2,3,4}'))
) t(bitmap);
-- Result: {1,4}

-- XOR cardinality aggregate.
SELECT rb_xor_cardinality_agg(bitmap)
FROM (VALUES
    (rb_build('{1,2,3}')),
    (rb_build('{2,3,4}'))
) t(bitmap);
-- Result: 2

Diğer roaring bitmap işlevleri

Aşağıdaki işlevler yalnızca RoaringBitmap (32 bit) türünü destekler.

İşlev Giriş türü Çıkış türü Açıklama Örnek Sonuç
roaringbitmap_text TEXT, BOOLEAN RoaringBitmap İkili RoaringBitmap verisini metinden bir RoaringBitmap yapısına serileştirir. İkinci parametre biçim doğrulamasını kontrol eder; geçersiz bitmap verilerinden kaçınmak için true olarak ayarlayın. roaringbitmap_text(':0', true) —
rb_to_text RoaringBitmap TEXT Bir RoaringBitmap yapısını ikili metin temsilatine dönüştürür. rb_to_text(rb_build('{1,2,3}')) \x3a300000...

Örnekler

Aşağıdaki uçtan uca örnek, eksiksiz bir iş akışı gösterir: uzantıyı etkinleştirme, tablo oluşturma, veri ekleme, bit düzeyinde işlemler çalıştırma ve sonuçları inceleme.

  1. Uzantıyı etkinleştirin.

    CREATE EXTENSION roaringbitmap;
  2. Roaring bitmap verilerini depolamak için bir tablo oluşturun.

    -- Create table t1.
    CREATE TABLE public.t1 (id integer, bitmap roaringbitmap);
  3. Roaring bitmap verilerini ekleyin.

    -- Build a bitmap from an explicit array.
    INSERT INTO public.t1 SELECT 1, RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
    
    -- Build a bitmap by aggregating a generated series.
    INSERT INTO public.t1 SELECT 2, RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  4. Bit düzeyinde işlemleri çalıştırın.

    -- OR the two bitmaps.
    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;

    Beklenen çıktı ({1..9, 200} ve {1..100} kümelerinin birleşimi):

     rb_or
    -------
     {1,2,3,4,5,6,7,8,9,10,...,100,200}
  5. Tablodaki tüm bitmap'leri birleştirmek için toplama işlemlerini çalıştırın.

    SELECT RB_OR_AGG(bitmap)  FROM public.t1;  -- union of all bitmaps
    SELECT RB_AND_AGG(bitmap) FROM public.t1;  -- intersection of all bitmaps
    SELECT RB_XOR_AGG(bitmap) FROM public.t1;  -- symmetric difference
    SELECT RB_BUILD_AGG(id)   FROM public.t1;  -- build a bitmap from the id column
  6. Kardinaliteyi (ayarlanan bitlerin sayısını) hesaplayın.

    SELECT RB_CARDINALITY(bitmap) FROM public.t1;

    Beklenen çıktı:

     id | rb_cardinality
    ----+----------------
      1 |             10
      2 |            100
  7. Tüm ayarlanan ofsetleri listeleyin.

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

    Beklenen çıktı:

     rb_iterate
    ------------
              1
              2
              3
              4
              5
              6
              7
              8
              9
            200
  8. Bir roaring bitmap'i bir diziye dönüştürün.

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

    Beklenen çıktı:

               rb_to_array
    --------------------------------
     {1,2,3,4,5,6,7,8,9,200}