Repository: hive Updated Branches: refs/heads/master c72d073c1 -> 61176b10c
HIVE-10520: LLAP: Must reset small table result columns for Native Vectorization of Map Join (Matt McCline via Jason Dere) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/61176b10 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/61176b10 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/61176b10 Branch: refs/heads/master Commit: 61176b10cfdd1a50cbab12c4913622d8941606a8 Parents: c72d073 Author: Jason Dere <jd...@hortonworks.com> Authored: Fri May 1 11:24:49 2015 -0700 Committer: Jason Dere <jd...@hortonworks.com> Committed: Fri May 1 11:24:49 2015 -0700 ---------------------------------------------------------------------- .../mapjoin/VectorMapJoinCommonOperator.java | 7 +++++ .../VectorMapJoinGenerateResultOperator.java | 4 +-- .../VectorMapJoinInnerBigOnlyLongOperator.java | 5 ++++ ...ctorMapJoinInnerBigOnlyMultiKeyOperator.java | 5 ++++ ...VectorMapJoinInnerBigOnlyStringOperator.java | 5 ++++ ...ectorMapJoinInnerGenerateResultOperator.java | 15 ++++++++++ .../mapjoin/VectorMapJoinInnerLongOperator.java | 4 +++ .../VectorMapJoinInnerMultiKeyOperator.java | 4 +++ .../VectorMapJoinInnerStringOperator.java | 4 +++ .../VectorMapJoinLeftSemiLongOperator.java | 5 ++++ .../VectorMapJoinLeftSemiMultiKeyOperator.java | 5 ++++ .../VectorMapJoinLeftSemiStringOperator.java | 5 ++++ ...ectorMapJoinOuterGenerateResultOperator.java | 31 ++++++++++++++++---- .../mapjoin/VectorMapJoinOuterLongOperator.java | 4 +++ .../VectorMapJoinOuterMultiKeyOperator.java | 4 +++ .../VectorMapJoinOuterStringOperator.java | 4 +++ 16 files changed, 103 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinCommonOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinCommonOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinCommonOperator.java index f9d5736..b215f70 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinCommonOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinCommonOperator.java @@ -132,6 +132,10 @@ public abstract class VectorMapJoinCommonOperator extends MapJoinOperator implem // to output batch scratch columns for the small table portion. protected VectorColumnSourceMapping smallTableMapping; + // These are the output columns for the small table and the outer small table keys. + protected int[] smallTableOutputVectorColumns; + protected int[] bigTableOuterKeyOutputVectorColumns; + // These are the columns in the big and small table that are ByteColumnVector columns. // We create data buffers for these columns so we can copy strings into those columns by value. protected int[] bigTableByteColumnVectorColumns; @@ -415,6 +419,9 @@ public abstract class VectorMapJoinCommonOperator extends MapJoinOperator implem smallTableMapping.finalize(); + bigTableOuterKeyOutputVectorColumns = bigTableOuterKeyMapping.getOutputColumns(); + smallTableOutputVectorColumns = smallTableMapping.getOutputColumns(); + // Which big table and small table columns are ByteColumnVector and need have their data buffer // to be manually reset for some join result processing? http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinGenerateResultOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinGenerateResultOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinGenerateResultOperator.java index 70c8cb1..0f1c7a8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinGenerateResultOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinGenerateResultOperator.java @@ -331,7 +331,7 @@ public abstract class VectorMapJoinGenerateResultOperator extends VectorMapJoinC } if (bigTableVectorCopyOuterKeys != null) { bigTableVectorCopyOuterKeys.copyByReference(batch, batchIndex, overflowBatch, 0); - for (int column : bigTableOuterKeyMapping.getOutputColumns()) { + for (int column : bigTableOuterKeyOutputVectorColumns) { overflowBatch.cols[column].isRepeating = true; } } @@ -347,7 +347,7 @@ public abstract class VectorMapJoinGenerateResultOperator extends VectorMapJoinC } if (bigTableVectorCopyOuterKeys != null) { - for (int column : bigTableOuterKeyMapping.getOutputColumns()) { + for (int column : bigTableOuterKeyOutputVectorColumns) { ColumnVector colVector = overflowBatch.cols[column]; colVector.reset(); } http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyLongOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyLongOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyLongOperator.java index 2173829..53a91d8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyLongOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyLongOperator.java @@ -125,6 +125,11 @@ public class VectorMapJoinInnerBigOnlyLongOperator extends VectorMapJoinInnerBig batchCounter++; + // Do the per-batch setup for an inner big-only join. + + // (Currently none) + // innerBigOnlyPerBatchSetup(batch); + // For inner joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyMultiKeyOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyMultiKeyOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyMultiKeyOperator.java index ab6c17e..9553fa0 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyMultiKeyOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyMultiKeyOperator.java @@ -130,6 +130,11 @@ public class VectorMapJoinInnerBigOnlyMultiKeyOperator extends VectorMapJoinInne batchCounter++; + // Do the per-batch setup for an inner big-only join. + + // (Currently none) + // innerBigOnlyPerBatchSetup(batch); + // For inner joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyStringOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyStringOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyStringOperator.java index 0b725aa..17d0b63 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyStringOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerBigOnlyStringOperator.java @@ -116,6 +116,11 @@ public class VectorMapJoinInnerBigOnlyStringOperator extends VectorMapJoinInnerB batchCounter++; + // Do the per-batch setup for an inner big-only join. + + // (Currently none) + // innerBigOnlyPerBatchSetup(batch); + // For inner joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerGenerateResultOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerGenerateResultOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerGenerateResultOperator.java index a7eb454..3a5e4b2 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerGenerateResultOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerGenerateResultOperator.java @@ -23,6 +23,7 @@ import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hive.ql.exec.JoinUtil; +import org.apache.hadoop.hive.ql.exec.vector.ColumnVector; import org.apache.hadoop.hive.ql.exec.vector.VectorizationContext; import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch; import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpression; @@ -127,6 +128,20 @@ public abstract class VectorMapJoinInnerGenerateResultOperator */ /** + * Do the per-batch setup for an inner join. + */ + protected void innerPerBatchSetup(VectorizedRowBatch batch) { + + // For join operators that can generate small table results, reset their + // (target) scratch columns. + + for (int column : smallTableOutputVectorColumns) { + ColumnVector smallTableColumn = batch.cols[column]; + smallTableColumn.reset(); + } + } + + /** * Generate the inner join output results for one vectorized row batch. * * @param batch http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerLongOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerLongOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerLongOperator.java index c998252..b77a93c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerLongOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerLongOperator.java @@ -124,6 +124,10 @@ public class VectorMapJoinInnerLongOperator extends VectorMapJoinInnerGenerateRe batchCounter++; + // Do the per-batch setup for an inner join. + + innerPerBatchSetup(batch); + // For inner joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerMultiKeyOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerMultiKeyOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerMultiKeyOperator.java index e426476..938506b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerMultiKeyOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerMultiKeyOperator.java @@ -128,6 +128,10 @@ public class VectorMapJoinInnerMultiKeyOperator extends VectorMapJoinInnerGenera batchCounter++; + // Do the per-batch setup for an inner join. + + innerPerBatchSetup(batch); + // For inner joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerStringOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerStringOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerStringOperator.java index 3bc225a..f7dd8e2 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerStringOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinInnerStringOperator.java @@ -115,6 +115,10 @@ public class VectorMapJoinInnerStringOperator extends VectorMapJoinInnerGenerate batchCounter++; + // Do the per-batch setup for an inner join. + + innerPerBatchSetup(batch); + // For inner joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiLongOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiLongOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiLongOperator.java index dd614da..75aeefb 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiLongOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiLongOperator.java @@ -125,6 +125,11 @@ public class VectorMapJoinLeftSemiLongOperator extends VectorMapJoinLeftSemiGene batchCounter++; + // Do the per-batch setup for an left semi join. + + // (Currently none) + // leftSemiPerBatchSetup(batch); + // For left semi joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiMultiKeyOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiMultiKeyOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiMultiKeyOperator.java index cf4f312..ea287f4 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiMultiKeyOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiMultiKeyOperator.java @@ -129,6 +129,11 @@ public class VectorMapJoinLeftSemiMultiKeyOperator extends VectorMapJoinLeftSemi batchCounter++; + // Do the per-batch setup for an left semi join. + + // (Currently none) + // leftSemiPerBatchSetup(batch); + // For left semi joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiStringOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiStringOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiStringOperator.java index 12d663c..116cb81 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiStringOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinLeftSemiStringOperator.java @@ -116,6 +116,11 @@ public class VectorMapJoinLeftSemiStringOperator extends VectorMapJoinLeftSemiGe batchCounter++; + // Do the per-batch setup for an left semi join. + + // (Currently none) + // leftSemiPerBatchSetup(batch); + // For left semi joins, we may apply the filter(s) now. for(VectorExpression ve : bigTableFilterExpressions) { ve.evaluate(batch); http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterGenerateResultOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterGenerateResultOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterGenerateResultOperator.java index 3309921..7ef5574 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterGenerateResultOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterGenerateResultOperator.java @@ -126,6 +126,25 @@ public abstract class VectorMapJoinOuterGenerateResultOperator */ /** + * Do the per-batch setup for an outer join. + */ + protected void outerPerBatchSetup(VectorizedRowBatch batch) { + + // For join operators that can generate small table results, reset their + // (target) scratch columns. + + for (int column : smallTableOutputVectorColumns) { + ColumnVector smallTableColumn = batch.cols[column]; + smallTableColumn.reset(); + } + + for (int column : bigTableOuterKeyOutputVectorColumns) { + ColumnVector bigTableOuterKeyColumn = batch.cols[column]; + bigTableOuterKeyColumn.reset(); + } + } + + /** * Generate the outer join output results for one vectorized row batch. * * Any filter expressions will apply now since hash map lookup for outer join is complete. @@ -413,7 +432,7 @@ public abstract class VectorMapJoinOuterGenerateResultOperator // Mark any scratch small table scratch columns that would normally receive a copy of the // key as null and repeating. - for (int column : bigTableOuterKeyMapping.getOutputColumns()) { + for (int column : bigTableOuterKeyOutputVectorColumns) { ColumnVector colVector = batch.cols[column]; colVector.isRepeating = true; colVector.noNulls = false; @@ -421,7 +440,7 @@ public abstract class VectorMapJoinOuterGenerateResultOperator } // Small table values are set to null and repeating. - for (int column : smallTableMapping.getOutputColumns()) { + for (int column : smallTableOutputVectorColumns) { ColumnVector colVector = batch.cols[column]; colVector.isRepeating = true; colVector.noNulls = false; @@ -442,14 +461,14 @@ public abstract class VectorMapJoinOuterGenerateResultOperator // Mark any scratch small table scratch columns that would normally receive a copy of the // key as null, too. - for (int column : bigTableOuterKeyMapping.getOutputColumns()) { + for (int column : bigTableOuterKeyOutputVectorColumns) { ColumnVector colVector = batch.cols[column]; colVector.noNulls = false; colVector.isNull[batchIndex] = true; } // Small table values are set to null. - for (int column : smallTableMapping.getOutputColumns()) { + for (int column : smallTableOutputVectorColumns) { ColumnVector colVector = batch.cols[column]; colVector.noNulls = false; colVector.isNull[batchIndex] = true; @@ -573,7 +592,7 @@ public abstract class VectorMapJoinOuterGenerateResultOperator batch.selectedInUse = true; } - for (int column : smallTableMapping.getOutputColumns()) { + for (int column : smallTableOutputVectorColumns) { ColumnVector colVector = batch.cols[column]; colVector.noNulls = false; colVector.isNull[0] = true; @@ -582,7 +601,7 @@ public abstract class VectorMapJoinOuterGenerateResultOperator // Mark any scratch small table scratch columns that would normally receive a copy of the key // as null, too. - for (int column : bigTableOuterKeyMapping.getOutputColumns()) { + for (int column : bigTableOuterKeyOutputVectorColumns) { ColumnVector colVector = batch.cols[column]; colVector.noNulls = false; colVector.isNull[0] = true; http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterLongOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterLongOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterLongOperator.java index 8f18672..37ccf22 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterLongOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterLongOperator.java @@ -123,6 +123,10 @@ public class VectorMapJoinOuterLongOperator extends VectorMapJoinOuterGenerateRe batchCounter++; + // Do the per-batch setup for an outer join. + + outerPerBatchSetup(batch); + // For outer join, DO NOT apply filters yet. It is incorrect for outer join to // apply the filter before hash table matching. http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterMultiKeyOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterMultiKeyOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterMultiKeyOperator.java index ffee959..23a29f7 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterMultiKeyOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterMultiKeyOperator.java @@ -128,6 +128,10 @@ public class VectorMapJoinOuterMultiKeyOperator extends VectorMapJoinOuterGenera batchCounter++; + // Do the per-batch setup for an outer join. + + outerPerBatchSetup(batch); + // For outer join, DO NOT apply filters yet. It is incorrect for outer join to // apply the filter before hash table matching. http://git-wip-us.apache.org/repos/asf/hive/blob/61176b10/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterStringOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterStringOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterStringOperator.java index 5167c19..f0af3f6 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterStringOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinOuterStringOperator.java @@ -115,6 +115,10 @@ public class VectorMapJoinOuterStringOperator extends VectorMapJoinOuterGenerate batchCounter++; + // Do the per-batch setup for an outer join. + + outerPerBatchSetup(batch); + // For outer join, DO NOT apply filters yet. It is incorrect for outer join to // apply the filter before hash table matching.