Hive count(distinct ) 优化

1 group by c1,只是按照c1的值把数据分散到各个tm,c1的值的种类比较少,容易导致数据倾斜

2 group by c1,hash(c2)%5,按照2个字段的值把数据分散到各个tm,值的种类比较多,不容易导致数据倾斜

select 
c1,
count(distinct c2) as cnt 
from 
table1
where date='20210427'
group by c1 ,hash(c2) % 5 

第一阶段 结果:
1 34
2 23
4 36
1 15
3 27
2 36
....



select 
c1,
sum(cnt) as total
from (
select 
c1,
count(distinct c2) as cnt 
from 
table1
where date='20210427'
group by c1 ,hash(c2) % 5 
)t1 group by c1 ;

第二阶段 结果:
1 49
2 59
3 27
4 36
......


select hash(1234) ; -- -311880085
select hash(1234) ; -- -311880085
select hash('wx_id_sdlcns2332') ;  -- 824800802

end 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页