码迷,mamicode.com
首页 > 其他好文 > 详细

distinct 优化

时间:2014-12-14 10:35:42      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   sp   on   数据   div   log   bs   

当数据量非常大,在同一个query中计算多个不相关列的distinct时,往往很容易出现数据倾斜现象,导致运行半天都不能得到结果。
比如以下的SQL语句:
select distinct(a), distinct(b), distinct(c) from tableName;

a, b, c没有相关性。

改进方案:把计算的distinct先group by,然后再计算:

 

select distinct(t.a), distinct(t.b), distinct(t.c) from(
	select a, b, c from tableName
	group by a, b, c;
)t;
原理:distinct是在reduce里面计算的,再进行merge,而group by的字段会在map这里分N路hash。group by越多,hash分的越随机。

distinct 优化

标签:style   blog   color   sp   on   数据   div   log   bs   

原文地址:http://www.cnblogs.com/yejinru/p/4154119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!