Profile的节点

小弟在查看 EMR 提供的profile 图的时候遇到这些问题,麻烦巨佬们帮忙解答下
1 为什么加个limit后会有这么多 Limit 节点
image
2 exchange 节点主要作用是什么?为什么join 后还在做 exchange
3 aggregate_blocking的作用是什么


4 为什么反复 project

问题1. limit 遇到能下推的节点会在当前节点上保留一个。因为有可能出现输入1行,某个节点之后会输出1000行。
问题2: exchange 是节点的数据交换,join 之后每个节点可能会输出100行数据,需要gather到一个节点做这个limit,所以有这个exchange
问题3 agg_block 是做聚合比如 group by/sum()/avg
问题4 project 是列裁剪/函数计算,避免发送过多数据

多个 project 节点,是不是有点多余尼。函数计算比如原本有1列,我通过计算新增了1列,此时变成了2列了,这个时候是不是还会有一个 project 节点