EMR Spark Runtime Filter性能优化
背景
Join是一个非常耗费资源耗费时间的操作,特别是数据量很大的情况下。一般流程上会涉及底层表的扫描/shuffle/Join等过程, 如果我们能够尽可能的在靠近源头上减少参与计算的数据,一方面可以提高查询性能,另一方面也可以减少资源的消耗(网络/IO/CPU等),在同样的资源的情况下可以支撑更多的查询。
目前在SparkSQL中有Filter下推优化,包括两个维度:
生成Filter
SparkSQL会从用户的SQL语句中获取到Filter
直接显示获取
select * from A where a=1生成Filter(a=1) on A
隐式推断
select * from A, B where A.a = B.b and A.a=1推断出Filter(b=1) on B
Filter优化
利用生成的Filter算子可以优化,比如:
- 将Filt