一 ORDERBY
ORDERBY 跟传统数据库ORDERBY 一样,会对所有的数据进行排序,可能有很多个Map任务,但是只会由一个Reducer来进行排序,如果数据海量的话,会很影响性能,因为需要花费大量的时间
二 SORTBY
如果在hive指定了SORT BY语句,那么在每一个Reducer都会进行排序,言外之意,只保证每一个Reducer的时候进行排序,那么这样的排序是局部的,并非全局的排序。类似于桶内排序
这样有一个好处:做了局部排序之后,进行全局排序的时候,能够效率不少。
三 DISTRIBUTEBY
根据指定字段,默认对数据进行hash,然后分道不同的Reducer中。
是控制Map的输出在Reducer是如何划分的,也就是控制哪些map输出到哪一个reducer,一般配合SORT BY使用,即按照什么划分reducer,然后进行Reducer级别的排序。有点分桶的意思。
SELECTfid,fname,ftime,fregion FROM movie DISTRIBUTE BY fid
SORTBY fid
四CLUSTERBY
CLUSTERBY 是DISTRIBUTE BY + SORT BY的综合。但是他的排序只能是倒序,不能指定ASC 或者DESC
比如
SELECTfid,fname,ftime,fregion FROM movie CLUSTER BY fregion;
等价于
SELECTfid,fname,ftime,fregion FROM movie DISTRIBUTE BY fid
SORTBY fid