BITMAP_UNION
更新时间:2025-10-16
描述
计算输入 Bitmap 的并集,返回新的 bitmap
语法
SQL
1BITMAP_UNION(<expr>)
参数
| 参数 | 说明 |
|---|---|
<expr> |
支持 BITMAP 的数据类型 |
返回值
返回值的数据类型为 BITMAP。
举例
SQL
1select dt,page,bitmap_to_string(user_id) from pv_bitmap;
Text
1+------+------+---------------------------+
2| dt | page | bitmap_to_string(user_id) |
3+------+------+---------------------------+
4| 1 | 100 | 100,200,300 |
5| 2 | 200 | 300 |
6+------+------+---------------------------+
计算 user_id 的去重值:
Plain Text
1select bitmap_count(bitmap_union(user_id)) from pv_bitmap;
Text
1+-------------------------------------+
2| bitmap_count(bitmap_union(user_id)) |
3+-------------------------------------+
4| 3 |
5+-------------------------------------+
Create table
建表时需要使用聚合模型,数据类型是 bitmap , 聚合函数是 bitmap_union
Plain Text
1CREATE TABLE `pv_bitmap` (
2 `dt` int(11) NULL COMMENT "",
3 `page` varchar(10) NULL COMMENT "",
4 `user_id` bitmap BITMAP_UNION NULL COMMENT ""
5) ENGINE=OLAP
6AGGREGATE KEY(`dt`, `page`)
7COMMENT "OLAP"
8DISTRIBUTED BY HASH(`dt`) BUCKETS 2;
注:当数据量很大时,最好为高频率的 bitmap_union 查询建立对应的 rollup 表
Plain Text
1ALTER TABLE pv_bitmap ADD ROLLUP pv (page, user_id);
Data Load
TO_BITMAP(expr) : 将 0 ~ 18446744073709551615 的 unsigned bigint 转为 bitmap
BITMAP_EMPTY(): 生成空 bitmap 列,用于 insert 或导入的时填充默认值
BITMAP_HASH(expr)或者BITMAP_HASH64(expr): 将任意类型的列通过 Hash 的方式转为 bitmap
Stream Load
Plain Text
1cat data | curl --location-trusted -u user:passwd -T - -H "columns: dt,page,user_id, user_id=to_bitmap(user_id)" http://host:8410/api/test/testDb/_stream_load
Plain Text
1cat data | curl --location-trusted -u user:passwd -T - -H "columns: dt,page,user_id, user_id=bitmap_hash(user_id)" http://host:8410/api/test/testDb/_stream_load
Plain Text
1cat data | curl --location-trusted -u user:passwd -T - -H "columns: dt,page,user_id, user_id=bitmap_empty()" http://host:8410/api/test/testDb/_stream_load
Insert Into
id2 的列类型是 bitmap
Plain Text
1insert into bitmap_table1 select id, id2 from bitmap_table2;
id2 的列类型是 bitmap
Plain Text
1INSERT INTO bitmap_table1 (id, id2) VALUES (1001, to_bitmap(1000)), (1001, to_bitmap(2000));
id2 的列类型是 bitmap
Plain Text
1insert into bitmap_table1 select id, bitmap_union(id2) from bitmap_table2 group by id;
id2 的列类型是 int
Plain Text
1insert into bitmap_table1 select id, to_bitmap(id2) from table;
id2 的列类型是 String
Plain Text
1insert into bitmap_table1 select id, bitmap_hash(id_string) from table;
