RB32_TO_BITMAP
rb32_to_bitmap(expr)
简介
RB32_TO_BITMAP
RB32_TO_BITMAP
函数用于将标准 Roaring Bitmap 32 位序列化格式的二进制数据转换为 CZ 内部的 BITMAP 类型。该函数主要用于与外部系统(如 ClickHouse、Druid 等使用标准 Roaring Bitmap 格式的系统)进行数据互通。
语法
rb32_to_bitmap(expr)
rb32_to_bitmap(expr)
参数说明
expr
expr
:BINARY
BINARY
类型的表达式,包含 Roaring Bitmap 32 位序列化格式的二进制数据。
返回结果
返回
BITMAP
BITMAP
类型。如果输入数据不是合法的 Roaring Bitmap 32 位格式,则返回 NULL。
使用示例
-
将 Roaring Bitmap 32 位二进制数据转换为 BITMAP:
SELECT bitmap_to_string(rb32_to_bitmap(unbase64('OjAAAAUAAAAAAAAAAgAAAAgAAAAJAAAACwAAADAAAAAyAAAANAAAADYAAAA4AAAAoty33+27ivbbow==')));
+---------------------------------------------------------------------------------------------------+
| bitmap_to_string(rb32_to_bitmap(unbase64('OjAAAAUAAAAAAA...'))) |
+---------------------------------------------------------------------------------------------------+
| 56482,188343,572397,652938,762843 |
+---------------------------------------------------------------------------------------------------+
-
与
bitmap_to_rb32
bitmap_to_rb32
配合实现 BITMAP 与 Roaring Bitmap 32 位格式的往返转换:
SELECT bitmap_to_string(rb32_to_bitmap(bitmap_to_rb32(bitmap_build(array(1, 2, 3)))));
+--------------------------------------------------------------------------------+
| bitmap_to_string(rb32_to_bitmap(bitmap_to_rb32(bitmap_build(array(1, 2, 3))))) |
+--------------------------------------------------------------------------------+
| 1,2,3 |
+--------------------------------------------------------------------------------+
-
对转换结果使用 bitmap 函数进行分析:
SELECT bitmap_count(rb32_to_bitmap(bitmap_to_rb32(bitmap_build(array(1, 12, 123, 1234, 12345)))));
+--------------------------------------------------------------------------------------------+
| bitmap_count(rb32_to_bitmap(bitmap_to_rb32(bitmap_build(array(1, 12, 123, 1234, 12345))))) |
+--------------------------------------------------------------------------------------------+
| 5 |
+--------------------------------------------------------------------------------------------+
注意事项
- 当输入参数为 NULL 时,返回结果为 NULL。
- 当输入的二进制数据不是合法的 Roaring Bitmap 32 位序列化格式时,返回 NULL 而非报错。
- Roaring Bitmap 32 位格式仅支持 32 位无符号整数范围(0 ~ 4294967295)内的值。如果 CZ BITMAP 中包含超出此范围的值,
bitmap_to_rb32
bitmap_to_rb32
会返回 NULL,因此无法通过 32 位格式进行往返转换。对于包含超出 32 位范围值的 BITMAP,请使用 rb64_to_bitmap
rb64_to_bitmap
/ bitmap_to_rb64
bitmap_to_rb64
进行 64 位格式的转换。
- 该函数的逆操作为
bitmap_to_rb32
bitmap_to_rb32
,用于将 CZ BITMAP 转换为 Roaring Bitmap 32 位序列化格式。