以下面两个案例介绍distinct、group by的底层原理。
【案例 1】去重计数案例
select count(1) from(
select age
from student
group by age
)b
【案例2】简化的去重计数
select count(distinct age)
from student
1 底层原理
1.1 group by与distinct的执行计划
1.1.1【案例1 group by】
执行计划包含如下2个stage,执行计划简化图如下:
-
按S-1 Map框的缩进解读【案例1 group by】的执行计划如下:
(1)扫描操作:扫描Student表。
(2)列筛选操作:在步骤(1)的基础上,执行列筛选操作。
(3)按列聚合:在步骤(1)的基础上,按age列分组聚合(group by)。
最后只输出key值,即输出所有年龄,value的值抛弃,不输出。
S-1Map阶段的数据处理流程示例如下:
-
按S-1 Reduce框的缩进解读【案例1 group by】的执行计划如下:
1.1.2【案例2 distinct】
执行计划包含如下1个stage,执行计划简化图如下: