Hive知识点总结

本文总结了Hive的四大排序类型:order by、sort by、distribute by和cluster by,强调了它们的区别和适用场景。接着,介绍了三种JOIN操作:普通JOIN、MapJoin和SMB JOIN,并探讨了参数优化,包括mapjoin的阈值设置和Combiner的使用。文章还提出了Hive SQL优化建议,如列过滤、分区技术和小文件合并策略,以及如何合理设置Map和Reduce任务数量,以提升查询效率。
摘要由CSDN通过智能技术生成

1.四大by

  1. order by(全局排序)
    只有一个reduce。这里无论设置多少个reduce数,都是一个
    优点:全局排序
    缺点:当数据量大的时候,耗时长,效率低,适用于较小数据量的场景(十万、百万)
  2. sort by(分区内排序)
    对每一个reduce内部的数据进行排序,全局结果来说不是排序的
    也就是说只能保证每一个reduce输出的文件中的数据是按照规定字段排序的
    适用于数据量大,但是对排序要求不严格的场景,可以大幅提高执行效率(抽样)
    需要预先设置reduce个数,reduce结果文件内部有序,全局是无序的
set mapreduce.job.reduces = 10;
select * from emp sort by sal desc;

          3.distribute by(分区排序)
控制特定的key到指定的reducer,方便后续的聚合操作,类似于MR中自定义分区,一般结合sort by使用
需要预先设置reduce个数,否则不会启动相应的reducer进行任务的执行,导致最后不能完全分区。

set mapreduce.job.reduces = 10;
select * from emp distribute by deptno sort by sal desc;

注意

  • distribute by要在sort by之前
  • distribute by的分区规则是根据分区字段的hash码与reduce的个数进行取模后,余数相同的分到一个分区
  1.   order by
  2.   sort by
  3.  distribute by
  4.  cluster by
    当distribute by和sort by字段相同的时候,可以写成cluster by
    但是这个排序,只能升序
select * from emp cluster by deptno;
select * from emp distribute by deptno sort by deptno;

面试题

Q:订单表,取gmv(Gross Merchandise Volume,即商品交易总额,是成交总额(一定时间段内)的意思)top100的用户(比如有一亿的用户)

--全局排序显然不行,耗时长,效率低
select user_id from dwd_order_df order by gmv desc limit 100;
--多个reduce,分区内排序,最后再全局排序
set mapreduce.job.reduces = 100;
select * from (
select user_id,gmv
from dwd_order_df 
distribute by city sort by gmv desc limit 100
) a
order by gmv limit 100;

2.三大join

  1. common/shuffle/reduce join
    最普通的join,产生shuffle,且这个会在reduce段join
  2. mapjoin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值