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..6bf1375 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 @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import org.apache.calcite.rel.RelCollation; import org.apache.calcite.rel.RelCollations; @@ -72,6 +73,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 +297,17 @@ OpAttr visit(HiveProject projectRel) throws SemanticException { } OpAttr visit(HiveJoin joinRel) throws SemanticException { + // 0. Additional data structures needed for the join optimization + // through Hive + 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)); + baseSrc[i] = UUID.randomUUID().toString(); } if (LOG.isDebugEnabled()) { @@ -321,6 +328,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 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; }