diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index c9ee423..e3b056a 100644 --- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -703,7 +703,7 @@ public void setSparkConfigUpdated(boolean isSparkConfigUpdated) { // CBO related HIVE_CBO_ENABLED("hive.cbo.enable", true, "Flag to control enabling Cost Based Optimizations using Calcite framework."), - HIVE_CBO_RETPATH_HIVEOP("hive.cbo.returnpath.hiveop", false, "Flag to control calcite plan to hive operator conversion"), + HIVE_CBO_RETPATH_HIVEOP("hive.cbo.returnpath.hiveop", true, "Flag to control calcite plan to hive operator conversion"), HIVE_CBO_EXTENDED_COST_MODEL("hive.cbo.costmodel.extended", false, "Flag to control enabling the extended cost model based on" + "CPU, IO and cardinality. Otherwise, the cost model is based on cardinality."), HIVE_CBO_COST_MODEL_CPU("hive.cbo.costmodel.cpu", "0.000001", "Default cost of a comparison"), diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java index feb26bc..ae9b218 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java @@ -72,6 +72,7 @@ import org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.OrderExpression; import org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.PartitionExpression; import org.apache.hadoop.hive.ql.parse.PTFTranslator; +import org.apache.hadoop.hive.ql.parse.QB; import org.apache.hadoop.hive.ql.parse.RowResolver; import org.apache.hadoop.hive.ql.parse.SemanticAnalyzer; import org.apache.hadoop.hive.ql.parse.SemanticException; @@ -298,12 +299,19 @@ OpAttr visit(HiveProject projectRel) throws SemanticException { } OpAttr visit(HiveJoin joinRel) throws SemanticException { + // 0. Additional data structures needed for the join optimization + // through Hive + String tabAlias = null; + String[] baseSrc = new String[joinRel.getInputs().size()]; + // 1. Convert inputs OpAttr[] inputs = new OpAttr[joinRel.getInputs().size()]; List> children = new ArrayList>(joinRel.getInputs().size()); for (int i = 0; i < inputs.length; i++) { inputs[i] = dispatch(joinRel.getInput(i)); children.add(inputs[i].inputs.get(0)); + tabAlias = QB.getAppendedAliasFromId(tabAlias, inputs[i].tabAlias); + baseSrc[i] = inputs[i].tabAlias; } if (LOG.isDebugEnabled()) { @@ -324,6 +332,7 @@ OpAttr visit(HiveJoin joinRel) throws SemanticException { } // 4.b Generate Join operator JoinOperator joinOp = genJoin(joinRel, joinPredInfo, children, joinKeys); + joinOp.getConf().setBaseSrc(baseSrc); // 5. TODO: Extract condition for non-equi join elements (if any) and // add it @@ -340,7 +349,7 @@ OpAttr visit(HiveJoin joinRel) throws SemanticException { } // 7. Return result - return new OpAttr(null, newVcolsInCalcite, joinOp); + return new OpAttr(tabAlias, newVcolsInCalcite, joinOp); } OpAttr visit(HiveAggregate aggRel) throws SemanticException { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java index 1d3d1a2..e709088 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java @@ -543,6 +543,10 @@ public void setFixedAsSorted(boolean fixedAsSorted) { return baseSrc; } + public void setBaseSrc(String[] baseSrc) { + this.baseSrc = baseSrc; + } + public String getId() { return id; }