在 StarRocks 中,Bitmap 索引和 Bitmap 去重是两种基于位图技术的核心功能,但它们的应用场景、实现机制以及优化目标存在显著差异。以下从定义、作用、实现原理、适用场景及限制等方面进行详细对比分析:
=)、范围查询(
>,
<等)和
IS NULL查询。bitmap_and()、
bitmap_or()等函数实现多列联合查询的高效筛选(例如用户标签组合查询)。减少数据扫描:通过位图的位运算快速确定符合条件的数据页(Page),降低 I/O 和计算开销。
gender的字典可能为
{'male': 1, 'female': 2},对应的位图标记行是否存在该值。
自适应选择机制:根据过滤条件涉及的列值数量与基数的比例(
bitmap_max_filter_ratio参数),动态决定是否使用索引。
在用户画像、实时报表、行为分析等场景中,Bitmap 索引能够显著提升查询速度,例如统计男女用户数量或快速过滤特定条件的数据。物化视图结合 Bitmap 索引,可以进一步优化复杂查询的性能。
FLOAT、
DOUBLE、
BOOLEAN和
DECIMAL列。StarRocks 的 Bitmap 索引通过高效的数据结构设计和优化机制,在特定场景下能够显著提升查询性能,尤其适用于低基数列的过滤和统计操作。不过,其适用范围和效果需根据具体业务需求和数据特性,进行合理选择和调整。
COUNT(DISTINCT)指标(如 UV、订单数等),替代传统哈希或排序方法。bitor)加速聚合。MPP 并行 优化:分布式计算节点独立生成子位图,合并后生成全局去重结果。
全局字典转换:非整型数据(如字符串)需通过全局字典映射为整数,再构建位图。
海量数据聚合:替代传统
COUNT DISTINCT,避免多次 Shuffle 操作。
TINYINT、
SMALLINT、
INT、
BIGINT,其他类型需全局字典。StarRocks 中的 Bitmap 去重技术通过精确、高效的方式解决了大数据场景下的去重问题,提升了查询性能并降低了存储成本。
|
对比维度 |
Bitmap
索引 |
Bitmap
去重 |
|---|---|---|
|
核心功能 |
加速查询过滤(WHERE 条件筛选) |
加速聚合计算(COUNT DISTINCT 去重统计) |
|
数据结构 |
每个唯一值对应一个位图,标记行是否存在该值 |
每个元素对应一个位,标记是否已存在 |
|
适用列类型 |
低基数列(如性别、状态码) |
高基数列(如用户 ID、订单号) |
|
存储开销 |
索引占用额外空间,与基数正相关 |
位图压缩(如 Roaring Bitmap)节省空间 |
|
查询优化方式 |
通过位图运算快速定位满足条件的行 |
通过位图合并统计唯一值数量 |
|
典型适用场景 |
多标签筛选、范围查询加速 |
UV 统计、海量数据精确去重 |
|
性能影响 |
减少数据扫描量,但高基数时索引可能失效 |
避免全量数据 Shuffle,但依赖全局字典 |
|
典型用例 |
筛选“北京地区且年龄>30 的用户” |
统计“当日活跃用户数” |
|
限制条件 |
不支持高基数列、部分数据类型 |
非整型需全局字典,数据稀疏性影响性能 |
Bitmap 去重:优化聚合计算,实现高效精确去重统计。
去重机制:基于元素到位的映射,通过置位和统计操作完成聚合。
去重适用:高基数的唯一标识列(如用户 ID、订单 ID)。
去重开销:全局字典转换和稀疏位图存储可能增加 ETL 复杂度。
city、
gender、
last_purchase_time三列分别创建 Bitmap 索引。bitmap_and()合并三个条件对应的位图,快速得到满足条件的用户 ID 集合。BITMAP_UNION聚合函数,将用户 ID 转换为位图。BITMAP_UNION_COUNT合并全局位图并统计 UV。COUNT(*)计算。优势:10 亿级数据下,UV 计算从分钟级降至秒级,且结果精确。
COUNT DISTINCT性能不足。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70038017/viewspace-3079758/ ,如需转载,请注明出处,否则将追究法律责任。