hive sql中的四个by

2022/5/10 19:04:15

本文主要是介绍hive sql中的四个by,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.order by col_list:
   全局排序,默认为升序asc ,因此只有一个reducer,只有一个reduce task的结果,

  比如文件名是000000_0,会导致当输入规模较大时,需要较长的计算时间。

  如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,

  原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。 对被排序列进行全排序,且只启动一个MR任务。

2.sort by col_list :

  局部排序,其在数据进入reducer前完成排序。因此,如果用sort by 进行排序,并且设置mapred.reduce.tasks>1,

  则sort by 只保证每个reducer的输出有序,不保证全局排序。

  在每一个reducetask中,每一个小的输出结果排序,但是当reducetask的个数为1的话和order by 的排序结果一致

注意:sort by 指定的字段仅仅是用于排序的字段,不用于分reducetask输出结果,最终的输出文件中的结果是随机生成的

3.distribute by col_list:

  根据指定的字段将数据分到不同的reducer,且分发算法是hash散列

  类似于分桶的概念 按照指定的distribute by 字段和 设置的reducetask的个数进行取余分组,但是并没有排序,只是分,没有排序

  select * from stu_test distribute by age desc; 错误,不能使用desc,因为它不是排序的意思

4.cluster by col_list :

  除了具有distribute by 的功能外,还会对该字段进行排序

  cluster by = distribute by+sort by

  cluster by id = distribute by id +sort by id

注意:1)cluster by 和sort by 不可以同时使用

2)当分组字段和排序字段是同一个字段的时候 cluster by id = distribute by id +sort by id

不是同一个字段的时候 请不要使用 cluster by id

 

详细见:https://blog.csdn.net/qq_40839450/article/details/106461393



这篇关于hive sql中的四个by的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程