1.Order By:全局排序,只有一个 Reducer;当SQL一旦使用order by 进行排序,hive翻译后的 MR只能是一个reduce,不能出现多个reduce,即使将 reduce数量设置为多个.为了防止效率比较低,建议在 执行order by 时候,一定要带上limit操作。
2.Sort By:对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排 序,此时可以使用 sort by。Sort by 为每个 reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集 来说不是排序。如果要使用局部排序,那么前提reduce数量必须为多个,否则和order by 是一样的.
3.Distribute By:在有些情况下,我们需要控制某个特定行应该到哪个 reducer,通常是为了进行后续的聚集操作。 distribute by 子句可以做这件事。distribute by 类似 MR 中 partition (自定义分区),进行分区,结合 sort by 使用。 distribute by :当有了多个reduce后,相当于MR有了多个分区,在分区的时候,需要那个字段进行分区,可以使用distribute by 来设置,对于 distribute by 进行测试,一定要分配多 reduce 进行处理,否则无法看到 distribute by 的效果。distribute by 的分区规则是根据分区字段的 hash 码与 reduce 的个数进行模除后, 余数相同的分到一个区,Hive 要求DISTRIBUTE BY 语句要写在 SORT BY 语句之前。
4.Cluster By:当 distribute by 和 sort by 字段相同时,可以使用 cluster by 方式。 cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。但是排序只能是升序 排序,不能指定排序规则为 ase或者desc。
暂无数据