优化过程
Pig哲学之二——Pigs Are Domestic Animals。用户拥有足够的控制权。具体到逻辑执行计划的优化上,用户可以根据自己情况选择适合的优化规则(也可以理解为优化这块还大有潜力可挖)。
逻辑执行计划在编译成物理执行计划之前,会被LogicalPlanOptimizer处理,和一系列优化规则进行匹配,匹配上的优化规则会对原有执行计划进行变换,最终产生优化后的新执行计划。整个过程如图所示:
Pig的逻辑优化器通过简化、合并、插入和调整逻辑执行计划中LogicalRelationalOperator的顺序等变换操作达到优化目的。下文逐个介绍每个优化规则。
基于规则的优化器
PartitionFilterOptimizer
将分区过滤条件下推到Loader(需要Loader支持,比如HCatLoader支持分区字段推送,请参考之前介绍的LoadMetadata接口)
FilterLogicExpressionSimplifier
简化filter语句中的逻辑条件表达式,其中规则较多,委托给LogicalExpressionProxy进行处理:常量计算,根据摩根定律变换and/or操作和使用DNF标准化逻辑公式等。
SplitFilter
将filter语句中的条件分割,以便让他们分别下推。比如:
A = LOAD 'input1' as (a0, a1); B = LOAD 'input2' as (b0, b1); C = JOIN A by a0, B by b0; D = FILTER C BY a1>0 and b1>0;
D中对a和b的过滤条件可以分割开,以便于这两个过滤条件能够分别被下推。
X = FILTER C BY a1>0; D = FILTER X BY b1>0;
PushUpFilter
将过滤条件下推(沿着数据流DAG图上推),减少数据传输量
FilterAboveForeach
从foreach语句中移除与之前操作重复的过滤条件
ImplicitSplitInserter
插入split语句,(原因详见下文“其他优化”中split部分)
MergeFilter
在PushUpFilter之后,合并过滤条件,减少filter语句
PushDownForEachFlatten
将foreach中的flatten往后放(沿着数据流DAG图下推),能够减少后续join等操作的数据量。因为如果flatten对bag操作,一条记录会生成多条记录,降低后续join操作的性能,优化后,会将flatten操作放在join操作之后。
LimitOptimizer
Limit语句下推,尽早减少数据传输量。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索优化
, 逻辑
, 语句
, 变换
, 规则
, 条件
Flatten
pigcms微店系统、plan系统维护盘 iso、plan系统维护盘、mac系统treeplan安装、plan 9 操作系统,以便于您获取更多的相关知识。