大致理解为:hive会对写好的sql语句进行拆解,按执行顺序拆分成树结构(AST)交给mapreduce处理;
hive对不同DML/DDL关键字有不同的反应,比较敏感的有select、from、join、group by、distinct、insert等;
对查询语句,hive首先会先根据from找到数据源(metastore),然后从查询内部开始找用到的字段及其类型,看语句要求对字段直接处理(加减乘除等)还是聚合处理(sum等),并检查语句是否正确——扫描表、语法分析、语义分析;
找出需要的字段,剩下的就是对字段下的取值进行的操作了
join的过程,因为涉及两个及以上的表,在map阶段会对不同表打上不同标签来区分,打上标签以后其实就可以按一个表来理解;
group by与distinct的过程,类似map端的combiner与reduce端的功能,就是按不同Key展示结果且key不重复;
order by的过程,只在reduce端执行,也就是只需要一个reducer,耗时耗内存,可以用 (distribute

本文详细解析了Hive SQL语句的执行过程,包括从解析SQL到转化为MapReduce任务的步骤。重点讨论了select、from、join、group by、distinct、order by等操作在map和reduce阶段的具体实现。此外,还探讨了数据倾斜问题及其优化策略,以及left semi join的作用。通过实例分析了不同类型的join、group by和排序操作的效率和特点。
最低0.47元/天 解锁文章
839

被折叠的 条评论
为什么被折叠?



