Hive中sort by,order by,cluster by,distribute by总结


order by :

Hive中order by和SQL语言中的order by是一样,它会对查询结果做一次全局排序,那么在Hive中如果使用了order by,所有的数据就都会只会被一个reducer来处理,如果数据量太大的话,就会消耗大量的时间。

sort by:

这是Hive提供的另一种排序方法,在使用sort by的时候,所有的数据会被多个reducer并行处理,但只有在同一个reducer中的数据才会排序。也就是说sort by是局部排序,每个reducer的最后输出结果都是有序的,但是从全局来看并非有序,除非只有一个reducer来处理数据。
注:对于order by和sort by用户可以指定任意期望的排序字段,并且默认是ACS方式

distribute by :

distribute by 是来控制map的输出如何在reducer中划分。默认情况下,map的输出会根据key计算哈希值,然后按照哈希值将数据均匀的分发到多个reducer中,这也就意味着,多个reducer中含有相同的数据,如果我们希望相同的key都让一个reducer来处理,就可以使用distribute by,如果在和sort by一起使用,那么最后的结果就会变成全局有序。

cluster by:

cluster by 可以理解为一个特殊的distribute by和sort by的结合,当distribute by和sort by后面所跟的列名相同时,就等同于直接使用cluster by 跟上该列名。但是被cluster by指定的列最终的排序结果只能是降序,而且无法指定asc和desc。
注:在使用distribute by和sort by结合以及cluster by时,会剥夺reducer的并行性,但最终的结果是全局有序的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容