You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by pr...@apache.org on 2015/05/07 03:21:00 UTC

[06/52] [abbrv] hive git commit: HIVE-10520: LLAP: Must reset small table result columns for Native Vectorization of Map Join (Matt McCline via Jason Dere)

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/llap
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.