You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by tc...@apache.org on 2018/11/27 10:23:11 UTC
hive git commit: HIVE-20930: VectorCoalesce in FILTER mode doesn't
take effect (Teddy Choi, reviewed by Ashutosh Chauhan)
Repository: hive
Updated Branches:
refs/heads/master d3f8aba74 -> 7c5b99b5b
HIVE-20930: VectorCoalesce in FILTER mode doesn't take effect (Teddy Choi, reviewed by Ashutosh Chauhan)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/7c5b99b5
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/7c5b99b5
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/7c5b99b5
Branch: refs/heads/master
Commit: 7c5b99b5b560b418ed44a19c45a9b289ffb11ab6
Parents: d3f8aba
Author: Teddy Choi <pu...@gmail.com>
Authored: Tue Nov 27 19:22:47 2018 +0900
Committer: Teddy Choi <pu...@gmail.com>
Committed: Tue Nov 27 19:22:47 2018 +0900
----------------------------------------------------------------------
.../ql/exec/vector/VectorizationContext.java | 33 ++++++++++++++++++--
1 file changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/7c5b99b5/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
index f0d75f5..8109213 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
@@ -2240,7 +2240,7 @@ import com.google.common.annotations.VisibleForTesting;
// Coalesce is a special case because it can take variable number of arguments.
// Nvl is a specialization of the Coalesce.
- ve = getCoalesceExpression(childExpr, returnType);
+ ve = getCoalesceExpression(childExpr, mode, returnType);
} else if (udf instanceof GenericUDFElt) {
// Elt is a special case because it can take variable number of arguments.
@@ -2311,7 +2311,8 @@ import com.google.common.annotations.VisibleForTesting;
}
}
- private VectorExpression getCoalesceExpression(List<ExprNodeDesc> childExpr, TypeInfo returnType)
+ private VectorExpression getCoalesceExpression(List<ExprNodeDesc> childExpr,
+ VectorExpressionDescriptor.Mode mode, TypeInfo returnType)
throws HiveException {
int[] inputColumns = new int[childExpr.size()];
VectorExpression[] vectorChildren =
@@ -2339,7 +2340,33 @@ import com.google.common.annotations.VisibleForTesting;
vectorCoalesce.setOutputDataTypePhysicalVariation(DataTypePhysicalVariation.NONE);
freeNonColumns(vectorChildren);
- return vectorCoalesce;
+
+ boolean isFilter = false; // Assume.
+ if (mode == VectorExpressionDescriptor.Mode.FILTER) {
+
+ // Is output type a BOOLEAN?
+ if (returnType.getCategory() == Category.PRIMITIVE &&
+ ((PrimitiveTypeInfo) returnType).getPrimitiveCategory() == PrimitiveCategory.BOOLEAN) {
+ isFilter = true;
+ } else {
+ return null;
+ }
+ }
+
+ if (isFilter) {
+
+ // Wrap the PROJECTION IF expression output with a filter.
+ SelectColumnIsTrue filterVectorExpr = new SelectColumnIsTrue(vectorCoalesce.getOutputColumnNum());
+
+ filterVectorExpr.setChildExpressions(new VectorExpression[] {vectorCoalesce});
+
+ filterVectorExpr.setInputTypeInfos(vectorCoalesce.getOutputTypeInfo());
+ filterVectorExpr.setInputDataTypePhysicalVariations(vectorCoalesce.getOutputDataTypePhysicalVariation());
+
+ return filterVectorExpr;
+ } else {
+ return vectorCoalesce;
+ }
}
private VectorExpression getEltExpression(List<ExprNodeDesc> childExpr, TypeInfo returnType)