Java学习之SQL的HIVE工具几种排序查询介绍

   Java学习过程中需要了解数据库的多种操作技术,由于数据库的复杂化就需要不同的语句来进行处理,这里主要针对HIVE中的order by, sort by, distribute by, cluster by的用法和区别进行介绍。

java (6).jpg

  1、order by

  ​ hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数据多少,不管文件多少,都启用一个reduce进行处理。如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。

  select id,sum(money) from t group by id 这条语句只用一个job就ok,

  select id,sum(money) from t group by id order by id 如果加上order by 就会多一个job进行排序操作。

  2、sort by

  sort by 是局部排序,会在每个reduce端做排序,每个reduce端是排序的,也就是每个reduce出来的数据是有序的,但是全部不一定有序,除非一个reduce,一般情况下可以先进行局部排序完成后,再进行全局排序,会提高不少效率。

  select id,sum(money) from t group by id sort by id; 这条语句也不会增加job,它在reduce端直接进行排序。

  3、distribute by

  ​ distribute by 是控制map端在reduce上是如何区分的,distribute by 会把指定的值发到同一个reduce中,比如 用上面数据distribute by id 它就会把id相同的值放到一个reduce中执行,不是一个值一个reduce,而是相同的值进入到一个reduce,例如用上面数据可以进入到2个reduce,一般情况下可以sort by 结合使用,先进行分组reduce,再进行排序。

  如:select id,money,name from t distribute by id sort by id

  4、cluster by

  ​ 这个其实就是distribute by 和sort by 结合使用的结果。

  如:select id,money,name from t cluster by id;

  这条语句其实和select id,money,name from t distribute by id sort by id 这条语句的结果是一样的

  千锋成都Java培训课程的授课模式采用全程面授,讲师成本虽高,但是效果却是显著的,和学员面对面沟通,了解到学员在学习过程中遇到的问题,动态地调整授课方式。及时有效地帮助学员解决疑难问题,提高学员的学习积极性。千锋Java毕业的学员薪资高出同行业的其他机构,有理可依。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值