-
order by:对于查询结果做全排序,只允许有一个reduce处理(当数据量较大时,慎用。严格模式下,必须结合limit来使用)
-
sort by:对于单个reduce的数据进行排序
sort by 是单独在各自的reduce中进行排序,所以并不能保证全局有序,一般和distribute by 一起执行,而且distribute by 要写在sort by前面
-
distribute by:分区排序,经常和sort by结合使用
distribute by和sort by的使用场景:
-
Map输出的文件大小不均
-
Reduce输出文件大小不均
-
小文件过多
-
文件超大
-
cluster by:相当于:sort by+distribute by
cluster by不能通过asc、desc的方式指定排序规则:可通过 distribute by column sort by column asc|desc 的方式
两种写法等价
hive (default)> select * from emp cluster by deptno;
hive (default)> select * from emp distribute by deptno sort by deptno;