order by :
Hive中order by和SQL语言中的order by是一样,它会对查询结果做一次全局排序,那么在Hive中如果使用了order by,所有的数据就都会只会被一个reducer来处理,如果数据量太大的话,就会消耗大量的时间。
sort by:
这是Hive提供的另一种排序方法,在使用sort by的时候,所有的数据会被多个reducer并行处理,但只有在同一个reducer中的数据才会排序。也就是说sort by是局部排序,每个reducer的最后输出结果都是有序的,但是从全局来看并非有序,除非只有一个reducer来处理数据。
注:对于order by和sort by用户可以指定任意期望的排序字段,并且默认是ACS方式
distribute by :
distribute by 是来控制map的输出如何在reducer中划分。默认情况下,map的输出会根据key计算哈希值,然后按照哈希值将数据均匀的分发到多个reducer中,这也就意味着,多个reducer中含有相同的数据,如果我们希望相同的key都让一个reducer来处理,就可以使用distribute by,如果在和sort by一起使用,那么最后的结果就会变成全局有序。
cluster by:
cluster by 可以理解为一个特殊的distribute by和sort by的结合,当distribute by和sort by后面所跟的列名相同时,就等同于直接使用cluster by 跟上该列名。但是被cluster by指定的列最终的排序结果只能是降序,而且无法指定asc和desc。
注:在使用distribute by和sort by结合以及cluster by时,会剥夺reducer的并行性,但最终的结果是全局有序的。