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 feb26bc..a506283 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 @@ -94,7 +94,6 @@ import org.apache.hadoop.hive.ql.plan.UnionDesc; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; public class HiveOpConverter { @@ -115,6 +114,7 @@ private final UnparseTranslator unparseTranslator; private final Map> topOps; private final boolean strictMode; + private int uniqueCounter; public HiveOpConverter(SemanticAnalyzer semanticAnalyzer, HiveConf hiveConf, UnparseTranslator unparseTranslator, Map> topOps, @@ -124,6 +124,7 @@ public HiveOpConverter(SemanticAnalyzer semanticAnalyzer, HiveConf hiveConf, this.unparseTranslator = unparseTranslator; this.topOps = topOps; this.strictMode = strictMode; + this.uniqueCounter = 0; } static class OpAttr { @@ -298,12 +299,18 @@ 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] = "inp" + i + "-" + uniqueCounter; + uniqueCounter++; } if (LOG.isDebugEnabled()) { @@ -324,6 +331,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; }