Hive中对于排序给出了通用的「order by」与 非全局排序「sort by」至于其他两个函数是配合使用的。
order by与sort by的区别:
order by的使用与标准SQL相同,实现全局排序,但是缺点是由于要进行全局有序所以在reduce阶段只有一个reducer,也就意味着失去了发挥多节点并发的优势,性能较差。
sort by是在分区内排序,在reduce阶段不会只剩下一个reducer,优点是发挥集群并发计算能力,缺点是并不能全局有序,如果想要全局有序需要对各reduce的分区进行整体排序。
distribute by与cluster by:
distribute by配合sort by使用,前者决定数据被分发到哪个reducer然后被sort
cluster by是完成distribute by与sort by的结合功能。举例:
// 按grade分区,分区内按score排序
select name,grade,score from t distribute by grade sort by score
// 按grade分区,并排序
select name,grade,score from t cluster by grade
等价于
select name,grade,score from t distribute by grade sort by grade