diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index 5b30157..a1dccbe 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -24,9 +24,6 @@ minimr.query.files=infer_bucket_sort_map_operators.q,\ # Tests that are not enabled for CLI Driver disabled.query.files=ql_rewrite_gbtoidx.q,\ ql_rewrite_gbtoidx_cbo_1.q,\ - cbo_rp_subq_in.q,\ - cbo_rp_subq_not_in.q,\ - cbo_rp_subq_exists.q,\ orc_llap.q,\ ql_rewrite_gbtoidx_cbo_2.q,\ rcfile_merge1.q,\ diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRelDecorrelator.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRelDecorrelator.java index 05d2b28..c856fcd 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRelDecorrelator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRelDecorrelator.java @@ -83,6 +83,7 @@ import org.apache.calcite.util.Stacks; import org.apache.calcite.util.Util; import org.apache.calcite.util.mapping.Mappings; +import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelFactories; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveAggregate; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveFilter; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin; @@ -186,7 +187,7 @@ private HiveRelDecorrelator ( this.cm = cm; this.rexBuilder = cluster.getRexBuilder(); this.context = context; - relBuilder = RelFactories.LOGICAL_BUILDER.create(cluster, null); + relBuilder = HiveRelFactories.HIVE_BUILDER.create(cluster, null); } @@ -1035,10 +1036,7 @@ private RelNode createValueGenerator( if (r == null) { r = distinct; } else { - r = - LogicalJoin.create(r, distinct, - cluster.getRexBuilder().makeLiteral(true), - ImmutableSet.of(), JoinRelType.INNER); + r = HiveJoin.getJoin(cluster, r, distinct, cluster.getRexBuilder().makeLiteral(true), JoinRelType.INNER); } } } @@ -1131,8 +1129,7 @@ private Frame decorrelateInputWithValueGenerator(RelNode rel) { corDefOutputs); RelNode join = - LogicalJoin.create(frame.r, valueGen, rexBuilder.makeLiteral(true), - ImmutableSet.of(), JoinRelType.INNER); + HiveJoin.getJoin(rel.getCluster(), frame.r, valueGen , rexBuilder.makeLiteral(true), JoinRelType.INNER); // LogicalJoin or LogicalFilter does not change the old input ordering. All // input fields from newLeftInput(i.e. the original input to the old @@ -1391,8 +1388,8 @@ public Frame decorrelateRel(LogicalCorrelate rel) { final RexNode condition = RexUtil.composeConjunction(rexBuilder, conditions, false); RelNode newJoin = - LogicalJoin.create(leftFrame.r, rightFrame.r, condition, - ImmutableSet.of(), rel.getJoinType().toJoinType()); + HiveJoin.getJoin(rel.getCluster(), leftFrame.r, rightFrame.r, condition, + rel.getJoinType().toJoinType()); return register(rel, newJoin, mapOldToNewOutputs, corDefOutputs); } 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 21bf020..8cc1319 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 @@ -1511,11 +1511,11 @@ public RelOptMaterialization apply(RelOptMaterialization materialization) { if (HiveConf.getBoolVar(conf, ConfVars.HIVE_CBO_RETPATH_HIVEOP)) { perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER); // 10.1. Merge join into multijoin operators (if possible) - calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, true, mdProvider.getMetadataProvider(), null, - HepMatchOrder.BOTTOM_UP, HiveJoinProjectTransposeRule.BOTH_PROJECT_INCLUDE_OUTER, - HiveJoinProjectTransposeRule.LEFT_PROJECT_INCLUDE_OUTER, - HiveJoinProjectTransposeRule.RIGHT_PROJECT_INCLUDE_OUTER, - HiveJoinToMultiJoinRule.INSTANCE, HiveProjectMergeRule.INSTANCE); + //calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, true, mdProvider.getMetadataProvider(), null, + // HepMatchOrder.BOTTOM_UP, HiveJoinProjectTransposeRule.BOTH_PROJECT_INCLUDE_OUTER, + // HiveJoinProjectTransposeRule.LEFT_PROJECT_INCLUDE_OUTER, + // HiveJoinProjectTransposeRule.RIGHT_PROJECT_INCLUDE_OUTER, + // HiveJoinToMultiJoinRule.INSTANCE, HiveProjectMergeRule.INSTANCE); // The previous rules can pull up projections through join operators, // thus we run the field trimmer again to push them back down fieldTrimmer = new HiveRelFieldTrimmer(null, diff --git a/ql/src/test/results/clientpositive/cbo_rp_subq_exists.q.out b/ql/src/test/results/clientpositive/cbo_rp_subq_exists.q.out index 45f4524..06dbd30 100644 --- a/ql/src/test/results/clientpositive/cbo_rp_subq_exists.q.out +++ b/ql/src/test/results/clientpositive/cbo_rp_subq_exists.q.out @@ -195,6 +195,8 @@ POSTHOOK: type: CREATEVIEW POSTHOOK: Input: default@src_cbo POSTHOOK: Output: database:default POSTHOOK: Output: default@cv1 +POSTHOOK: Lineage: cv1.key SIMPLE [(src_cbo)b.FieldSchema(name:key, type:string, comment:null), ] +POSTHOOK: Lineage: cv1.value SIMPLE [(src_cbo)b.FieldSchema(name:value, type:string, comment:null), ] PREHOOK: query: select * from cv1 PREHOOK: type: QUERY PREHOOK: Input: default@cv1