前言
小强作为一名数据工程师,给予hadoop生态,经常会接到类似uv的去重统计。对于这种需求,一般的数据工程师撸起袖子直接干!一般情况下不会有问题。某一天,你公司突然业务发展发展起来,数据量慢慢暴涨,你会突然发现之前的count distinct去重经常oom或是龟速出数据。上来一股脑加内存!加!果断加!某一天你老板要你在原来按天的uv加一个月uv、年uv,这时你慌了。只会说“老板!加机器,内存不够!”。老板说:“算个uv你就想骗我钱?你明天不用来上班了!”
打不死的小强这时拼命百度,在网上找到许多神乎其神的方法…
常用方法
- 优化sql
小强把原有的count distinct去重改成了group by,性能也提升了不少。安稳的日子过了一段后,公司数据量也一点一点增长,小强上来一把hive SQL,成功扛住
select count(*) from (select uid,pid as upv from table_event group by uid,pid) tmp
老板突然说要在某某维度下,加个upv统计,xxx的统计,指标不断增加,这时,小强的sql不得不改变
select collect_set(uid) as uv,collect_set(uid,pid) as upv from table_event group by xxx,xx,x
小强一执行,直接oom,于是,加内存,加内存&#