diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java index d15520c..d6f5f62 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java +++ 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; @@ -295,12 +296,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()) { @@ -321,6 +329,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 @@ -337,7 +346,7 @@ OpAttr visit(HiveJoin joinRel) throws SemanticException { } // 7. Return result - return new OpAttr(null, vcolMap, joinOp); + return new OpAttr(tabAlias, vcolMap, joinOp); } OpAttr visit(HiveAggregate aggRel) throws SemanticException { diff --git ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java index 1d3d1a2..e709088 100644 --- ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java +++ 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; }