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);