clclickhouse与bitmap的结合

用途

  • AggregatingMergeTree用来做增量数据统计聚合
  • bitmap存储用户id,因为id数据量较大,用bitmap存储可以有效节约空间

案例

举个例子
clickhouse中建立表,引擎为AggregatingMergeTree,因为要做一些自定义聚合,所以选择这个引擎.

create table testbit(
    label String,
    name String,
    uv AggregateFunction(groupBitmap,UInt64) comment 'bitmap存储用户'
)engine=AggregatingMergeTree()
partition by label
order by (label,name);

向表中插入数据
对于AggregateFunction类型的列字段,在进行数据的写入和查询时与其他的表引擎有很大区别,在写入数据时,需要调用-State函数;而在查询数据时,则需要调用相应的-Merge函数。

insert into testbit
select `gender`,
        gender,
        groupBitmapState(toUInt64(uid))
from usertable
group by gender;

查询数据
比如,查询男女用户各自的总数

select label,bitmapCardinality(groupBitmapMergeState(uv)) as uv
from testbit
group by label;
+-----+----+
|label|uv  |
+-----+----+
|女    |1146|
|男    |1253|
+-----+----+

总结

参考

clickhouse Aggregatingmergetree表引擎_鸭梨的博客-CSDN博客

groupBitmap | ClickHouse Documentation

上一篇:StarWink UV顶点动画制作详解


下一篇:Redis实战篇:基于HyperLogLog实现UV统计功能