hive中的4个排序,面试时经常被问到。自己总结的一个面试时的话语:
1.order by
会对输入做全局排序,为保证全局的排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
2. sort by
不是全局排序,其在数据进入reducer前完成排序。因此,如果用sort by
进行排序,则sort by
只保证每个reducer的输出有序,不保证全局有序。
3. distribute by
(字段)根据指定的字段将数据分到不同的reducer,且分发算法是hash散列,常用sort by
结合使用,Hive要求distribute by
语句要写在sort by
语句之前。
4. cluster by
(字段) 除了具有distribute by
的功能(既可以把数据分到不同的reduce)外,还会对该字段进行排序.但是排序只能是倒序排序,不能指定排序规则为asc
或者desc
5. 因此:
当数据量规模较大时,不使用order by
,使用用distribute by
+ sort by
如果distribute by
和 sort by
字段是同一个时,此时,cluster by = distribute by + sort by