1.Order By
Order By:全局排序,只有一个Reduce
-
子句排序
默认为升序 : asc
降序: desc
hive sql执行过程
2.Sort By
Sort By:
-
内部排序,对于大规模的数据集order by的效率非常低。在很多情况下,并不需要全局排序,此时可以使用Sort by
-
Sort by为每个reduce产生一个排序文件。每个Reduce内部进行排序,对全局结果集来说不是排序
1)设置reduce个数
set mapreduce.job.reduces=3;
2)查看reduce的个数
set mapreduce.job.reduces;
hive sql执行过程
3.Distribute By
Distribute By:在有些情况下,我们需要控制某个特定行应该到哪个Reducer,通常是为了进行后续的聚集操作。distribute by子句可以做这件事。distribute by类似MapReduce中partition(自定义分区),进行分区,结合sort by使用.
注意
-
distribute by的分区规则是根据分区字段的hash码与reduce的个数进行相除后,余数相同的分到一个区。
-
Hive要求distribute by语句要写在sort by语句之前。
-
演示完以后mapreduce.job.reduces的值要设置回-1,否则下面分区or分桶表load跑MapReduce的时候会报错。
4.Cluster By
当distribute by和sort by字段相同时,可以使用cluster by方式。
cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为asc或者desc
注意:
- 按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去
注意:
- 按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去