(1)distinct
Select count(distcint uid) from TB
count distinct 容易产生数据倾斜问题,使用了distinct,导致在map端的combine无法合并重复数据,hive针对count(distinct xxx)只产生一个reduce。造成了所有map端传来的数据都在一个tasks中执行,成为了性能瓶颈。
改进为 用group by 代替count distinct
Select count(1) from (Select distinct uid from TB)x
(2)group by
select后面的非聚合列必须出现在group by中,group by 出现数据倾斜概率很少,因为mapreduce中map结束后会有combine by操作做一些聚合。
(3)union
网友评论