Kylin高级主题-Count Distinct(近似Count Distinct和精准Count Distinct)

在OLAP多维分析中,Count Distinct(去重计数)是一种非常常用的指标度量,比如一段时间内的UV、活跃用户数等等;

从1.5.3开始,Apache Kylin提供了两种Count Distinct计算方式,一种是近似的,一种是精确的,精确的Count Distinct指标在Build时候,会消耗更多的资源(内存和存储),Build的过程也比较慢;

近似Count Distinct

Apache Kylin使用HyperLogLog算法实现了近似Count Distinct,提供了错误率从9.75%到1.22%几种精度供选择;

算法计算后的Count Distinct指标,理论上,结果最大只有64KB,最低的错误率是1.22%;

这种实现方式用在需要快速计算、节省存储空间,并且能接受错误率的Count Distinct指标计算。

 

精准Count Distinct

从1.5.3版本开始,Kylin中实现了基于bitmap的精确Count Distinct计算方式。当数据类型为tiny int(byte)、small int(short)以及int,

会直接将数据值映射到bitmap中;当数据类型为long,string或者其他,则需要将数据值以字符串形式编码成dict(字典),再将字典ID映射到bitmap;

指标计算后的结果,并不是计数后的值,而是包含了序列化值的bitmap.这样,才能确保在任意维度上的Count Distinct结果是正确的。

这种实现方式提供了精确的无错误的Count Distinct结果,但是需要更多的存储资源,如果数据中的不重复值超过百万,结果所占的存储应该会达到几百MB。

Kylin高级主题-Count Distinct(近似Count Distinct和精准Count Distinct)_第1张图片

你可能感兴趣的:(Kylin高级主题-Count Distinct(近似Count Distinct和精准Count Distinct))