本文將為您介紹Realtime ComputeFlink版支援的BITMAP位元影像類型及相關函數的使用方法。
使用限制
僅Realtime ComputeFlink版VVR 11.5及以上版本支援BITMAP位元影像類型及相關函數。
BITMAP位元影像類型
BITMAP是一種儲存32位不帶正負號的整數集合的位元影像資料類型,基於RoaringBitmap標準實現了自適應的壓縮格式,適合用於大規模資料的高效儲存、精確去重計數和集合代數運算。
憑藉標準化的序列化格式,位元影像資料能夠與外部系統實現二進位層級的無縫互連。
使用建議
使用BITMAP彙總函式時,強烈建議開啟MiniBatch或在視窗彙總中使用,可以最佳化狀態訪問開銷、顯著提升效能。
BITMAP彙總函式在處理Append-Only輸入時效能最佳,但在處理Retraction輸入時效能明顯下降,建議盡量避免對BITMAP進行多級GroupBy彙總。
BITMAP目前僅支援儲存INT類型(32位整數),如需儲存其他類型:
BIGINT類型(64位整數):根據實際資料特徵建立字典映射到INT類型,或分桶儲存。
非整型:建立字典映射到INT類型。
BITMAP類型對於連續稠密資料的壓縮效果顯著優於離散稀疏資料,可以通過資料對應提高BITMAP壓縮效率。
函數列表
BITMAP目前支援的函數主要包括位元影像構造、邏輯運算、統計資訊和格式轉換四個類別。
彙總函式
SQL | Table API | 輸入類型 | 輸出類型 | 描述 |
BITMAP_BUILD_AGG(value) | value.bitmapBuildAgg() | INT | BITMAP | 將 32 位整數彙總成位元影像。 |
BITMAP_AND_AGG(bitmap) | bitmap.bitmapAndAgg() | BITMAP | BITMAP | 彙總多個位元影像的交集(AND)。 |
BITMAP_OR_AGG(bitmap) | bitmap.bitmapOrAgg() | BITMAP | BITMAP | 彙總多個位元影像的並集(OR)。 |
BITMAP_XOR_AGG(bitmap) | bitmap.bitmapXorAgg() | BITMAP | BITMAP | 彙總多個位元影像的異或(XOR)。 |
BITMAP_BUILD_CARDINALITY_AGG(value) | value.bitmapBuildCardinalityAgg() | INT | BIGINT | 將 32 位整數彙總成位元影像並返回其 64 位元基數。 |
BITMAP_AND_CARDINALITY_AGG(bitmap) | bitmap.bitmapAndCardinalityAgg() | BITMAP | BIGINT | 彙總多個位元影像的交集(AND)並返回其 64 位元基數。 |
BITMAP_OR_CARDINALITY_AGG(bitmap) | bitmap.bitmapOrCardinalityAgg() | BITMAP | BIGINT | 彙總多個位元影像的並集(OR)並返回其 64 位元基數。 |
BITMAP_XOR_CARDINALITY_AGG(bitmap) | bitmap.bitmapXorCardinalityAgg() | BITMAP | BIGINT | 彙總多個位元影像的異或(XOR)並返回其 64 位元基數。 |
基數統計情境中,若不需要具體位元影像,建議使用BITMAP_XX_CARDINALITY_AGG()替代BITMAP_CARDINALITY(BITMAP_XX_AGG())的寫法,兩者功能一致,但前者效能更優。
純量涵式
SQL | Table API | 輸入類型 | 輸出類型 | 描述 |
BITMAP_BUILD(array) | array.bitmapBuild() | ARRAY<INT> | BITMAP | 從 32 位整數數組建立位元影像。 如果參數為NULL,則返回NULL。 |
BITMAP_CARDINALITY(bitmap) | bitmap.bitmapCardinality() | BITMAP | BIGINT | 返回位元影像的 64 位元基數。 如果參數為NULL,則返回NULL。 |
BITMAP_AND(bitmap1, bitmap2) | bitmap1.bitmapAnd(bitmap2) | BITMAP, BITMAP | BITMAP | 計算兩個位元影像的交集 (AND)。 如果任一參數為NULL,則返回NULL。 |
BITMAP_OR(bitmap1, bitmap2) | bitmap1.bitmapOr(bitmap2) | BITMAP, BITMAP | BITMAP | 計算兩個位元影像的並集(OR)。 如果任一參數為NULL,則返回NULL。 |
BITMAP_XOR(bitmap1, bitmap2) | bitmap1.bitmapXor(bitmap2) | BITMAP, BITMAP | BITMAP | 計算兩個位元影像的異或(XOR)。 如果任一參數為NULL,則返回NULL。 |
BITMAP_ANDNOT(bitmap1, bitmap2) | bitmap1.bitmapAndnot(bitmap2) | BITMAP, BITMAP | BITMAP | 計算兩個位元影像的差集(AND NOT)。 如果任一參數為NULL,則返回NULL。 |
BITMAP_FROM_BYTES(bytes) | bytes.bitmapFromBytes() | BYTES | BITMAP | 將位元組數群組轉換為位元影像。遵循32-bit RoaringBitmap format specification定義的格式。 如果參數為NULL,則返回NULL。 |
BITMAP_TO_BYTES(bitmap) | bitmap.bitmapToBytes() | BITMAP | BYTES | 將位元影像轉換為位元組數組。遵循32-bit RoaringBitmap format specification定義的格式。 如果參數為NULL,則返回NULL。 |
BITMAP_TO_ARRAY(bitmap) | bitmap.bitmapToArray() | BITMAP | ARRAY<INT> | 將位元影像轉換為 32 位整數數組,值按 如果參數為NULL,則返回NULL。 |
BITMAP_TO_STRING(bitmap) | bitmap.bitmapToString() | BITMAP | STRING | 將位元影像轉換為字串,值按
如果參數為NULL,則返回NULL。 |