用途
官方点就是计算基数,直白点就是统计不重复的个数
参数为Uint类型,就是不是负数的整数 返回值为Uint64类型
案例
测试数据
UserID 1 1 2 3
SELECT groupBitmap(UserID) as num FROM t;
结果
num 3
再举个例子,比如我们有用户id uid, string类型,相要统计其个数,则
SELECT groupBitmap(toUInt64(uid)) as num from usertable;
+----+ |num | +----+ |2399| +----+
等价于如下查询
select count(distinct uid) from usertable;
那么要bitmap做什么呢?就是创建表时如果选择bitmap存储,就会比较节约空间
比如
create table testbit( label String, name String, uv AggregateFunction(groupBitmap,UInt64) comment bitmap存储用户 )engine=AggregatingMergeTree() partition by label order by (label,name);
groupBitmapState
可以看出返回值类型是AggregateFunction(groupBitmap,UInt64)
SELECT groupBitmapState(toUInt64(uid)) as num, toTypeName(num) from usertable;
想要知道bitmap存储的是什么东西,直接查是看不出来的,需要转为数组才可以,比如
select bitmapToArray(groupBitmapState(toUInt64(uid))) from usertable;
如果想求基数,如下
select bitmapCardinality(groupBitmapState(toUInt64(uid))) from usertable;
+--------------------------------------------------+ |bitmapCardinality(groupBitmapState(toUInt64(uid)))| +--------------------------------------------------+ |2399 | +--------------------------------------------------+
参考
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。