Topik ini menjelaskan tipe data BITMAP dan fungsi terkait yang didukung oleh Realtime Compute for Apache Flink.
Batasan
Hanya Ververica Runtime (VVR) 11.5 dan versi Realtime Compute for Apache Flink yang lebih baru yang mendukung tipe data BITMAP beserta fungsi terkaitnya.
Tipe data BITMAP
BITMAP adalah tipe data yang menyimpan himpunan bilangan bulat tak bertanda 32-bit. Tipe ini menggunakan format kompresi rotasi otomatis berdasarkan standar RoaringBitmap, sehingga ideal untuk penyimpanan efisien, deduplikasi presisi tinggi, serta operasi himpunan pada data berskala besar.
Format serialisasi standarnya memungkinkan interoperabilitas biner yang lancar dengan sistem eksternal.
Rekomendasi penggunaan
Saat menggunakan fungsi agregat BITMAP, aktifkan MiniBatch atau gunakan agregasi window untuk mengurangi overhead akses state dan meningkatkan performa secara signifikan.
Fungsi agregat BITMAP memberikan performa terbaik dengan input Append-Only. Performanya menurun drastis dengan input Retraction; hindari agregasi GroupBy bertingkat pada BITMAP.
BITMAP saat ini hanya mendukung tipe INT (bilangan bulat 32-bit). Untuk menyimpan tipe data lain:
Untuk tipe BIGINT (bilangan bulat 64-bit), buat kamus untuk memetakan nilai ke tipe INT berdasarkan karakteristik data atau gunakan bucketing untuk penyimpanan.
Untuk tipe non-bilangan bulat, buat kamus untuk memetakan nilai ke tipe INT.
Tipe BITMAP melakukan kompresi jauh lebih efektif pada data kontinu dan padat dibandingkan data diskrit dan jarang. Gunakan pemetaan data untuk meningkatkan efisiensi kompresi BITMAP.
Daftar fungsi
Fungsi BITMAP yang didukung terbagi dalam empat kategori utama: pembentukan bitmap, operasi logika, informasi statistik, dan konversi format.
Fungsi agregat
SQL | Table API | Input type | Output type | Description |
BITMAP_BUILD_AGG(value) | value.bitmapBuildAgg() | INT | BITMAP | Mengagregasi bilangan bulat 32-bit ke dalam sebuah bitmap. |
BITMAP_AND_AGG(bitmap) | bitmap.bitmapAndAgg() | BITMAP | BITMAP | Mengagregasi irisan (AND) dari beberapa bitmap. |
BITMAP_OR_AGG(bitmap) | bitmap.bitmapOrAgg() | BITMAP | BITMAP | Mengagregasi gabungan (OR) dari beberapa bitmap. |
BITMAP_XOR_AGG(bitmap) | bitmap.bitmapXorAgg() | BITMAP | BITMAP | Mengagregasi exclusive OR (XOR) dari beberapa bitmap. |
BITMAP_BUILD_CARDINALITY_AGG(value) | value.bitmapBuildCardinalityAgg() | INT | BIGINT | Mengagregasi bilangan bulat 32-bit ke dalam sebuah bitmap dan mengembalikan cardinalitas 64-bit-nya. |
BITMAP_AND_CARDINALITY_AGG(bitmap) | bitmap.bitmapAndCardinalityAgg() | BITMAP | BIGINT | Mengagregasi irisan (AND) dari beberapa bitmap dan mengembalikan cardinalitas 64-bit-nya. |
BITMAP_OR_CARDINALITY_AGG(bitmap) | bitmap.bitmapOrCardinalityAgg() | BITMAP | BIGINT | Mengagregasi gabungan (OR) dari beberapa bitmap dan mengembalikan cardinalitas 64-bit-nya. |
BITMAP_XOR_CARDINALITY_AGG(bitmap) | bitmap.bitmapXorCardinalityAgg() | BITMAP | BIGINT | Mengagregasi exclusive OR (XOR) dari beberapa bitmap dan mengembalikan cardinalitas 64-bit-nya. |
Pada skenario statistik cardinalitas, jika Anda tidak memerlukan bitmap spesifiknya, gunakan BITMAP_XX_CARDINALITY_AGG() daripada BITMAP_CARDINALITY(BITMAP_XX_AGG()). Kedua fungsi menghasilkan output yang sama, tetapi yang pertama menawarkan performa lebih baik.
Fungsi skalar
SQL | Table API | Input type | Output type | Description |
BITMAP_BUILD(array) | array.bitmapBuild() | ARRAY<INT> | BITMAP | Membuat bitmap dari array bilangan bulat 32-bit. Jika parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_CARDINALITY(bitmap) | bitmap.bitmapCardinality() | BITMAP | BIGINT | Mengembalikan cardinalitas 64-bit dari sebuah bitmap. Jika parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_AND(bitmap1, bitmap2) | bitmap1.bitmapAnd(bitmap2) | BITMAP, BITMAP | BITMAP | Menghitung irisan (AND) dari dua bitmap. Jika salah satu parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_OR(bitmap1, bitmap2) | bitmap1.bitmapOr(bitmap2) | BITMAP, BITMAP | BITMAP | Menghitung gabungan (OR) dari dua bitmap. Jika salah satu parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_XOR(bitmap1, bitmap2) | bitmap1.bitmapXor(bitmap2) | BITMAP, BITMAP | BITMAP | Menghitung exclusive OR (XOR) dari dua bitmap. Jika salah satu parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_ANDNOT(bitmap1, bitmap2) | bitmap1.bitmapAndnot(bitmap2) | BITMAP, BITMAP | BITMAP | Menghitung selisih (AND NOT) dari dua bitmap. Jika salah satu parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_FROM_BYTES(bytes) | bytes.bitmapFromBytes() | BYTES | BITMAP | Mengubah array byte menjadi bitmap. Fungsi ini mengikuti format yang ditentukan dalam spesifikasi format RoaringBitmap 32-bit. Jika parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_TO_BYTES(bitmap) | bitmap.bitmapToBytes() | BITMAP | BYTES | Mengubah bitmap menjadi array byte. Fungsi ini mengikuti format yang ditentukan dalam spesifikasi format RoaringBitmap 32-bit. Jika parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_TO_ARRAY(bitmap) | bitmap.bitmapToArray() | BITMAP | ARRAY<INT> | Mengubah bitmap menjadi array bilangan bulat 32-bit. Nilai-nilainya diurutkan berdasarkan Jika parameter bernilai NULL, fungsi ini mengembalikan NULL. |
BITMAP_TO_STRING(bitmap) | bitmap.bitmapToString() | BITMAP | STRING | Mengubah bitmap menjadi string. Nilai-nilainya diurutkan berdasarkan
Jika parameter bernilai NULL, fungsi ini mengembalikan NULL. |