clickhouse提供了许多的去重函数,有精确去重的以及非精确去重的,下面介绍下两种
非精确去重函数:uniq、uniqHLL12、uniqCombined
精确去重函数:uniqExact、groupBitmap
测试数据量:2000w
SELECT count(id) from tableNamecount(id)
20595997
首先我们先用 count(DISTINCT x) 就是uniqExact函数 来统计下根据id去重的数据都是 941918
SELECT count(DISTINCT id ) from tableName
SELECT uniqExact(id) from tableName
然后使用非精确去重函数uniq,去重后数据是939665
SELECT uniq(id) from tableName
用groupBitmap()函数的话会报错,因为仅支持无符号整数,而我的数据类型是有符号的
下面就贴下来自苏宁科技集团.大数据中心.杨兆辉分享的,测试的数据量是4亿
结论:
- 整形值精确去重场景,groupBitmap 比 uniqExact至少快 2x+
- groupBitmap仅支持无符号整形值去重, uniqExact支持任意类型去重。
- 非精确去重场景,uniq在速度上有优势