diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveJoinProjectTransposeRule.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveJoinProjectTransposeRule.java index e684432606..b163052c3b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveJoinProjectTransposeRule.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveJoinProjectTransposeRule.java @@ -27,13 +27,14 @@ public class HiveJoinProjectTransposeRule extends JoinProjectTransposeRule { - public static final HiveJoinProjectTransposeRule LEFF_PROJECT_BTW_JOIN = + public static final HiveJoinProjectTransposeRule LEFT_PROJECT_BTW_JOIN = new HiveJoinProjectTransposeRule( operand(HiveJoin.class, operand(HiveProject.class, operand(HiveJoin.class, any())), operand(RelNode.class, any())), "JoinProjectTransposeRule(Project-Join-Other)", false, HiveRelFactories.HIVE_BUILDER); + public static final HiveJoinProjectTransposeRule RIGHT_PROJECT_BTW_JOIN = new HiveJoinProjectTransposeRule( operand(HiveJoin.class, diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index 22f3266c87..78e13d6a00 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -1785,19 +1785,19 @@ public RelNode apply(RelOptCluster cluster, RelOptSchema relOptSchema, SchemaPlu calcitePreCboPlan = hepPlan(calcitePreCboPlan, false, mdProvider.getMetadataProvider(), null, HiveRemoveSqCountCheck.INSTANCE); - perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, - "Calcite: Removing sq_count_check UDF "); + perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, "Calcite: Removing sq_count_check UDF "); } - // 4.1 Remove Projects between Joins so that JoinToMultiJoinRule can merge them to MultiJoin. - // Don't run this rule if hive is to remove sq_count_check since that rule expects to have project b/w join. - calcitePreCboPlan = hepPlan(calcitePreCboPlan, true, mdProvider.getMetadataProvider(), executorProvider, - HepMatchOrder.BOTTOM_UP, HiveJoinProjectTransposeRule.LEFF_PROJECT_BTW_JOIN, - HiveJoinProjectTransposeRule.RIGHT_PROJECT_BTW_JOIN); - // 4.2 Apply join order optimizations: reordering MST algorithm + // 4. Apply join order optimizations: reordering MST algorithm // If join optimizations failed because of missing stats, we continue with // the rest of optimizations if (profilesCBO.contains(ExtendedCBOProfile.JOIN_REORDERING)) { + // 4.1. Remove Projects between Joins so that JoinToMultiJoinRule can merge them to MultiJoin + calcitePreCboPlan = hepPlan(calcitePreCboPlan, true, mdProvider.getMetadataProvider(), executorProvider, + HepMatchOrder.BOTTOM_UP, HiveJoinProjectTransposeRule.LEFT_PROJECT_BTW_JOIN, + HiveJoinProjectTransposeRule.RIGHT_PROJECT_BTW_JOIN, HiveProjectMergeRule.INSTANCE); + + // 4.2. Join reordering perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER); try { List list = Lists.newArrayList();