You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2016/11/23 20:06:52 UTC

hive git commit: HIVE-15234 : Semijoin cardinality estimation can be improved (Ashutosh Chauhan via Jesus Camacho Rodriguez)

Repository: hive
Updated Branches:
  refs/heads/master 9f72e40d5 -> ea920d6de


HIVE-15234 : Semijoin cardinality estimation can be improved (Ashutosh Chauhan via Jesus Camacho Rodriguez)

Signed-off-by: Ashutosh Chauhan <ha...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/ea920d6d
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/ea920d6d
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/ea920d6d

Branch: refs/heads/master
Commit: ea920d6de800dd12e144a8a02456d796935eac87
Parents: 9f72e40
Author: Ashutosh Chauhan <ha...@apache.org>
Authored: Fri Nov 18 15:04:30 2016 -0800
Committer: Ashutosh Chauhan <ha...@apache.org>
Committed: Wed Nov 23 12:06:14 2016 -0800

----------------------------------------------------------------------
 .../ql/optimizer/calcite/HiveRelFactories.java  |  4 +-
 .../calcite/reloperators/HiveJoin.java          | 29 ++-----------
 .../calcite/reloperators/HiveMultiJoin.java     |  2 +-
 .../stats/HiveRelMdDistinctRowCount.java        |  3 +-
 .../calcite/stats/HiveRelMdSelectivity.java     | 17 +++++---
 .../optimizer/calcite/stats/HiveRelMdSize.java  | 25 ++++++++---
 .../calcite/translator/HiveOpConverter.java     | 44 ++++++++++++--------
 .../hadoop/hive/ql/parse/CalcitePlanner.java    |  7 ++--
 8 files changed, 69 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/ea920d6d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelFactories.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelFactories.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelFactories.java
index a123f63..823b099 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelFactories.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelFactories.java
@@ -146,7 +146,7 @@ public class HiveRelFactories {
     @Override
     public RelNode createJoin(RelNode left, RelNode right, RexNode condition, JoinRelType joinType,
         Set<String> variablesStopped, boolean semiJoinDone) {
-      return HiveJoin.getJoin(left.getCluster(), left, right, condition, joinType, false);
+      return HiveJoin.getJoin(left.getCluster(), left, right, condition, joinType);
     }
 
     @Override
@@ -154,7 +154,7 @@ public class HiveRelFactories {
         Set<CorrelationId> variablesSet, JoinRelType joinType, boolean semiJoinDone) {
       // According to calcite, it is going to be removed before Calcite-2.0
       // TODO: to handle CorrelationId
-      return HiveJoin.getJoin(left.getCluster(), left, right, condition, joinType, semiJoinDone);
+      return HiveJoin.getJoin(left.getCluster(), left, right, condition, joinType);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/ea920d6d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveJoin.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveJoin.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveJoin.java
index 0ad3e81..ba9483e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveJoin.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveJoin.java
@@ -35,7 +35,6 @@ import org.apache.calcite.rel.RelWriter;
 import org.apache.calcite.rel.core.Join;
 import org.apache.calcite.rel.core.JoinRelType;
 import org.apache.calcite.rel.metadata.RelMetadataQuery;
-import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.util.ImmutableBitSet;
@@ -58,7 +57,6 @@ public class HiveJoin extends Join implements HiveRelNode {
     NONE, LEFT_RELATION, RIGHT_RELATION
   }
 
-  private final boolean leftSemiJoin;
   private final RexNode joinFilter;
   private final JoinPredicateInfo joinPredInfo;
   private JoinAlgorithm joinAlgorithm;
@@ -66,11 +64,11 @@ public class HiveJoin extends Join implements HiveRelNode {
 
 
   public static HiveJoin getJoin(RelOptCluster cluster, RelNode left, RelNode right,
-      RexNode condition, JoinRelType joinType, boolean leftSemiJoin) {
+      RexNode condition, JoinRelType joinType) {
     try {
       Set<String> variablesStopped = Collections.emptySet();
       HiveJoin join = new HiveJoin(cluster, null, left, right, condition, joinType, variablesStopped,
-              DefaultJoinAlgorithm.INSTANCE, leftSemiJoin);
+              DefaultJoinAlgorithm.INSTANCE);
       return join;
     } catch (InvalidRelException | CalciteSemanticException e) {
       throw new RuntimeException(e);
@@ -79,7 +77,7 @@ public class HiveJoin extends Join implements HiveRelNode {
 
   protected HiveJoin(RelOptCluster cluster, RelTraitSet traits, RelNode left, RelNode right,
       RexNode condition, JoinRelType joinType, Set<String> variablesStopped,
-      JoinAlgorithm joinAlgo, boolean leftSemiJoin) throws InvalidRelException, CalciteSemanticException {
+      JoinAlgorithm joinAlgo) throws InvalidRelException, CalciteSemanticException {
     super(cluster, TraitsUtil.getDefaultTraitSet(cluster), left, right, condition, joinType,
         variablesStopped);
     final List<RelDataTypeField> systemFieldList = ImmutableList.of();
@@ -92,7 +90,6 @@ public class HiveJoin extends Join implements HiveRelNode {
             this.getCondition(), joinKeyExprs, filterNulls, null);
     this.joinPredInfo = HiveCalciteUtil.JoinPredicateInfo.constructJoinPredicateInfo(this);
     this.joinAlgorithm = joinAlgo;
-    this.leftSemiJoin = leftSemiJoin;
   }
 
   @Override
@@ -105,7 +102,7 @@ public class HiveJoin extends Join implements HiveRelNode {
     try {
       Set<String> variablesStopped = Collections.emptySet();
       HiveJoin join = new HiveJoin(getCluster(), traitSet, left, right, conditionExpr, joinType,
-          variablesStopped, joinAlgorithm, leftSemiJoin);
+          variablesStopped, joinAlgorithm);
       // If available, copy state to registry for optimization rules
       HiveRulesRegistry registry = join.getCluster().getPlanner().getContext().unwrap(HiveRulesRegistry.class);
       if (registry != null) {
@@ -217,10 +214,6 @@ public class HiveJoin extends Join implements HiveRelNode {
     this.joinCost = joinCost;
   }
 
-  public boolean isLeftSemiJoin() {
-    return leftSemiJoin;
-  }
-
   /**
    * Model cost of join as size of Inputs.
    */
@@ -237,18 +230,4 @@ public class HiveJoin extends Join implements HiveRelNode {
         .item("cost", joinCost == null ?
                 "not available" : joinCost);
   }
-
-  /**
-   * @return returns rowtype representing only the left join input
-   */
-  @Override
-  public RelDataType deriveRowType() {
-    if (leftSemiJoin) {
-      return deriveJoinRowType(left.getRowType(), null, JoinRelType.INNER,
-          getCluster().getTypeFactory(), null,
-          Collections.<RelDataTypeField> emptyList());
-    }
-    return super.deriveRowType();
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/ea920d6d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveMultiJoin.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveMultiJoin.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveMultiJoin.java
index cff737c..06279eb 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveMultiJoin.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveMultiJoin.java
@@ -62,7 +62,7 @@ public final class HiveMultiJoin extends AbstractRelNode {
    * @param inputs                inputs into this multi-join
    * @param condition             join filter applicable to this join node
    * @param rowType               row type of the join result of this node
-   * @param joinInputs            
+   * @param joinInputs
    * @param joinTypes             the join type corresponding to each input; if
    *                              an input is null-generating in a left or right
    *                              outer join, the entry indicates the type of

http://git-wip-us.apache.org/repos/asf/hive/blob/ea920d6d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistinctRowCount.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistinctRowCount.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistinctRowCount.java
index e6384a2..77f7aa8 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistinctRowCount.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistinctRowCount.java
@@ -22,6 +22,7 @@ import java.util.List;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.Join;
+import org.apache.calcite.rel.core.SemiJoin;
 import org.apache.calcite.rel.metadata.ChainedRelMetadataProvider;
 import org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider;
 import org.apache.calcite.rel.metadata.RelMdDistinctRowCount;
@@ -95,7 +96,7 @@ public class HiveRelMdDistinctRowCount extends RelMdDistinctRowCount {
     if (rel instanceof HiveJoin) {
       HiveJoin hjRel = (HiveJoin) rel;
       //TODO: Improve this
-      if (hjRel.isLeftSemiJoin()) {
+      if (rel instanceof SemiJoin) {
         return mq.getDistinctRowCount(hjRel.getLeft(), groupKey,
             rel.getCluster().getRexBuilder().makeLiteral(true));
       } else {

http://git-wip-us.apache.org/repos/asf/hive/blob/ea920d6d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSelectivity.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSelectivity.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSelectivity.java
index 651adc0..7192684 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSelectivity.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSelectivity.java
@@ -23,7 +23,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.calcite.rel.core.Join;
 import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.SemiJoin;
 import org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider;
 import org.apache.calcite.rel.metadata.RelMdSelectivity;
 import org.apache.calcite.rel.metadata.RelMdUtil;
@@ -61,7 +63,7 @@ public class HiveRelMdSelectivity extends RelMdSelectivity {
     return 1.0;
   }
 
-  public Double getSelectivity(HiveJoin j, RelMetadataQuery mq, RexNode predicate) {
+  public Double getSelectivity(Join j, RelMetadataQuery mq, RexNode predicate) {
     if (j.getJoinType().equals(JoinRelType.INNER)) {
       return computeInnerJoinSelectivity(j, mq, predicate);
     } else if (j.getJoinType().equals(JoinRelType.LEFT) ||
@@ -78,8 +80,7 @@ public class HiveRelMdSelectivity extends RelMdSelectivity {
     return 1.0;
   }
 
-  private Double computeInnerJoinSelectivity(HiveJoin j, RelMetadataQuery mq, RexNode predicate) {
-    double ndvCrossProduct = 1;
+  private Double computeInnerJoinSelectivity(Join j, RelMetadataQuery mq, RexNode predicate) {
     Pair<Boolean, RexNode> predInfo =
         getCombinedPredicateForJoin(j, predicate);
     if (!predInfo.getKey()) {
@@ -120,15 +121,19 @@ public class HiveRelMdSelectivity extends RelMdSelectivity {
     // NDV of the join can not exceed the cardinality of cross join.
     List<JoinLeafPredicateInfo> peLst = jpi.getEquiJoinPredicateElements();
     int noOfPE = peLst.size();
+    double ndvCrossProduct = 1;
     if (noOfPE > 0) {
       ndvCrossProduct = exponentialBackoff(peLst, colStatMap);
 
-      if (j.isLeftSemiJoin())
+      if (j instanceof SemiJoin) {
         ndvCrossProduct = Math.min(mq.getRowCount(j.getLeft()),
             ndvCrossProduct);
-      else
+      }else if (j instanceof HiveJoin){
         ndvCrossProduct = Math.min(mq.getRowCount(j.getLeft())
             * mq.getRowCount(j.getRight()), ndvCrossProduct);
+      } else {
+        throw new RuntimeException("Unexpected Join type: " + j.getClass().getName());
+      }
     }
 
     // 4. Join Selectivity = 1/NDV
@@ -208,7 +213,7 @@ public class HiveRelMdSelectivity extends RelMdSelectivity {
    * @return if predicate is the join condition return (true, joinCond)
    * else return (false, minusPred)
    */
-  private Pair<Boolean,RexNode> getCombinedPredicateForJoin(HiveJoin j, RexNode additionalPredicate) {
+  private Pair<Boolean,RexNode> getCombinedPredicateForJoin(Join j, RexNode additionalPredicate) {
     RexNode minusPred = RelMdUtil.minusPreds(j.getCluster().getRexBuilder(), additionalPredicate,
         j.getCondition());
 

http://git-wip-us.apache.org/repos/asf/hive/blob/ea920d6d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSize.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSize.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSize.java
index 1039f56..2ecafc0 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSize.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdSize.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hive.ql.optimizer.calcite.stats;
 import java.util.List;
 
 import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.SemiJoin;
 import org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider;
 import org.apache.calcite.rel.metadata.RelMdSize;
 import org.apache.calcite.rel.metadata.RelMetadataProvider;
@@ -77,15 +78,28 @@ public class HiveRelMdSize extends RelMdSize {
     return list.build();
   }
 
+  @Override
+  public List<Double> averageColumnSizes(SemiJoin rel, RelMetadataQuery mq) {
+    final RelNode left = rel.getLeft();
+    final List<Double> lefts =
+        mq.getAverageColumnSizes(left);
+    if (lefts == null) {
+      return null;
+    }
+    final int fieldCount = rel.getRowType().getFieldCount();
+    Double[] sizes = new Double[fieldCount];
+    if (lefts != null) {
+      lefts.toArray(sizes);
+    }
+    return ImmutableNullableList.copyOf(sizes);
+  }
+
   public List<Double> averageColumnSizes(HiveJoin rel, RelMetadataQuery mq) {
     final RelNode left = rel.getLeft();
     final RelNode right = rel.getRight();
     final List<Double> lefts =
         mq.getAverageColumnSizes(left);
-    List<Double> rights = null;
-    if (!rel.isLeftSemiJoin()) {
-        rights = mq.getAverageColumnSizes(right);
-    }
+    List<Double> rights = mq.getAverageColumnSizes(right);
     if (lefts == null && rights == null) {
       return null;
     }
@@ -105,6 +119,7 @@ public class HiveRelMdSize extends RelMdSize {
 
   // TODO: remove when averageTypeValueSize method RelMdSize
   //       supports all types
+  @Override
   public Double averageTypeValueSize(RelDataType type) {
     switch (type.getSqlTypeName()) {
     case BOOLEAN:
@@ -139,7 +154,7 @@ public class HiveRelMdSize extends RelMdSize {
     case BINARY:
       return (double) type.getPrecision();
     case VARBINARY:
-      return Math.min((double) type.getPrecision(), 100d);
+      return Math.min(type.getPrecision(), 100d);
     case CHAR:
       return (double) type.getPrecision() * BYTES_PER_CHARACTER;
     case VARCHAR:

http://git-wip-us.apache.org/repos/asf/hive/blob/ea920d6d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java
----------------------------------------------------------------------
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 0ead9be..d494c9f 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
@@ -35,7 +35,10 @@ import org.apache.calcite.rel.RelDistribution;
 import org.apache.calcite.rel.RelDistribution.Type;
 import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Join;
 import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.SemiJoin;
+import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.rex.RexInputRef;
 import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.rex.RexNode;
@@ -57,6 +60,7 @@ import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.hive.ql.io.AcidUtils.Operation;
 import org.apache.hadoop.hive.ql.metadata.VirtualColumn;
 import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil;
+import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelOptUtil;
 import org.apache.hadoop.hive.ql.optimizer.calcite.RelOptHiveTable;
 import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveAggregate;
 import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveFilter;
@@ -173,11 +177,8 @@ public class HiveOpConverter {
       return visit((HiveMultiJoin) rn);
     } else if (rn instanceof HiveJoin) {
       return visit((HiveJoin) rn);
-    } else if (rn instanceof HiveSemiJoin) {
-      HiveSemiJoin sj = (HiveSemiJoin) rn;
-      HiveJoin hj = HiveJoin.getJoin(sj.getCluster(), sj.getLeft(), sj.getRight(),
-          sj.getCondition(), sj.getJoinType(), true);
-      return visit(hj);
+    } else if (rn instanceof SemiJoin) {
+      return visit((SemiJoin)rn);
     } else if (rn instanceof HiveFilter) {
       return visit((HiveFilter) rn);
     } else if (rn instanceof HiveSortLimit) {
@@ -328,6 +329,11 @@ public class HiveOpConverter {
     return translateJoin(joinRel);
   }
 
+
+  OpAttr visit(SemiJoin joinRel) throws SemanticException {
+    return translateJoin(joinRel);
+  }
+
   private String getHiveDerivedTableAlias() {
     return "$hdt$_" + (this.uniqueCounter++);
   }
@@ -356,7 +362,7 @@ public class HiveOpConverter {
     Set<Integer> newVcolsInCalcite = new HashSet<Integer>();
     newVcolsInCalcite.addAll(inputs[0].vcolsInCalcite);
     if (joinRel instanceof HiveMultiJoin ||
-            extractJoinType((HiveJoin)joinRel) != JoinType.LEFTSEMI) {
+            !(joinRel instanceof SemiJoin)) {
       int shift = inputs[0].inputs.get(0).getSchema().getSignature().size();
       for (int i = 1; i < inputs.length; i++) {
         newVcolsInCalcite.addAll(HiveCalciteUtil.shiftVColsSet(inputs[i].vcolsInCalcite, shift));
@@ -381,8 +387,12 @@ public class HiveOpConverter {
     List<RexNode> joinFilters;
     if (joinRel instanceof HiveJoin) {
       joinFilters = ImmutableList.of(((HiveJoin)joinRel).getJoinFilter());
-    } else {
+    } else if (joinRel instanceof HiveMultiJoin){
       joinFilters = ((HiveMultiJoin)joinRel).getJoinFilters();
+    } else if (joinRel instanceof HiveSemiJoin){
+      joinFilters = ImmutableList.of(((HiveSemiJoin)joinRel).getJoinFilter());
+    } else {
+      throw new SemanticException ("Can't handle join type: " + joinRel.getClass().getName());
     }
     List<List<ExprNodeDesc>> filterExpressions = Lists.newArrayList();
     for (int i = 0; i< joinFilters.size(); i++) {
@@ -889,9 +899,14 @@ public class HiveOpConverter {
       noOuterJoin = !hmj.isOuterJoin();
     } else {
       joinCondns = new JoinCondDesc[1];
-      JoinType joinType = extractJoinType((HiveJoin)join);
+      semiJoin = join instanceof SemiJoin;
+      JoinType joinType;
+      if (semiJoin) {
+        joinType = JoinType.LEFTSEMI;
+      } else {
+        joinType = extractJoinType((Join)join);
+      }
       joinCondns[0] = new JoinCondDesc(new JoinCond(0, 1, joinType));
-      semiJoin = joinType == JoinType.LEFTSEMI;
       noOuterJoin = joinType != JoinType.FULLOUTER && joinType != JoinType.LEFTOUTER
               && joinType != JoinType.RIGHTOUTER;
     }
@@ -917,9 +932,7 @@ public class HiveOpConverter {
       }
       Operator<?> parent = inputRS.getParentOperators().get(0);
       ReduceSinkDesc rsDesc = inputRS.getConf();
-
       int[] index = inputRS.getValueIndex();
-
       Byte tag = (byte) rsDesc.getTag();
 
       // 2.1.1. If semijoin...
@@ -929,11 +942,10 @@ public class HiveOpConverter {
         continue;
       }
 
+      posToAliasMap.put(pos, new HashSet<String>(inputRS.getSchema().getTableNames()));
       List<String> keyColNames = rsDesc.getOutputKeyColumnNames();
       List<String> valColNames = rsDesc.getOutputValueColumnNames();
 
-      posToAliasMap.put(pos, new HashSet<String>(inputRS.getSchema().getTableNames()));
-
       Map<String, ExprNodeDesc> descriptors = buildBacktrackFromReduceSinkForJoin(outputPos,
           outputColumnNames, keyColNames, valColNames, index, parent, baseSrc[pos]);
 
@@ -1080,11 +1092,7 @@ public class HiveOpConverter {
     }
   }
 
-  private static JoinType extractJoinType(HiveJoin join) {
-    // SEMIJOIN
-    if (join.isLeftSemiJoin()) {
-      return JoinType.LEFTSEMI;
-    }
+  private static JoinType extractJoinType(Join join) {
     // OUTER AND INNER JOINS
     JoinType resultJoinType;
     switch (join.getJoinType()) {

http://git-wip-us.apache.org/repos/asf/hive/blob/ea920d6d/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
----------------------------------------------------------------------
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 6965f8f..2bb6aa1 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
@@ -1187,7 +1187,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
       // TODO: Decorelation of subquery should be done before attempting
       // Partition Pruning; otherwise Expression evaluation may try to execute
       // corelated sub query.
-      
+
       PerfLogger perfLogger = SessionState.getPerfLogger();
 
       final int maxCNFNodeCount = conf.getIntVar(HiveConf.ConfVars.HIVE_CBO_CNF_NODES_LIMIT);
@@ -1650,8 +1650,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
           LOG.warn("Duplicates detected when adding columns to RR: see previous message");
         }
       } else {
-        topRel = HiveJoin.getJoin(cluster, leftRel, rightRel, calciteJoinCond, calciteJoinType,
-            leftSemiJoin);
+        topRel = HiveJoin.getJoin(cluster, leftRel, rightRel, calciteJoinCond, calciteJoinType);
         topRR = RowResolver.getCombinedRR(leftRR, rightRR);
       }
 
@@ -3393,7 +3392,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
       for (ColumnInfo ci : rs.getSignature()) {
         argTypeBldr.add(TypeConverter.convert(ci.getType(), dtFactory));
       }
- 
+
       SqlOperator calciteOp = SqlFunctionConverter.getCalciteOperator(genericUDTFName, genericUDTF,
              argTypeBldr.build(), retType);