全部產品
Search
文件中心

Realtime Compute for Apache Flink:BITMAP 位元影像函數

更新時間:Jan 10, 2026

本文將為您介紹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 位整數數組,值按Integer.compareUnsigned排序。

如果參數為NULL,則返回NULL。

BITMAP_TO_STRING(bitmap)

bitmap.bitmapToString()

BITMAP

STRING

將位元影像轉換為字串,值按Integer.compareUnsigned排序。如果字串過長,將被截斷並以...結尾。例如:

  • {}{1,2,3,4,5}

  • 負值(轉換為無符號):{0,1,4294967294,4294967295}

  • 字串過長:{1,2,3,...}

如果參數為NULL,則返回NULL。