diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 974f03b..41204cb 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -257,6 +257,9 @@ import org.eigenbase.rel.rules.MergeFilterRule; import org.eigenbase.rel.rules.PushFilterPastProjectRule; import org.eigenbase.rel.rules.PushFilterPastSetOpRule; +import org.eigenbase.rel.rules.PushSemiJoinPastFilterRule; +import org.eigenbase.rel.rules.PushSemiJoinPastJoinRule; +import org.eigenbase.rel.rules.PushSemiJoinPastProjectRule; import org.eigenbase.rel.rules.SemiJoinRel; import org.eigenbase.rel.rules.TransitivePredicatesOnJoinRule; import org.eigenbase.relopt.RelOptCluster; @@ -12407,7 +12410,15 @@ public RelNode applyPreCBOTransforms(RelNode basePlan, RelMetadataProvider mdPro // TODO: Decorelation of subquery should be done before attempting // Partition Pruning; otherwise Expression evaluation may try to execute // corelated sub query. - basePlan = hepPlan(basePlan, true, mdProvider, new PushFilterPastProjectRule( + + // Push Down Semi Joins + basePlan = hepPlan(basePlan, true, mdProvider, + PushSemiJoinPastJoinRule.INSTANCE, + new PushSemiJoinPastFilterRule(HiveFilterRel.DEFAULT_FILTER_FACTORY), + new PushSemiJoinPastProjectRule(HiveProjectRel.DEFAULT_PROJECT_FACTORY)); + + basePlan = hepPlan(basePlan, true, mdProvider, + new PushFilterPastProjectRule( FilterRelBase.class, HiveFilterRel.DEFAULT_FILTER_FACTORY, HiveProjectRel.class, HiveProjectRel.DEFAULT_PROJECT_FACTORY), new PushFilterPastSetOpRule( HiveFilterRel.DEFAULT_FILTER_FACTORY), new MergeFilterRule(