Topik ini menjelaskan cara menggunakan fungsi indeks bit-sliced (BSI) di Hologres. Fungsi BSI merupakan ekstensi dari Hologres.
Cara kerjanya
Teknik BSI digunakan untuk menekan pasangan kunci-nilai dalam format cid::int, value::bigint. Tabel berikut menyediakan data sampel untuk membantu memahami prinsip dan struktur BSI.
cid | nilai (desimal) | nilai (biner) |
1 | 3 | 0011 |
2 | 6 | 0110 |
3 | 4 | 0100 |
4 | 10 | 1010 |
5 | 7 | 0111 |
6 | NULL | - |
Tabel sampel tersebut mencakup kolom cid dan dua kolom nilai. Nilai desimal maksimum adalah 10, yang sesuai dengan nilai biner 4-bit. Semua nilai desimal dikonversi menjadi nilai biner 4-bit. Data biner ditelusuri dari bit rendah ke bit tinggi. Roaring bitmap dari setiap array cid yang nilai bitnya adalah 1 dicatat untuk membentuk BSI. Berdasarkan data sampel, BSI dengan irisan berikut dihasilkan:
irisan 0: roaringbitmap '{1,5}'
irisan 1: roaringbitmap '{1,2,4,5}'
irisan 2: roaringbitmap '{2,3,5}'
irisan 3: roaringbitmap '{4}'
BSI juga mencakup informasi berikut:
Bitmap keberadaan (EBM): roaring bitmap yang menyimpan array cid yang tidak kosong. Dalam contoh ini, roaringbitmap '{1,2,3,4,5}' digunakan.
maks: nilai maksimum. Dalam contoh ini, nilainya adalah 10.
min: nilai minimum. Dalam contoh ini, nilainya adalah 3.
bitCount: jumlah bit dari nilai biner yang dikonversi dari nilai desimal. Dalam contoh ini, nilainya adalah 4.
Jika operasi bitmap dilakukan pada data sampel menggunakan roaring bitmap, dan hasil seleksi dari suatu kelompok adalah crowd='{1,3,5}', Anda dapat menggunakan fungsi BSI untuk mendapatkan hasil perhitungan secara cepat. Contoh:
Menghitung jumlah nilai dari kelompok yang dipilih:
rb_and_cardinality(crowd, slice0) × 2<sup>0</sup> + ... + rb_and_cardinality(crowd, slice3) × 2<sup>3</sup> = 14Menghitung 2 nilai teratas dari kelompok yang dipilih:
crowd & slice3 = NULL crowd & slice2 = {3,5} -- 2 nilai teratas adalah {3,5}. {3,5} & slice1 = {5} -- Nilai teratas adalah {5}.
Anda dapat menggunakan algoritma BSI untuk menekan pasangan nilai kunci guna penyimpanan. Perhitungan roaring bitmap dari cids digabungkan dengan perhitungan nilai untuk meningkatkan efisiensi komputasi dalam skenario analisis profil pengguna yang melibatkan tag atribut dan perilaku. Untuk informasi lebih lanjut tentang analisis profil pengguna berdasarkan fungsi BSI, lihat BSI (beta).
Batasan
Hanya Hologres V2.1 dan versi lebih baru yang mendukung fungsi BSI. Jika versi instance Hologres Anda lebih lama dari V2.1, tingkatkan instans Anda. Untuk informasi lebih lanjut, lihat Tingkatkan instans.
Setiap nilai dalam fungsi BSI harus berupa bilangan bulat dari 1 hingga 231 dikurangi 1.
Superuser harus mengeksekusi pernyataan berikut untuk membuat dua ekstensi. Ekstensi harus dibuat pada level database. Anda hanya perlu membuat ekstensi sekali untuk setiap database.
-- Buat ekstensi. Sebelum Anda membuat BSI, Anda harus membuat roaring bitmap. CREATE EXTENSION roaringbitmap; CREATE EXTENSION bsi; -- Hapus ekstensi. DROP EXTENSION bsi; DROP EXTENSION roaringbitmap;PentingKami menyarankan agar Anda tidak mengeksekusi pernyataan
DROP EXTENSION <extension_name> CASCADE;. Pernyataan CASCADE tidak hanya menghapus ekstensi yang ditentukan tetapi juga data ekstensi dan objek yang bergantung pada ekstensi tersebut. Data ekstensi mencakup data PostGIS, data roaring bitmap, data Proxima, data log biner, dan data BSI. Objek mencakup metadata, tabel, tampilan, dan data server.
Fungsi
Konstruktor BSI
Fungsi | Tipe data input | Tipe data output | Deskripsi | Contoh | Hasil yang dikembalikan |
bsi_build | integer[], bigint[] | bsi | Membuat BSI berdasarkan dua entri data satu dimensi. | | |
bsi_add_value | bsi, integer, bigint | bsi | Menambahkan pasangan nilai-kunci ke BSI. | | |
Fungsi ekspansi BSI
Fungsi | Tipe data input | Tipe data output | Deskripsi | Contoh | Hasil yang dikembalikan |
bsi_iterate | bsi | set of integer[] | Memperluas BSI menjadi pasangan nilai-kunci. | | |
bsi_show | bsi/bytea, integer | text | Memperluas BSI menjadi pasangan nilai-kunci dan menampilkan N pasangan nilai-kunci pertama. N adalah bilangan bulat. | | |
Fungsi kueri BSI
Fungsi | Tipe data input | Tipe data output | Deskripsi | Contoh | Hasil yang dikembalikan |
bsi_ebm | bsi/bytea | roaringbitmap | Mengkueri roaring bitmap dari array EBM BSI. | | |
bsi_eq | bsi, bigint [, bytea] | roaringbitmap | Mengkueri bagian parameter input pertama tipe BSI yang sama dengan parameter input kedua tipe BIGINT dan mengembalikan roaring bitmap dari array EBM. Jika parameter input ketiga dikonfigurasi dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input ketiga tipe BYTEA kemudian melakukan perbandingan. | | |
bsi_filter | bsi/bytea, bytea | bsi | Mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input kedua tipe BYTEA kemudian mengembalikan BSI baru. | | |
bsi_ge | bsi, bigint [, bytea] | roaringbitmap | Mengkueri bagian nilai parameter input pertama tipe BSI yang lebih besar dari atau sama dengan nilai parameter input kedua tipe BIGINT, kemudian mengembalikan nilai tipe roaring bitmap yang berisi array EBM. Jika parameter input ketiga ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input ketiga tipe BYTEA kemudian melakukan perbandingan. | | |
bsi_gt | bsi, bigint [, bytea] | roaringbitmap | Mengkueri bagian nilai parameter input pertama tipe BSI yang lebih besar dari nilai parameter input kedua tipe BIGINT kemudian mengembalikan nilai tipe roaring bitmap yang berisi array EBM. Jika parameter input ketiga ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input ketiga tipe BYTEA kemudian melakukan perbandingan. | | |
bsi_le | bsi, bigint [, bytea] | roaringbitmap | Mengkueri bagian nilai parameter input pertama tipe BSI yang kurang dari atau sama dengan nilai parameter input kedua tipe BIGINT kemudian mengembalikan nilai tipe roaring bitmap yang berisi array EBM. Jika parameter input ketiga ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input ketiga tipe BYTEA kemudian melakukan perbandingan. | | |
bsi_lt | bsi, bigint [, bytea] | roaringbitmap | Mengkueri bagian nilai parameter input pertama tipe BSI yang kurang dari nilai parameter input kedua tipe BIGINT, kemudian mengembalikan nilai tipe roaring bitmap yang berisi array EBM. Jika parameter input ketiga ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input ketiga tipe BYTEA kemudian melakukan perbandingan. | | |
bsi_neq | bsi, bigint [, bytea] | roaringbitmap | Mengkueri bagian nilai parameter input pertama tipe BSI yang tidak sama dengan nilai parameter input kedua tipe BIGINT, dan mengembalikan nilai tipe roaring bitmap yang berisi array EBM. Jika parameter input ketiga ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input ketiga tipe BYTEA kemudian melakukan perbandingan. | | |
bsi_range | bsi, bigint, bigint [, bytea] | roaringbitmap | Mengkueri bagian parameter input pertama tipe BSI yang berada di antara nilai-nilai parameter input kedua dan ketiga tipe BIGINT, kemudian mengembalikan nilai tipe roaring bitmap yang berisi array EBM. Jika parameter input ketiga ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input ketiga tipe BYTEA kemudian melakukan perbandingan. | | |
bsi_compare | text, bsi, [bytea,] bigint, bigint | roaringbitmap | Membandingkan dan menyaring BSI.
| | |
Fungsi agregasi dan analitik BSI
Fungsi | Tipe data input | Tipe data output | Deskripsi | Contoh | Hasil yang dikembalikan |
bsi_add | bsi, bsi | bsi | Mengkueri array EBM yang sama dari dua parameter input tipe BSI, menambahkan nilai-nilai dari array EBM, kemudian mengembalikan BSI baru. | | |
bsi_add_agg | bsi | bsi | Menjalankan operasi penambahan dan agregasi. | | |
bsi_merge | bsi, bsi | bsi | Menggabungkan dua BSI. Array EBM dari dua BSI tidak memiliki irisan. | | |
bsi_merge_agg | bsi | bsi | Menggabungkan hasil agregasi. Array EBM dari BSI input tidak memiliki irisan. | | |
bsi_stat | bigint[], bsi/bytea [, bytea] | text | Mengkueri statistik distribusi nilai BSI. Interval distribusi dibagi berdasarkan array nilai batas input. Jika parameter input ketiga ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input kedua tipe BSI dan parameter input ketiga tipe BYTEA kemudian mengkueri statistik distribusi. | | |
bsi_sum | bsi/bytea [, bytea] | bigint[] | Mengembalikan array yang berisi jumlah nilai BSI dan kardinalitas EBM. Jika parameter input kedua ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input kedua tipe BYTEA kemudian menghitung jumlah dan kardinalitas. | | |
bsi_topk | bsi/bytea, [bytea, ] integer | roaringbitmap | Mengkueri array EBM yang sesuai dengan K nilai BSI terbesar dan mengembalikan roaring bitmap yang terdiri dari array EBM. Jika parameter input kedua ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input kedua tipe BYTEA kemudian menghitung K nilai BSI terbesar. | | |
bsi_transpose | bsi/bytea [, bytea] | roaringbitmap | Mengembalikan hasil transposisi BSI, yaitu nilai tipe roaring bitmap setelah deduplikasi. Jika parameter input kedua ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input kedua tipe BYTEA kemudian melakukan transposisi. | | |
bsi_transpose_with_count | bsi/bytea [, bytea] | bsi | Men-transpos nilai tipe BSI, mengumpulkan statistik, dan mengembalikan BSI baru. Jika parameter input kedua ditentukan dan bertipe BYTEA yang diserialisasi dari tipe roaring bitmap, fungsi ini mengkueri irisan antara array EBM parameter input pertama tipe BSI dan parameter input kedua tipe BYTEA kemudian melakukan transposisi dan mengumpulkan statistik. | | |