hive底层原理 sql执行过程_hive sql语句执行原理

本文深入探讨了Hive如何解析SQL语句,包括从数据源查找、字段处理、JOIN、GROUP BY、DISTINCT和ORDER BY的操作。通过分析不同DML/DDL关键字,解释了查询优化、数据倾斜问题及解决方案,例如使用MAPJOIN提升效率和避免数据倾斜的策略。
摘要由CSDN通过智能技术生成

大体理解为:hive会对写好的sql语句进行拆解,按执行顺序拆分红树结构(AST)交给mapreduce处理;html

hive对不一样DML/DDL关键字有不一样的反应,比较敏感的有select、from、join、group by、distinct、insert等;sql

对查询语句,hive首先会先根据from找到数据源(metastore),而后从查询内部开始找用到的字段及其类型,看语句要求对字段直接处理(加减乘除等)仍是聚合处理(sum等),并检查语句是否正确——扫描表、语法分析、语义分析;app

找出须要的字段,剩下的就是对字段下的取值进行的操做了jvm

join的过程,由于涉及两个及以上的表,在map阶段会对不一样表打上不一样标签来区分,打上标签之后其实就能够按一个表来理解;优化

group by与distinct的过程,相似map端的combiner与reduce端的功能,就是按不一样Key展现结果且key不重复;spa

order by的过程,只在reduce端执行,也就是只须要一个reducer,耗时耗内存,能够用 (distribute by col sort by col) order by这样的结构代替;htm

mapjoin用于大小表相连,提升效率;blog

hive用left semi join代替in排序

1.     left join  的条件,条件不一样生成的job数量有什么不一样,多个表join生成的job数量有什么不一样.ip

2.     group by 生成的任务map阶段和reduce阶段都作了什么

3.     dictinct生成的任务map阶段和reduce阶段都作了什么

子查询生成几个job

4.     left semi join生成几个job map 阶段和reduce阶段都作什么事儿

5.     数据倾斜是怎么回事,写sql的时候要注意哪些防止数据倾斜

6.     常见的排序有哪些,各有什么优缺点,map阶段和reduce阶段都作了什么

表Course_z:8条记录

表SC_z:13条记录

表Student_z:8条记录

1.   Leftjoin

N个表join生成n-1个job,读入几条记录就有几个mapper,在map端执行完后到1个reducer上执行;

内部join的结果看作1条记录因此有1+8个mapper

当使用外关联时,若是将副表的过滤条件写在Where后面,那么就会先全表关联,以后再过滤,时间消耗更多

2.   Groupby

Map阶段,group by的参数做key,有combiner的过程

Reduce阶段key去重并reduce

3.   Distinct

Map阶段,distinct字段做key,没有combiner的过程

reduce阶段去重

group by比distinct效率高

4.   Leftsemi join(效果至关于In,执行的时候按Join处理)

至关于

1个join对应1个job

Map阶段,表加tag,

Reduce阶段按tag操做,只保留左表字段

5.   数据倾斜

表现:某个或少数几个reducer长时间处于未完成状态,任务进度长时间维持在99%(或100%),处理时间远大于平均时长;数据倾斜的Job中reducer个数>1

缘由: 1. 小表join大表

优化:咱们要看有哪些过程是须要至少两个reducer来执行的,而后去优化那些运算;增长reduce 的jvm内存(不采用);增长reduce 个数(不采用);distinct;customer partition;pipeline;index 尤为是bitmap index;mapjoin;

6.   Order by,只在reduce端执行,且1个orderby对应1个reducer

优势:整体有序

缺点:只用1个reducer,数据越大运行越慢

Sort by,在各mapper端排序,reduce端不排序,因此整体是无序的

优势:运行较快

缺点:总体无序

Distribute by,reduce端执行

Cluster by, clusterby的功能就是distribute by和sort by相结合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值