4 Order by的优化原理
如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。
所以数据量大的时候能不用order by就不用,可以使用sort by结合distribute by来进行实现。
sort by是局部排序;
distribute by是控制map怎么划分reducer。
cluster by=distribute by + sort by
被distribute by设定的字段为KEY,数据会被HASH分发到不同的reducer机器上,然后sort by会对同一个reducer机器上的每组数据进行局部排序。
例如:
select mid, money, name from store cluster by mid select