Kafka例行导入StarRocks时能否将列转换为bitmap/HLL类型
Kafka Routine Load对Bitmap/HLL类型转换的支持说明
StarRocks的Kafka Routine Load完全支持导入阶段将指定列转换为Bitmap或HLL类型实现预聚合去重优化,语法规则与Stream Load、Broker Load完全对齐,不需要额外适配特殊逻辑。
具体配置方法
配置核心是在创建Routine Load任务时,通过COLUMNS子句定义源字段到目标字段的转换规则,提前将目标表的对应字段定义为对应聚合类型即可。
HLL类型转换
目标表对应字段需提前定义为HLL类型,聚合模式设置为HLL_UNION,转换时对源字段调用hll_hash()函数完成类型构造。
参考示例:目标表建表语句
CREATE TABLE `hll_uv_stat` ( `stat_date` date NOT NULL, `visitor_hll` hll HLL_UNION NOT NULL ) ENGINE=OLAP AGGREGATE KEY(`stat_date`) DISTRIBUTED BY HASH(`stat_date`) BUCKETS 4;创建Routine Load任务语句
CREATE ROUTINE LOAD stat_db.hll_uv_load ON hll_uv_stat -- 核心转换逻辑:源端读入的visitor_id字段经hll_hash转换后写入目标HLL字段 COLUMNS(stat_date, visitor_id, visitor_hll = hll_hash(visitor_id)) PROPERTIES ( "format" = "json", "desired_concurrent_number" = "3" ) FROM KAFKA ( "kafka_broker_list" = "broker1:9092,broker2:9092", "kafka_topic" = "page_visit", "property.group.id" = "sr_hll_uv_group" );Bitmap类型转换
目标表对应字段需提前定义为BITMAP类型,聚合模式设置为BITMAP_UNION,根据源字段类型选择对应的构造函数:- 源字段为整型:直接用
to_bitmap(源字段名)做转换,性能最优 - 源字段为字符串/UUID等非整型:用
bitmap_hash(源字段名)做哈希转换后写入Bitmap
参考示例:
目标表建表语句
CREATE TABLE `bitmap_uv_stat` ( `stat_date` date NOT NULL, `visitor_bitmap` bitmap BITMAP_UNION NOT NULL ) ENGINE=OLAP AGGREGATE KEY(`stat_date`) DISTRIBUTED BY HASH(`stat_date`) BUCKETS 4;创建Routine Load任务语句(源visitor_id为字符串场景)
CREATE ROUTINE LOAD stat_db.bitmap_uv_load ON bitmap_uv_stat -- 核心转换逻辑:字符串类型visitor_id经bitmap_hash转换后写入目标Bitmap字段 COLUMNS(stat_date, visitor_id, visitor_bitmap = bitmap_hash(visitor_id)) PROPERTIES ( "format" = "json", "desired_concurrent_number" = "3" ) FROM KAFKA ( "kafka_broker_list" = "broker1:9092,broker2:9092", "kafka_topic" = "page_visit", "property.group.id" = "sr_bitmap_uv_group" );- 源字段为整型:直接用
注意事项
- 禁止将Kafka源端的原始字段直接映射到HLL/BITMAP类型的目标列,必须通过对应的类型构造函数做转换,否则会抛出类型不匹配错误
- 若Kafka数据为JSON格式,
COLUMNS子句中定义的源字段名需要和JSON中的key完全一致,大小写敏感 - 所有Stream Load、Broker Load支持的列转换函数,在Routine Load的
COLUMNS子句中都可以正常使用,没有功能限制
内容的提问来源于stack exchange,提问作者sel-fish
相关产品推荐
相关产品推荐

