使用kylin的是经常会遇到需要 count(distinct ) 这种聚合方式,这时候就需要精确去重
实现精确去重的方法:使用bitmap格式存储,因为需要保留明细,而计算机存储的最小单位是bit, 所以我们使用bitmap格式存储
bitmap格式对应的是int值,这时候就遇到一个问题,string类型映射到int值的问题
所以就需要全局字典:global dictionary 参数
全局字典特性:
1.随着数据的加载,会变得越来也大,构建也会越来越慢
2.针对字段是非int值,才需要构建
3.非分区字段不需要全局字典,可以说全局字典针对同一个表不同分区
4.如果不需要跨segment进行计算,则不需要全局字典
5.全局字典只针对构建时才会加载,其他时期不影响
6.存储位置是hdfs上,所以新构建dict,需要hdfs相应位置的写入权限
所以全局字典需要慎用,特定场合用,不需要用的时候,使用普通字典更好
全局字典报错: should have 0 or 1 append dict but 2
原因:已经有一个全局字典存在,无法再新构建一个
解决:
1.不使用全局字典,改用普通字典
2.删除这个全局字典,去相应的hdfs上找到这个dict 删除即可