HiveSQL的编译过程

xiaoxiao2021-02-28  100

MR实现HiveSQL的原理:

1.join

select u.name, o.orderid from order o join user u on o.uid = u.uid;

这是一条简单的关联sql查询,底层执行引擎是怎样实现的? 两张边作为输入,join的条件作为key,然后为其他值打上tag标记,经过shuffle,将key相同的数据发送到同一个Reduce上执行。

2.group by

select rank, isonline, count(*) from city group by rank, isonline;

在Map端将GroupBy的字段组合为key值(图中是rank和isonline),经过shuffle阶段,将相同的key发送到一个Reduce执行。

3.Distinct

select dealid, count(distinct uid) num from order group by dealid;

当只有一个distinct字段时,如果不考虑Map阶段的Hash GroupBy,只需要将GroupBy字段和Distinct字段组合为map输出key,利用mapreduce的排序,同时将GroupBy字段作为reduce的key,在reduce阶段保存LastKey即可完成去重。

转自:https://tech.meituan.com/hive-sql-to-mapreduce.html

转载请注明原文地址: https://www.6miu.com/read-38785.html

最新回复(0)