You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2017/03/13 19:42:41 UTC
[40/46] hive git commit: HIVE-16182: Semijoin: Avoid
VectorHashKeyWrapper allocations for the bloom hash aggregate (Gopal V,
reviewed by Sergey Shelukhin)
HIVE-16182: Semijoin: Avoid VectorHashKeyWrapper allocations for the bloom hash aggregate (Gopal V, reviewed by Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/bfa03502
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/bfa03502
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/bfa03502
Branch: refs/heads/hive-14535
Commit: bfa035024082a08c0fde12a3c58f2b59ec57ef99
Parents: ba4f6e7
Author: Gopal V <go...@apache.org>
Authored: Mon Mar 13 23:11:37 2017 +0530
Committer: Gopal V <go...@apache.org>
Committed: Mon Mar 13 23:11:37 2017 +0530
----------------------------------------------------------------------
.../ql/exec/vector/VectorHashKeyWrapper.java | 37 +++++++++++++++++++-
.../exec/vector/VectorHashKeyWrapperBatch.java | 2 +-
2 files changed, 37 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/bfa03502/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapper.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapper.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapper.java
index 2bd1850..5de59b1 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapper.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapper.java
@@ -47,6 +47,8 @@ public class VectorHashKeyWrapper extends KeyWrapper {
private static final Timestamp[] EMPTY_TIMESTAMP_ARRAY = new Timestamp[0];
private static final HiveIntervalDayTime[] EMPTY_INTERVAL_DAY_TIME_ARRAY = new HiveIntervalDayTime[0];
+ public static final VectorHashKeyWrapper EMPTY_KEY_WRAPPER = new EmptyVectorHashKeyWrapper();
+
private long[] longValues;
private double[] doubleValues;
@@ -63,7 +65,7 @@ public class VectorHashKeyWrapper extends KeyWrapper {
private boolean[] isNull;
private int hashcode;
- public VectorHashKeyWrapper(int longValuesCount, int doubleValuesCount,
+ private VectorHashKeyWrapper(int longValuesCount, int doubleValuesCount,
int byteValuesCount, int decimalValuesCount, int timestampValuesCount,
int intervalDayTimeValuesCount) {
longValues = longValuesCount > 0 ? new long[longValuesCount] : EMPTY_LONG_ARRAY;
@@ -97,6 +99,17 @@ public class VectorHashKeyWrapper extends KeyWrapper {
private VectorHashKeyWrapper() {
}
+ public static VectorHashKeyWrapper allocate(int longValuesCount, int doubleValuesCount,
+ int byteValuesCount, int decimalValuesCount, int timestampValuesCount,
+ int intervalDayTimeValuesCount) {
+ if ((longValuesCount + doubleValuesCount + byteValuesCount + decimalValuesCount
+ + timestampValuesCount + intervalDayTimeValuesCount) == 0) {
+ return EMPTY_KEY_WRAPPER;
+ }
+ return new VectorHashKeyWrapper(longValuesCount, doubleValuesCount, byteValuesCount,
+ decimalValuesCount, timestampValuesCount, intervalDayTimeValuesCount);
+ }
+
@Override
public void getNewKey(Object row, ObjectInspector rowInspector) throws HiveException {
throw new HiveException("Should not be called");
@@ -415,5 +428,27 @@ public class VectorHashKeyWrapper extends KeyWrapper {
public HiveIntervalDayTime getIntervalDayTime(int i) {
return intervalDayTimeValues[i];
}
+
+ public static final class EmptyVectorHashKeyWrapper extends VectorHashKeyWrapper {
+ private EmptyVectorHashKeyWrapper() {
+ super(0, 0, 0, 0, 0, 0);
+ // no need to override assigns - all assign ops will fail due to 0 size
+ }
+
+ @Override
+ protected Object clone() {
+ // immutable
+ return this;
+ }
+
+ @Override
+ public boolean equals(Object that) {
+ if (that == this) {
+ // should only be one object
+ return true;
+ }
+ return super.equals(that);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/bfa03502/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapperBatch.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapperBatch.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapperBatch.java
index b4708b5..f68228c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapperBatch.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorHashKeyWrapperBatch.java
@@ -744,7 +744,7 @@ public class VectorHashKeyWrapperBatch extends VectorColumnSetInfo {
}
public VectorHashKeyWrapper allocateKeyWrapper() {
- return new VectorHashKeyWrapper(longIndices.length, doubleIndices.length,
+ return VectorHashKeyWrapper.allocate(longIndices.length, doubleIndices.length,
stringIndices.length, decimalIndices.length, timestampIndices.length,
intervalDayTimeIndices.length);
}