order by:全局排序,因此只有一个reducer(多个reducer无法保证全局有序)
如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。
sort by:不是全局排序,分区内有序,其在数据进入reducer前完成排序
在每个reducer端做排序,也就是说保证了局部有序(每个reducer出来的数据是有序的,但是不能保证所有的数据是有序的,除非只有一个reducer),好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序了)
distrbute by:控制map的输出在reducer是如何划分的,结合sort by使用指定排序字段
cluster by:当distribute by和sort by字段相同时,可以使用cluster by方式。cluster by 还兼具sort by的功能,但只能是升序排序,不可指定降序。