大致理解为: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