Topik ini menjelaskan parameter dalam fungsi bitmap mengaum serta cara menggunakannya di Hologres.
Informasi latar belakang
Bitmap mengaum adalah bitmap terkompresi yang efisien, digunakan dalam berbagai bahasa pemrograman populer pada platform data besar. Bitmap ini cocok untuk dimensi ultra-high-cardinality dan dapat digunakan untuk deduplikasi, penyaringan berbasis tag, serta pengumpulan data deret waktu.
Dalam bitmap mengaum, bilangan bulat 32-bit dibagi menjadi 216 chunk. Bilangan bulat dalam setiap chunk memiliki 16 bit paling signifikan yang sama. Enam belas bit paling tidak signifikan dari bilangan bulat disimpan dalam sebuah kontainer. Bitmap mengaum menyimpan kontainer dalam larik dinamis sebagai indeks utama. Dua jenis kontainer tersedia: kontainer array untuk chunk yang jarang dan kontainer bitmap untuk chunk yang padat. Kontainer array dapat menyimpan hingga 4.096 bilangan bulat, sedangkan kontainer bitmap dapat menampung lebih dari 4.096 bilangan bulat.
Bitmap mengaum memanfaatkan struktur penyimpanan ini untuk mengambil nilai tertentu dengan cepat. Selain itu, bitmap mengaum mendukung operasi bitwise seperti AND, OR, dan XOR antara dua jenis kontainer tersebut, sehingga memberikan kinerja penyimpanan dan komputasi yang sangat baik.
Batasan
Perhatikan batasan berikut saat menggunakan fungsi bitmap mengaum di Hologres:
Hanya instance eksklusif Hologres V0.10 ke atas yang mendukung fungsi-fungsi ini.
CatatanVersi instance Hologres Anda dapat dilihat di konsol Hologres. Jika versi instance Anda lebih awal dari V0.10, tingkatkan instance secara manual di konsol Hologres atau bergabunglah dengan grup DingTalk untuk dukungan teknis. Untuk informasi lebih lanjut tentang peningkatan versi instance Hologres secara manual, lihat Kesalahan Persiapan Peningkatan Umum. Untuk informasi lebih lanjut tentang dukungan teknis, lihat Dapatkan Dukungan Online untuk Hologres.
Fungsi-fungsi ini dimuat ke skema public secara default dan hanya dapat dimuat ke skema public.
Mulai dari Hologres V3.1, tipe data RoaringBitmap64 didukung. Beberapa fungsi bitmap mengaum dapat memproses data bertipe RoaringBitmap64. Namun, saat memproses data bertipe RoaringBitmap64, fungsi-fungsi ini tidak mendukung parameter input konstan.
Sebelum menggunakan fungsi bitmap mengaum, Anda harus mengeksekusi pernyataan berikut untuk mengaktifkan EXTENSION. EXTENSION adalah fungsi tingkat database yang hanya perlu dieksekusi sekali untuk setiap database. Jika Anda membuat database baru, Anda harus mengeksekusi pernyataan ini lagi.
--Buat ekstensi. CREATE EXTENSION roaringbitmap;Untuk menghapus ekstensi fungsi bitmap mengaum, eksekusi pernyataan berikut:
DROP EXTENSION roaringbitmap;PentingKami merekomendasikan agar Anda tidak mengeksekusi pernyataan
DROP EXTENSION <extension_name> CASCADE;untuk menghapus ekstensi. Pernyataan CASCADE akan menghapus tidak hanya ekstensi yang ditentukan tetapi juga data ekstensi dan objek yang bergantung pada ekstensi tersebut. Data ekstensi mencakup data PostGIS, data bitmap mengaum, data Proxima, data log biner, dan data BSI. Objek mencakup metadata, tabel, tampilan, dan data server.Anda tidak dapat menentukan bidang yang menyimpan bitmap mengaum sebagai indeks bitmap atau kamus.
Saat membuat tabel yang berisi kolom bitmap mengaum, Anda harus secara eksplisit menentukan tipe data kolom tersebut sebagai RoaringBitmap (32-bit) atau RoaringBitmap64 (64-bit). Kedua tipe data bitmap mengaum tidak dapat digunakan dalam perhitungan campuran.
-- Buat tabel yang berisi kolom bitmap mengaum 32-bit. CREATE TABLE t_rb_32 ( bucket int, x roaringbitmap ); -- Buat tabel yang berisi kolom bitmap mengaum 64-bit. CREATE TABLE t_rb_64 ( bucket int, x roaringbitmap64 ); -- Perhitungan campuran dari dua jenis data bitmap mengaum tidak didukung dan kesalahan akan dikembalikan. -- 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;
Operator
Operator berikut mendukung pemrosesan data bertipe RoaringBitmap dan RoaringBitmap64.
Operator | Tipe Input | Tipe Output | Deskripsi | Contoh | Catatan |
& | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | Sama dengan tipe input | Menjalankan operasi AND. | rb_build('{1,2,3}') & rb_build('{3,4,5}') | Tidak ada |
| | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | Sama dengan tipe input | Menjalankan operasi OR. | rb_build('{1,2,3}') | rb_build('{3,4,5}') | Tidak ada |
RoaringBitmap | RoaringBitmap64, INTEGER | RoaringBitmap | RoaringBitmap64 | rb_build('{1,2,3}') | 6 | Hanya Hologres V1.3.16 dan yang lebih baru yang mendukung operator ini. | ||
INTEGER, RoaringBitmap | RoaringBitmap64 | RoaringBitmap | RoaringBitmap64 | 6 | rb_build('{1,2,3}') | Hanya Hologres V1.3.16 dan yang lebih baru yang mendukung operator ini. | ||
# | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | Sama dengan tipe input | Menjalankan operasi XOR. | rb_build('{1,2,3}') # rb_build('{3,4,5}') | Tidak ada |
<< | RoaringBitmap | RoaringBitmap64, BIGINT | RoaringBitmap | RoaringBitmap64 | Menggeser nilai ke kiri sejumlah tempat tertentu. | rb_build('{1,2,3}') << 2 | Hanya Hologres V1.3.16 dan yang lebih baru yang mendukung operator ini. |
>> | RoaringBitmap | RoaringBitmap64, BIGINT | RoaringBitmap | RoaringBitmap64 | Menggeser nilai ke kanan sejumlah tempat tertentu. | rb_build('{1,2,3}') >> 3 | Hanya Hologres V1.3.16 dan yang lebih baru yang mendukung operator ini. |
- | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | Sama dengan tipe input | Menjalankan operasi ANDNOT. | rb_build('{1,2,3}') - rb_build('{3,4,5}') | Hanya Hologres V1.3.16 dan yang lebih baru yang mendukung operator ini. |
RoaringBitmap | RoaringBitmap64, INTEGER | RoaringBitmap | RoaringBitmap64 | rb_build('{1,2,3}') - 3 | Tidak ada | ||
@> | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | BOOLEAN | Memeriksa apakah A mengandung B. | rb_build('{1,2,3}') @> rb_build('{3,4,5}') | Tidak ada |
RoaringBitmap | RoaringBitmap64, INTEGER | BOOLEAN | rb_build('{1,2,3}') @> 3 | Tidak ada | ||
<@ | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | BOOLEAN | Memeriksa apakah A terkandung oleh B. | rb_build('{1,2,3}') <@ rb_build('{3,4,5}') | Tidak ada |
integer, RoaringBitmap | RoaringBitmap64 | BOOLEAN | 3 <@ rb_build('{1,2,3}') | Tidak ada | ||
&& | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | BOOLEAN | Memeriksa apakah A berpotongan dengan B. | rb_build('{1,2,3}') && rb_build('{3,4,5}') | Tidak ada |
= | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | BOOLEAN | Memeriksa apakah dua objek sama. | rb_build('{1,2,3}') = rb_build('{3,4,5}') | Tidak ada |
<> | RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64 | BOOLEAN | Memeriksa apakah dua objek tidak sama. | rb_build('{1,2,3}') <> rb_build('{3,4,5}') | Tidak ada |
Fungsi bitmap mengaum
Fungsi yang mendukung pemrosesan data bertipe RoaringBitmap dan RoaringBitmap64
Fungsi
Tipe Input
Tipe Output
Deskripsi
Contoh
rb_build_agg
INTEGER|BIGINT
Ketika tipe input adalah:
INTEGER: Mengembalikan tipe RoaringBitmap.
BIGINT: Mengembalikan tipe RoaringBitmap64.
Menggabungkan offset ke dalam bitmap mengaum.
CatatanHanya Hologres V3.1 dan yang lebih baru yang mendukung tipe parameter input BIGINT dan mengembalikan tipe RoaringBitmap64.
rb_build_agg(1)rb_cardinality
RoaringBitmap | RoaringBitmap64
INTEGER
Menghitung cardinality.
rb_cardinality(rb_build('{1,2,3,4,5}'))rb_and_cardinality
RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64
INTEGER
Menghitung cardinality dengan melakukan operasi AND pada dua bitmap mengaum.
rb_and_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))rb_or_cardinality
RoaringBitmap | RoaringBitmap64, RoaringBitmap | RoaringBitmap64
INTEGER
Menghitung cardinality dengan melakukan operasi OR pada dua bitmap mengaum.
rb_or_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))rb_range
RoaringBitmap | RoaringBitmap64, BIGINT, BIGINT
RoaringBitmap | RoaringBitmap64
Mengembalikan koleksi baru yang berkisar dari posisi awal (termasuk) hingga posisi akhir (tidak termasuk). Posisi awal adalah 1.
CatatanHanya Hologres V1.3.16 dan yang lebih baru yang mendukung fungsi ini.
rb_range(rb_build('{1,2,3}'), 2, 3)rb_minimum
RoaringBitmap | RoaringBitmap64
INTEGER
Mengembalikan offset minimum dalam bitmap mengaum. Jika bitmap mengaum kosong, -1 dikembalikan.
rb_minimum(rb_build('{1,2,3}'))rb_maximum
RoaringBitmap | RoaringBitmap64
INTEGER
Mengembalikan offset maksimum dalam bitmap mengaum. Jika bitmap mengaum kosong, 0 dikembalikan.
rb_maximum(rb_build('{1,2,3}'))rb_to_array
RoaringBitmap | RoaringBitmap64
INTEGER[]
Mengembalikan array integer dari mana bitmap mengaum dibuat.
rb_to_array(rb_build('{1,2,3}'))rb_to_array_string
RoaringBitmap | RoaringBitmap64, TEXT
TEXT
Mengembalikan string yang dihasilkan dengan menggabungkan array integer dari mana bitmap mengaum dibuat dengan teks input.
rb_to_array_string(rb_build('{1,2,3}'),',')Fungsi yang mendukung pemrosesan hanya data bertipe RoaringBitmap64
Fungsi
Tipe Input
Tipe Output
Deskripsi
Contoh
rb64_build
BIGINT[]
RoaringBitmap64
Membuat bitmap mengaum 64-bit dari array.
CatatanHologres V3.1 dan yang lebih baru mendukung fungsi ini.
--Persiapkan 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;Hasil berikut dikembalikan:
rb_num num \x030100000000000000000000003a30000001000000000001001000000001000200 {1,2}Fungsi yang mendukung pemrosesan hanya data bertipe RoaringBitmap
Fungsi
Tipe Input
Tipe Output
Deskripsi
Contoh
rb_build
INTEGER[]
RoaringBitmap
Membuat bitmap mengaum 32-bit dari array.
--Hasil berikut dikembalikan: \x3a3000000100000000000000100000000100 SELECT rb_build_agg(1);roaringbitmap_in
TEXT
RoaringBitmap
Mengonversi data bertipe TEXT menjadi tipe RoaringBitmap.
CatatanHologres V2.1.33 dan yang lebih baru mendukung fungsi ini.
--Buat tabel sampel. CREATE TABLE rb_text ( id int, a text ); -- Masukkan data ke dalam tabel sampel. INSERT INTO rb_text VALUES (1, '\x3a300000010000000000090010000000010002000300040005000600070008000900c800'); --Ubah tipe data bidang a menjadi tipe RoaringBitmap dan lakukan operasi AND. SELECT rb_and_cardinality_agg (roaringbitmap_in (a::cstring)) FROM rb_text; --Hasil berikut dikembalikan: rb_and_cardinality_agg| ----------------------- 10|rb_index
RoaringBitmap, INTEGER
BIGINT
Mengembalikan indeks elemen dalam data bitmap mengaum yang dimulai dari 0. Jika elemen tidak ada, -1 dikembalikan.
CatatanHanya Hologres V1.3.16 dan yang lebih baru yang mendukung fungsi ini.
rb_index(rb_build('{1,2,3}'),3)rb_and_null2empty
RoaringBitmap, RoaringBitmap
RoaringBitmap
Menjalankan operasi AND. Jika nilai parameter input adalah null, fungsi menganggap nilai parameter tersebut sebagai kosong.
CatatanHanya Hologres V1.1.42 dan yang lebih baru yang mendukung fungsi ini.
rb_and_null2empty(rb_build(null),rb_build('{3,4,5}'))rb_or_null2empty
RoaringBitmap, RoaringBitmap
RoaringBitmap
Menjalankan operasi OR. Jika nilai parameter input adalah null, fungsi menganggap nilai parameter tersebut sebagai kosong.
CatatanHanya Hologres V1.1.42 dan yang lebih baru yang mendukung fungsi ini.
rb_or_null2empty(rb_build(null),rb_build('{3,4,5}'))rb_andnot_null2empty
RoaringBitmap, RoaringBitmap
RoaringBitmap
Menjalankan operasi ANDNOT. Jika nilai parameter input adalah null, fungsi menganggap nilai parameter tersebut sebagai kosong.
CatatanHanya Hologres V1.1.42 dan yang lebih baru yang mendukung fungsi ini.
rb_andnot_null2empty(rb_build(null),rb_build('{3,4,5}'))rb_and_null2empty_cardinality
RoaringBitmap, RoaringBitmap
INTEGER
Menghitung cardinality dengan melakukan operasi AND pada dua bitmap mengaum. Jika nilai parameter input adalah null, fungsi menganggap nilai parameter tersebut sebagai kosong.
CatatanHanya Hologres V1.1.42 dan yang lebih baru yang mendukung fungsi ini.
rb_and_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))rb_or_null2empty_cardinality
RoaringBitmap, RoaringBitmap
INTEGER
Menghitung cardinality dengan melakukan operasi OR pada dua bitmap mengaum. Jika nilai parameter input adalah null, fungsi menganggap nilai parameter tersebut sebagai kosong.
CatatanHanya Hologres V1.1.42 dan yang lebih baru yang mendukung fungsi ini.
rb_or_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))rb_xor_cardinality
RoaringBitmap, RoaringBitmap
INTEGER
Menghitung cardinality dengan melakukan operasi XOR pada dua bitmap mengaum.
rb_xor_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))rb_andnot_cardinality
RoaringBitmap, RoaringBitmap
INTEGER
Menghitung cardinality dengan melakukan operasi ANDNOT pada dua bitmap mengaum.
rb_andnot_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))rb_andnot_null2empty_cardinality
RoaringBitmap, RoaringBitmap
INTEGER
Menghitung cardinality dengan melakukan operasi ANDNOT pada dua bitmap mengaum. Jika nilai parameter input adalah null, fungsi menganggap nilai parameter tersebut sebagai kosong.
CatatanHanya Hologres V1.1.42 dan yang lebih baru yang mendukung fungsi ini.
rb_andnot_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))rb_is_empty
RoaringBitmap
BOOLEAN
Memeriksa apakah bitmap mengaum kosong.
rb_is_empty(rb_build('{1,2,3,4,5}'))rb_fill
RoaringBitmap, BIGINT, BIGINT
RoaringBitmap
Mengisi rentang tertentu tanpa akhir rentang dalam bitmap mengaum.
CatatanHanya Hologres V1.3.16 dan yang lebih baru yang mendukung fungsi ini.
rb_fill(rb_build('{1,2,3}'), 5, 7)rb_clear
RoaringBitmap, BIGINT, BIGINT
RoaringBitmap
Menghapus rentang tertentu tanpa akhir rentang dalam bitmap mengaum.
CatatanHanya Hologres V1.3.16 dan yang lebih baru yang mendukung fungsi ini.
rb_clear(rb_build('{1,2,3}'), 2, 3)rb_contains_bitmap
RoaringBitmap, RoaringBitmap
BOOLEAN
Memeriksa apakah bitmap pertama mengandung bitmap kedua.
rb_contains(rb_build('{1,2,3}'),rb_build('{3}'))rb_flip
RoaringBitmap,INTEGER,INTEGER
RoaringBitmap
Membalik offset yang ditentukan dalam bitmap mengaum.
rb_flip(rb_build('{1,2,3}'),2,3)rb_range_cardinality
RoaringBitmap, BIGINT, BIGINT
BIGINT
Mengembalikan cardinality dari rentang dari posisi awal (termasuk) hingga posisi akhir (tidak termasuk). Posisi awal adalah 1.
CatatanHanya Hologres V1.3.16 dan yang lebih baru yang mendukung fungsi ini.
rb_range_cardinality(rb_build('{1,2,3}'), 2, 3)rb_rank
RoaringBitmap,INTEGER
INTEGER
Mengembalikan jumlah elemen yang kurang dari atau sama dengan offset tertentu dalam bitmap mengaum.
rb_rank(rb_build('{1,2,3}'),3)rb_jaccard_dist
RoaringBitmap, RoaringBitmap
DOUBLE PRECISION
Mengembalikan jarak Jaccard atau koefisien kesamaan Jaccard antara dua bitmap mengaum.
CatatanHanya Hologres V1.3.16 dan yang lebih baru yang mendukung fungsi ini.
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
Mengembalikan subset [bitset_offset,bitset_offset+bitset_limit) dari rentang [range_start,range_end) dalam bitmap mengaum.
rb_select(rb_build('{1,2,3,4,5,6,7,8,9}'), 5, 2)
rb_iterate
RoaringBitmap
Set of Integer
Mengembalikan daftar offset dari bitmap mengaum.
rb_iterate(rb_build('{1,2,3}'))
Fungsi agregat bitmap mengaum
Fungsi yang mendukung pemrosesan data bertipe RoaringBitmap dan RoaringBitmap64
Fungsi
Tipe Input
Tipe Output
Deskripsi
Contoh
rb_or_agg
RoaringBitmap | RoaringBitmap64
Sama dengan tipe input
Menjalankan operasi agregat OR.
rb_or_agg(rb_build('{1,2,3}'))rb_and_agg
RoaringBitmap | RoaringBitmap64
Sama dengan tipe input
Menjalankan operasi agregat AND.
rb_and_agg(rb_build('{1,2,3}'))rb_or_cardinality_agg
RoaringBitmap | RoaringBitmap64
INTEGER
Menghitung cardinality dari operasi agregat OR pada dua bitmap mengaum.
rb_or_cardinality_agg(rb_build('{1,2,3}'))rb_and_cardinality_agg
RoaringBitmap | RoaringBitmap64
INTEGER
Menghitung cardinality dari operasi agregat AND pada dua bitmap mengaum.
rb_and_cardinality_agg(rb_build('{1,2,3}'))Fungsi yang mendukung pemrosesan hanya data bertipe RoaringBitmap
Fungsi
Tipe Input
Tipe Output
Deskripsi
Contoh
rb_xor_agg
RoaringBitmap
RoaringBitmap
Menjalankan operasi agregat XOR.
rb_xor_agg(rb_build('{1,2,3}'))rb_xor_cardinality_agg
RoaringBitmap
INTEGER
Menghitung cardinality dari operasi agregat XOR pada dua bitmap mengaum.
rb_xor_cardinality_agg(rb_build('{1,2,3}'))
Fungsi bitmap mengaum lainnya
Fungsi berikut mendukung pemrosesan hanya data bertipe RoaringBitmap.
Fungsi | Tipe Input | Tipe Output | Deskripsi | Contoh |
roaringbitmap_text | TEXT, BOOLEAN | RoaringBitmap | Mendeserialisasi data biner RoaringBitmap bertipe TEXT ke dalam struktur RoaringBitmap. Parameter kedua menunjukkan apakah akan memverifikasi format. Kami merekomendasikan untuk mengatur parameter ini ke true. Jika tidak, data bitmap yang tidak valid akan dikembalikan. |
|
rb_to_text | RoaringBitmap | TEXT | Mengonversi struktur RoaringBitmap menjadi data biner RoaringBitmap bertipe TEXT untuk output. |
|
Contoh
Berikut adalah contoh penggunaan fungsi bitmap mengaum.
Pasang ekstensi.
CREATE EXTENSION roaringbitmap;Buat tabel untuk menyimpan data bitmap mengaum.
-- Buat tabel bernama t1. CREATE TABLE public.t1 (id integer, bitmap roaringbitmap);Gunakan fungsi rb_build untuk menyisipkan data bitmap mengaum ke dalam tabel.
-- Setel nilai bit array menjadi 1. INSERT INTO public.t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]); -- Setel nilai bit beberapa elemen menjadi 1 dan agregasikan nilai bit tersebut ke dalam bitmap mengaum. INSERT INTO public.t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;Lakukan operasi bitwise seperti OR, AND, XOR, dan 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 ;Lakukan operasi agregat bitwise seperti OR, AND, XOR, dan BUILD untuk menghasilkan bitmap mengaum baru.
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;Hitung cardinality dari bitmap mengaum. Cardinality adalah jumlah bit yang disetel menjadi 1 dalam bitmap mengaum.
SELECT RB_CARDINALITY(bitmap) FROM public.t1;Dapatkan subskrip bit yang disetel menjadi 1.
SELECT RB_ITERATE(bitmap) FROM public.t1 WHERE id = 1;Konversikan bitmap mengaum menjadi array.
SELECT RB_TO_ARRAY(bitmap) FROM public.t1 WHERE id = 1;