hive中order bydistribute bysort by和cluster by的区别和联系

Posted yjd_hycf_space

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive中order bydistribute bysort by和cluster by的区别和联系相关的知识,希望对你有一定的参考价值。

hive中order by、distribute by、sort by和cluster by的区别和联系

 

order by

order by 会对数据进行全局排序,和oracle和mysql等数据库中的order by 效果一样,它只在一个reduce中进行所以数据量特别大的时候效率非常低。

而且当设置 :set hive.mapred.mode=strict的时候不指定limit,执行select会报错,如下:

LIMIT must also be specified。

 

sort by

sort by 是单独在各自的reduce中进行排序,所以并不能保证全局有序,一般和distribute by 一起执行,而且distribute by 要写在sort by前面。

如果mapred.reduce.tasks=1和order by效果一样,如果大于1会分成几个文件输出每个文件会按照指定的字段排序,而不保证全局有序。

sort by 不受 hive.mapred.mode 是否为strict ,nostrict 的影响。

 

distribute by

DISTRIBUTE BY 控制map 中的输出在 reducer 中是如何进行划分的。使用DISTRIBUTE BY 可以保证相同KEY的记录被划分到一个Reduce 中。

 

cluster by

distribute by 和 sort by 合用就相当于cluster by,但是cluster by 不能指定排序为asc或 desc 的规则,只能是升序排列。

以上是关于hive中order bydistribute bysort by和cluster by的区别和联系的主要内容,如果未能解决你的问题,请参考以下文章

Hive中的Order by与关系型数据库中的order by语句的异同点

Hive Order By操作

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

使用 order by 时出现 Hive 错误

“order by”的 Hive、Impala、HBASE 和 SQL 比较

hive中order by,sort by, distribute by, cluster by的用法