BITMAP_TO_RB64
bitmap_to_rb64(expr)
简介
BITMAP_TO_RB64
BITMAP_TO_RB64
函数用于将 CZ 内部的 BITMAP 类型转换为标准 Roaring Bitmap 64 位序列化格式的二进制数据。该函数主要用于与外部系统(如 ClickHouse、Druid 等使用标准 Roaring Bitmap 格式的系统)进行数据导出和互通。与
bitmap_to_rb32
bitmap_to_rb32
不同,该函数支持 CZ BITMAP 的完整值范围,不受 32 位无符号整数范围的限制。
语法
bitmap_to_rb64(expr)
bitmap_to_rb64(expr)
参数说明
expr
expr
:BITMAP
BITMAP
类型的表达式,包含 CZ 内部 BITMAP 数据。
返回结果
返回
BINARY
BINARY
类型,内容为 Roaring Bitmap 64 位序列化格式的二进制数据。
使用示例
-
与
rb64_to_bitmap
rb64_to_bitmap
配合实现 BITMAP 与 Roaring Bitmap 64 位格式的往返转换:
SELECT bitmap_to_string(rb64_to_bitmap(bitmap_to_rb64(bitmap_build(array(1, 2, 3)))));
+--------------------------------------------------------------------------------+
| bitmap_to_string(rb64_to_bitmap(bitmap_to_rb64(bitmap_build(array(1, 2, 3))))) |
+--------------------------------------------------------------------------------+
| 1,2,3 |
+--------------------------------------------------------------------------------+
-
支持超出 32 位范围的值(大于 4294967295),这是
bitmap_to_rb64
bitmap_to_rb64
相比 bitmap_to_rb32
bitmap_to_rb32
的关键优势:
SELECT bitmap_to_string(rb64_to_bitmap(bitmap_to_rb64(bitmap_build(array(1, 4294967296, 4294967297)))));
+--------------------------------------------------------------------------------------------------+
| bitmap_to_string(rb64_to_bitmap(bitmap_to_rb64(bitmap_build(array(1, 4294967296, 4294967297))))) |
+--------------------------------------------------------------------------------------------------+
| 1,4294967296,4294967297 |
+--------------------------------------------------------------------------------------------------+
-
使用
base64
base64
编码查看转换后的二进制数据:
SELECT base64(bitmap_to_rb64(bitmap_build(array(1, 2, 3, 4))));
+---------------------------------------------------------+
| base64(bitmap_to_rb64(bitmap_build(array(1, 2, 3, 4)))) |
+---------------------------------------------------------+
| AQAAAAAAAAAAAAAAOjAAAAEAAAAAAAMAEAAAAAEAAgADAAQA |
+---------------------------------------------------------+
注意事项
- 当输入参数为 NULL 时,返回结果为 NULL。
- Roaring Bitmap 64 位格式支持 CZ BITMAP 的完整值范围,不受 32 位无符号整数范围(0 ~ 4294967295)的限制。对于包含超出 32 位范围值的 BITMAP 数据导出场景,应优先使用
bitmap_to_rb64
bitmap_to_rb64
而非 bitmap_to_rb32
bitmap_to_rb32
。
- 该函数的逆操作为
rb64_to_bitmap
rb64_to_bitmap
,用于将 Roaring Bitmap 64 位序列化格式的二进制数据转换为 CZ BITMAP。