Hive框架(三) —— Hive SQL语句的执行顺序

HQL的语句执行顺寻与SQL有一定的差别

Hive SQL  

From - where - join - on - select - group by - select - having - distinct - order by - limit - union/union all 

Map 阶段

  1. 执行 from,进行表的查找与加载;

  2. 执行 where,注意:sql 语句中 left join 写在 where 之前的,但是实际执行先执行 where 操作,因为 Hive 会对语句进行优化,如果符合谓词下推规则,将进行谓词下推;

  3. 执行 left join 操作,按照 key 进行表的关联;

  4. 执行输出列的操作,注意: select 后面只有两个字段(order_amount,userkey),此时 Hive 是否只输出这两个字段呢,当然不是,因为 group by 的是 idno,如果只输出 select 的两个字段,后面 group by 将没有办法对 idno 进行分组,所以此时输出的字段有三个:idno,order_amount,userkey;

  5. 执行 map 端的 group by,此时的分组方式采用的是哈希分组,按照 idno 分组,进行 order_amount 的 sum 操作和 userkey 的 count 操作,最后按照 idno 进行排序(group by 默认会附带排序操作);  

Reduce 阶段

  1. 执行 reduce 端的 group by,此时的分组方式采用的是合并分组,对 map 端发来的数据按照 idno 进行分组合并,同时进行聚合操作 sum(order_amount)和 count(userkey);

  2. 执行 select,此时输出的就只有 select 的两个字段:sum(order_amount) as sum_amount,count(userkey) as count_user;

  3. 执行 having,此时才开始执行 group by 后的 having 操作,对 count_user 进行过滤,注意:因为上一步输出的只有 select 的两个字段了,所以 having 的过滤字段只能是这两个字段;

  4. 执行 limit,限制输出的行数为 10。 

你可能感兴趣的:(Hive,hive,sql,hadoop)