Tüm Ürünler
Search
Belge Merkezi

Hologres:BSI functions

Son Güncelleme:Oct 06, 2026

Bit-sliced index (BSI) fonksiyonları, büyük kullanıcı segmentleri üzerinde yüksek performanslı toplama ve filtreleme işlemleri gerçekleştirmek için anahtar-değer verilerini bitmap tabanlı bir yapıda sıkıştıran Hologres uzantı fonksiyonlarıdır.

Nasıl çalışır

Bir BSI, cid::int, value::bigint formatındaki anahtar-değer çiftlerini sıkıştırır. Her ondalık değer ikili sisteme dönüştürülür ve ikili veri düşük bitten yüksek bite doğru taranır. Bit konumu 1 olan tüm cid değerlerinin roaring bitmap'i her bit pozisyonu için bir dilim olarak kaydedilir ve bu şekilde BSI yapısı oluşturulur.

Aşağıdaki örnek veriler bu prensibi göstermektedir:

cid Değer (ondalık) Değer (ikili)
1 3 0011
2 6 0110
3 4 0100
4 10 1010
5 7 0111
6 NULL -

Maksimum ondalık değer 10'dur ve bu değer 4 bit gerektirir. Bu verilerden üretilen BSI dört dilim içerir:

  • dilim 0: roaringbitmap {1,5}

  • dilim 1: roaringbitmap {1,2,4,5}

  • dilim 2: roaringbitmap {2,3,5}

  • dilim 3: roaringbitmap {4}

Her BSI ayrıca aşağıdaki dahili meta verileri de saklar:

Alan Açıklama Örnekteki değer
EBM (varlık bitmap'i) NULL olmayan tüm cid değerlerinin roaring bitmap'i {1,2,3,4,5}
max Maksimum değer 10
min Minimum değer 3
bitCount İkili temsil için kullanılan bit sayısı 4

Seçilen kitle {1,3,5} için örnek hesaplamalar:

  • Toplam: rb_and_cardinality(crowd, slice0) × 2<sup>0</sup> + ... + rb_and_cardinality(crowd, slice3) × 2<sup>3</sup> = 14

  • En büyük 2 değer:

    crowd & slice3 = NULL
    crowd & slice2 = {3,5}  -- top 2 values are {3,5}
    {3,5} & slice1 = {5}    -- top 1 value is {5}

BSI, roaring bitmap küme işlemlerini değer hesaplamalarıyla birleştirir; bu durum, hem öznitelik etiketleri hem de davranış etiketleri kullanan kullanıcı profili analiz senaryolarında verimlilik sağlar. Pratik bir örnek için bkz. BSI (beta).

Sınırlamalar

  • Sürüm gereksinimi: Hologres V2.1 ve sonraki sürümler. Daha eski bir örneği yükseltmek için bkz. Örnekleri yükseltme.

  • Value range: Bir BSI içindeki her değer 1 ile 2<sup>31</sup> − 1 arasında bir tam sayı olmalıdır.

  • Uzantılar: BSI kullanmadan önce süper kullanıcı tarafından veritabanı düzeyinde iki uzantının oluşturulması gerekir. Her uzantıyı veritabanı başına yalnızca bir kez oluşturun.

    Önemli

    DROP EXTENSION <extension_name> CASCADE; komutunu kullanmayın. CASCADE seçeneği, uzantıyı silmenin yanı sıra PostGIS verileri, roaring bitmap verileri, Proxima verileri, binary log verileri, BSI verileri, meta veriler, tablolar, görünümler ve sunucu verileri dahil olmak üzere tüm bağımlı nesneleri ve bunların verilerini de siler.

    -- Create extensions. Create roaring bitmaps before creating BSI.
    CREATE EXTENSION roaringbitmap;
    CREATE EXTENSION bsi;
    
    -- Drop the extensions.
    DROP EXTENSION bsi;
    DROP EXTENSION roaringbitmap;

Fonksiyonlar

BSI oluşturucular

bsi_build

İki paralel tek boyutlu diziden bir BSI oluşturur.

Sözdizimi

bsi_build(cids integer[], values bigint[]) → bsi

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
cids integer[] Anahtar değerleri (cid) dizisi
values bigint[] cids ile hizalanmış karşılık gelen değerler dizisi

Döndürür: bsi

Örnek

SELECT bsi_iterate(bsi_build('{1,2,3}', '{2,4,6}'));

Çıktı:

{1,2}
{2,4}
{3,6}

bsi_add_value

Mevcut bir BSI'ye tek bir anahtar-değer çifti ekler.

Sözdizimi

bsi_add_value(b bsi, cid integer, value bigint) → bsi

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
b bsi Mevcut BSI
cid integer Eklenecek anahtar
value bigint cid ile ilişkili değer

Döndürür: bsi

Örnek

SELECT bsi_iterate(bsi_add_value(bsi_build('{1,2,3}', '{2,4,6}'), 4, 8));

Çıktı:

{1,2}
{2,4}
{3,6}
{4,8}

BSI genişletme fonksiyonları

bsi_iterate

Bir BSI'yi anahtar-değer çiftlerine genişletir ve her çift için bir satır döndürür.

Sözdizimi

bsi_iterate(b bsi) → set of integer[]

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
b bsi Genişletilecek BSI

Döndürür: set of integer[] — her satır {cid, value} biçimindedir

Örnek

SELECT bsi_iterate(bsi_build('{1,2,3}', '{2,4,6}'));

Çıktı:

{1,2}
{2,4}
{3,6}

bsi_show

Bir BSI'den ilk N anahtar-değer çiftini biçimlendirilmiş bir metin dizesi olarak döndürür.

Sözdizimi

bsi_show(b bsi, n integer) → text

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
b bsi veya bytea İncelenecek BSI
n integer Görüntülenecek anahtar-değer çifti sayısı

Döndürür: text — kalan çiftlerin sayısının ardından gelen ilk N çift

Örnek

SELECT bsi_show(bsi_build('{1,2,3}', '{2,4,6}'), 2);

Çıktı:

1=2,2=4...left 1

BSI sorgu fonksiyonları

Karşılaştırma fonksiyonları (bsi_eq, bsi_ge, bsi_gt, bsi_le, bsi_lt, bsi_neq, bsi_range) hepsi isteğe bağlı bir bytea filtre parametresini destekler. Sağlandığında, fonksiyon önce BSI'nin EBM'sini filtre bitmap'i ile kesiştirir, ardından karşılaştırmayı elde edilen alt küme üzerinde gerçekleştirir.

bsi_ebm

Bir BSI'nin varlık bitmap'ini (EBM) — yani NULL olmayan tüm cid değerlerinin roaring bitmap'ini — döndürür.

Sözdizimi

bsi_ebm(b bsi) → roaringbitmap

Örnek

SELECT rb_to_array(bsi_ebm(bsi_build('{1,2,3}', '{2,4,6}')));

Çıktı: {1,2,3}

bsi_filter

Yalnızca BSI'nin EBM'si ve verilen bitmap'te ortak olarak bulunan cid değerlerini içeren yeni bir BSI döndürür.

Sözdizimi

bsi_filter(b bsi, crowd bytea) → bsi

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
b bsi veya bytea Kaynak BSI
crowd bytea EBM'yi filtrelemek için kullanılan ve bytea biçimine serileştirilmiş bir roaring bitmap

Döndürür: bsi

Örnek

SELECT bsi_iterate(bsi_filter(bsi_build('{1,2,3}', '{2,4,6}'), rb_build('{1,2}')));

Çıktı:

{1,2}
{2,4}

bsi_eq

BSI değeri verilen eşik değerine eşit olan cid değerlerini döndürür.

Sözdizimi

bsi_eq(b bsi, threshold bigint [, crowd bytea]) → roaringbitmap

Örnek

SELECT rb_to_array(bsi_eq(bsi_build('{1,2,3,4}', '{2,4,4,8}'), 4));

Çıktı: {2,3}

bsi_neq

BSI değeri verilen eşik değerine eşit olmayan cid değerlerini döndürür.

Sözdizimi

bsi_neq(b bsi, threshold bigint [, crowd bytea]) → roaringbitmap

Örnek

SELECT rb_to_array(bsi_neq(bsi_build('{1,2,3,4}', '{2,4,4,8}'), 4));

Çıktı: {1,4}

bsi_lt

BSI değeri verilen eşik değerinden küçük olan cid değerlerini döndürür.

Sözdizimi

bsi_lt(b bsi, threshold bigint [, crowd bytea]) → roaringbitmap

Örnek

SELECT rb_to_array(bsi_lt(bsi_build('{1,2,3,4}', '{2,4,4,8}'), 4));

Çıktı: {1}

bsi_le

BSI değeri verilen eşik değerinden küçük veya ona eşit olan cid değerlerini döndürür.

Sözdizimi

bsi_le(b bsi, threshold bigint [, crowd bytea]) → roaringbitmap

Örnek

SELECT rb_to_array(bsi_le(bsi_build('{1,2,3,4}', '{2,4,4,8}'), 4));

Çıktı: {1,2,3}

bsi_gt

BSI değeri verilen eşik değerinden büyük olan cid değerlerini döndürür.

Sözdizimi

bsi_gt(b bsi, threshold bigint [, crowd bytea]) → roaringbitmap

Örnek

SELECT rb_to_array(bsi_gt(bsi_build('{1,2,3,4}', '{2,4,4,8}'), 4));

Çıktı: {4}

bsi_ge

BSI değeri verilen eşik değerinden büyük veya ona eşit olan cid değerlerini döndürür.

Sözdizimi

bsi_ge(b bsi, threshold bigint [, crowd bytea]) → roaringbitmap

Örnek

SELECT rb_to_array(bsi_ge(bsi_build('{1,2,3,4}', '{2,4,4,8}'), 4));

Çıktı: {2,3,4}

bsi_range

BSI değeri belirtilen iki eşik değeri arasında kalan cid değerlerini döndürür.

Sözdizimi

bsi_range(b bsi, lower bigint, upper bigint [, crowd bytea]) → roaringbitmap

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
b bsi Kaynak BSI
lower bigint Aralığın alt sınırı
upper bigint Aralığın üst sınırı
crowd bytea (İsteğe bağlı) EBM'yi önceden filtrelemek için serileştirilmiş roaring bitmap

Örnek

SELECT rb_to_array(bsi_range(bsi_build('{1,2,3,4}', '{2,4,4,8}'), 3, 5));

Çıktı: {2,3}

bsi_compare

Tek bir giriş noktası üzerinden tüm karşılaştırma türlerini destekleyen birleşik bir karşılaştırma fonksiyonudur.

Sözdizimi

bsi_compare(op text, b bsi [, crowd bytea], val1 bigint [, val2 bigint]) → roaringbitmap

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
op text Karşılaştırma türü: LT, LE, GT, GE, EQ, NEQ veya RANGE
b bsi Kaynak BSI
crowd bytea (İsteğe bağlı) EBM'yi önceden filtrelemek için serileştirilmiş roaring bitmap
val1 bigint Karşılaştırma değeri (RANGE için alt sınır)
val2 bigint (Yalnızca RANGE için gereklidir) Üst sınır

Örnek

SELECT rb_to_array(bsi_compare('RANGE', bsi_build('{1,2,3,4}', '{2,4,4,8}'), 3, 5));

Çıktı: {2,3}

BSI toplam ve analitik fonksiyonları

bsi_sum

BSI değerlerinin toplamını ve eşleşen cid değerlerinin sayısını (EBM kardinalitesi) iki elemanlı bir dizi olarak döndürür.

Sözdizimi

bsi_sum(b bsi [, crowd bytea]) → bigint[]

Döndürür: bigint[] — {sum, cardinality}

Örnek

SELECT bsi_sum(bsi_build('{1,2,3,4}', '{2,4,6,8}'));

Çıktı: {20,4}

bsi_topk

En büyük K BSI değerine sahip olan cid değerlerini döndürür.

Sözdizimi

bsi_topk(b bsi [, crowd bytea], k integer) → roaringbitmap

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
b bsi veya bytea Kaynak BSI
crowd bytea (İsteğe bağlı) EBM'yi önceden filtrelemek için serileştirilmiş roaring bitmap
k integer Döndürülecek en büyük değer sayısı

Örnek

SELECT rb_to_array(bsi_topk(bsi_build('{1,2,3,4,5}', '{2,4,6,8,10}'), 3));

Çıktı: {3,4,5}

bsi_stat

Kullanıcı tanımlı aralıklar genelinde bir BSI'nin değer dağılımını döndürür.

Sözdizimi

bsi_stat(boundaries bigint[], b bsi [, crowd bytea]) → text

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
boundaries bigint[] Dağılım aralıklarını tanımlayan sınır değerleri dizisi
b bsi veya bytea Kaynak BSI
crowd bytea (İsteğe bağlı) EBM'yi önceden filtrelemek için serileştirilmiş roaring bitmap

Döndürür: text — (lower,upper]=count biçiminde sayaçlarla birlikte aralık aralıkları

Örnek

SELECT bsi_stat('{1,3,5}', bsi_build('{1,2,3,4}', '{2,4,6,8}'));

Çıktı: (0,1]=0;(1,3]=1;(3,5]=1;(5,8]=2

bsi_add

EBM'lerinde ortak cid değerleri için iki BSI'nin değerlerini toplar ve yeni bir BSI döndürür.

Sözdizimi

bsi_add(b1 bsi, b2 bsi) → bsi

Bağımsız değişkenler

Bağımsız değişken Tür Açıklama
b1 bsi İlk BSI
b2 bsi İkinci BSI

Örnek

SELECT bsi_iterate(bsi_add(bsi_build('{1,2,3}', '{2,4,6}'), bsi_build('{1,2}', '{2,4}')));

Çıktı:

{1,4}
{2,8}
{3,6}

bsi_add_agg

Birden çok satır genelinde BSI değerlerini toplayan toplam fonksiyonu.

Sözdizimi

bsi_add_agg(b bsi) → bsi

Örnek

SELECT bsi_iterate(bsi_add_agg(bsi_build('{1,2,3}', '{2,4,6}')));

Çıktı:

{1,2}
{2,4}
{3,6}

bsi_merge

EBM'leri örtüşmeyen iki BSI'yi birleştirir. Ayrık veri bölümlerini birleştirirken bu fonksiyonu kullanın.

Sözdizimi

bsi_merge(b1 bsi, b2 bsi) → bsi

Örnek

SELECT bsi_iterate(bsi_merge(bsi_build('{1,2}', '{2,4}'), bsi_build('{3,4}', '{6,8}')));

Çıktı:

{1,2}
{2,4}
{3,6}
{4,8}

bsi_merge_agg

Birden çok BSI satırını tek bir BSI'de birleştiren toplam fonksiyonu. Giriş BSI'lerinin EBM'leri örtüşmemelidir.

Sözdizimi

bsi_merge_agg(b bsi) → bsi

Örnek

SELECT bsi_iterate(bsi_merge_agg(bsi_build('{1,2,3}', '{2,4,6}')));

Çıktı:

{1,2}
{2,4}
{3,6}

bsi_transpose

BSI'deki farklı değerlerin yinelensiz kümesini bir roaring bitmap olarak döndürür.

Sözdizimi

bsi_transpose(b bsi [, crowd bytea]) → roaringbitmap

Örnek

SELECT rb_to_array(bsi_transpose(bsi_build('{1,2,3,4,5}', '{2,4,4,8,8}')));

Çıktı: {2,4,8}

bsi_transpose_with_count

Her farklı değerin, o değere sahip cid girdilerinin sayısıyla eşlendiği yeni bir BSI döndürür.

Sözdizimi

bsi_transpose_with_count(b bsi [, crowd bytea]) → bsi

Örnek

SELECT bsi_iterate(bsi_transpose_with_count(bsi_build('{1,2,3,4,5}', '{2,4,4,8,8}')));

Çıktı:

{2,1}
{4,2}
{8,2}

Çıktıdaki {value, count} şu anlama gelir: 2 değeri bir kez, 4 değeri iki kez ve 8 değeri iki kez görünür.

Sonraki adımlar

  • BSI (beta) — BSI fonksiyonlarını kullanan kullanıcı profili analizi için uçtan uca örnek