[11/48] hive git commit: HIVE-13826: Make VectorUDFAdaptor work for GenericUDFBetween when used as FILTER (Matt McCline, reviewed by Ashutosh Chauhan)
HIVE-13826: Make VectorUDFAdaptor work for GenericUDFBetween when used as FILTER (Matt McCline, 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/71725869 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/71725869 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/71725869 Branch: refs/heads/java8 Commit: 7172586966739de0ba1659bf9abcea40d109b341 Parents: 9bebaf6 Author: Matt McClineAuthored: Thu May 26 08:25:29 2016 -0700 Committer: Matt McCline Committed: Thu May 26 08:25:29 2016 -0700 -- .../ql/exec/vector/VectorizationContext.java| 22 +++- .../clientpositive/vector_between_columns.q | 8 +- .../tez/vector_between_columns.q.out| 116 +- .../clientpositive/vector_between_columns.q.out | 117 ++- 4 files changed, 250 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hive/blob/71725869/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 886e222..a76e31d 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 @@ -1965,8 +1965,17 @@ public class VectorizationContext { private VectorExpression getCustomUDFExpression(ExprNodeGenericFuncDesc expr, Mode mode) throws HiveException { -if (mode != Mode.PROJECTION) { - return null; +boolean isFilter = false;// Assume. +if (mode == Mode.FILTER) { + + // Is output type a BOOLEAN? + TypeInfo resultTypeInfo = expr.getTypeInfo(); + if (resultTypeInfo.getCategory() == Category.PRIMITIVE && + ((PrimitiveTypeInfo) resultTypeInfo).getPrimitiveCategory() == PrimitiveCategory.BOOLEAN) { +isFilter = true; + } else { +return null; + } } //GenericUDFBridge udfBridge = (GenericUDFBridge) expr.getGenericUDF(); @@ -2032,7 +2041,14 @@ public class VectorizationContext { for (Integer i : exprResultColumnNums) { ocm.freeOutputColumn(i); } -return ve; + +if (isFilter) { + SelectColumnIsTrue filterVectorExpr = new SelectColumnIsTrue(outputCol); + filterVectorExpr.setChildExpressions(new VectorExpression[] {ve}); + return filterVectorExpr; +} else { + return ve; +} } public static boolean isStringFamily(String resultType) { http://git-wip-us.apache.org/repos/asf/hive/blob/71725869/ql/src/test/queries/clientpositive/vector_between_columns.q -- diff --git a/ql/src/test/queries/clientpositive/vector_between_columns.q b/ql/src/test/queries/clientpositive/vector_between_columns.q index ba38445..41f9243 100644 --- a/ql/src/test/queries/clientpositive/vector_between_columns.q +++ b/ql/src/test/queries/clientpositive/vector_between_columns.q @@ -7,8 +7,7 @@ set hive.mapred.mode=nonstrict; -- SORT_QUERY_RESULTS -- --- The following WILL NOT BE ABLE TO USE the VectorUDFAdaptor to GenericUDFBetween --- because the mode = FILTER is not supported yet. +-- Verify the VectorUDFAdaptor to GenericUDFBetween works for PROJECTION and FILTER. -- create table if not exists TSINT_txt ( RNUM int , CSINT smallint ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'; @@ -25,6 +24,11 @@ create table TSINT stored as orc AS SELECT * FROM TSINT_txt; create table TINT stored as orc AS SELECT * FROM TINT_txt; +explain +select tint.rnum, tsint.rnum, tint.cint, tsint.csint, (case when (tint.cint between tsint.csint and tsint.csint) then "Ok" else "NoOk" end) as between_col from tint , tsint; + +select tint.rnum, tsint.rnum, tint.cint, tsint.csint, (case when (tint.cint between tsint.csint and tsint.csint) then "Ok" else "NoOk" end) as between_col from tint , tsint; + explain select tint.rnum, tsint.rnum, tint.cint, tsint.csint from tint , tsint where tint.cint between tsint.csint and tsint.csint; http://git-wip-us.apache.org/repos/asf/hive/blob/71725869/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out -- diff --git a/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out b/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out index 8a9978b..939aab5 100644 --- a/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out +++
hive git commit: HIVE-13826: Make VectorUDFAdaptor work for GenericUDFBetween when used as FILTER (Matt McCline, reviewed by Ashutosh Chauhan)
Repository: hive Updated Branches: refs/heads/branch-2.1 ffbd633fa -> f547a6420 HIVE-13826: Make VectorUDFAdaptor work for GenericUDFBetween when used as FILTER (Matt McCline, 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/f547a642 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/f547a642 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/f547a642 Branch: refs/heads/branch-2.1 Commit: f547a6420914caebb2e8c842f0244d785b3910a9 Parents: ffbd633 Author: Matt McClineAuthored: Thu May 26 08:25:29 2016 -0700 Committer: Matt McCline Committed: Thu May 26 10:10:57 2016 -0700 -- .../ql/exec/vector/VectorizationContext.java| 22 +++- .../clientpositive/vector_between_columns.q | 8 +- .../tez/vector_between_columns.q.out| 116 +- .../clientpositive/vector_between_columns.q.out | 117 ++- 4 files changed, 250 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hive/blob/f547a642/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 886e222..a76e31d 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 @@ -1965,8 +1965,17 @@ public class VectorizationContext { private VectorExpression getCustomUDFExpression(ExprNodeGenericFuncDesc expr, Mode mode) throws HiveException { -if (mode != Mode.PROJECTION) { - return null; +boolean isFilter = false;// Assume. +if (mode == Mode.FILTER) { + + // Is output type a BOOLEAN? + TypeInfo resultTypeInfo = expr.getTypeInfo(); + if (resultTypeInfo.getCategory() == Category.PRIMITIVE && + ((PrimitiveTypeInfo) resultTypeInfo).getPrimitiveCategory() == PrimitiveCategory.BOOLEAN) { +isFilter = true; + } else { +return null; + } } //GenericUDFBridge udfBridge = (GenericUDFBridge) expr.getGenericUDF(); @@ -2032,7 +2041,14 @@ public class VectorizationContext { for (Integer i : exprResultColumnNums) { ocm.freeOutputColumn(i); } -return ve; + +if (isFilter) { + SelectColumnIsTrue filterVectorExpr = new SelectColumnIsTrue(outputCol); + filterVectorExpr.setChildExpressions(new VectorExpression[] {ve}); + return filterVectorExpr; +} else { + return ve; +} } public static boolean isStringFamily(String resultType) { http://git-wip-us.apache.org/repos/asf/hive/blob/f547a642/ql/src/test/queries/clientpositive/vector_between_columns.q -- diff --git a/ql/src/test/queries/clientpositive/vector_between_columns.q b/ql/src/test/queries/clientpositive/vector_between_columns.q index ba38445..41f9243 100644 --- a/ql/src/test/queries/clientpositive/vector_between_columns.q +++ b/ql/src/test/queries/clientpositive/vector_between_columns.q @@ -7,8 +7,7 @@ set hive.mapred.mode=nonstrict; -- SORT_QUERY_RESULTS -- --- The following WILL NOT BE ABLE TO USE the VectorUDFAdaptor to GenericUDFBetween --- because the mode = FILTER is not supported yet. +-- Verify the VectorUDFAdaptor to GenericUDFBetween works for PROJECTION and FILTER. -- create table if not exists TSINT_txt ( RNUM int , CSINT smallint ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'; @@ -25,6 +24,11 @@ create table TSINT stored as orc AS SELECT * FROM TSINT_txt; create table TINT stored as orc AS SELECT * FROM TINT_txt; +explain +select tint.rnum, tsint.rnum, tint.cint, tsint.csint, (case when (tint.cint between tsint.csint and tsint.csint) then "Ok" else "NoOk" end) as between_col from tint , tsint; + +select tint.rnum, tsint.rnum, tint.cint, tsint.csint, (case when (tint.cint between tsint.csint and tsint.csint) then "Ok" else "NoOk" end) as between_col from tint , tsint; + explain select tint.rnum, tsint.rnum, tint.cint, tsint.csint from tint , tsint where tint.cint between tsint.csint and tsint.csint; http://git-wip-us.apache.org/repos/asf/hive/blob/f547a642/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out -- diff --git a/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out b/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out index 8a9978b..939aab5 100644 ---
hive git commit: HIVE-13826: Make VectorUDFAdaptor work for GenericUDFBetween when used as FILTER (Matt McCline, reviewed by Ashutosh Chauhan)
Repository: hive Updated Branches: refs/heads/branch-1 0e83ae1e2 -> abaf88248 HIVE-13826: Make VectorUDFAdaptor work for GenericUDFBetween when used as FILTER (Matt McCline, 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/abaf8824 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/abaf8824 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/abaf8824 Branch: refs/heads/branch-1 Commit: abaf88248d3cc92c157e537ed4510136e003a132 Parents: 0e83ae1 Author: Matt McClineAuthored: Thu May 26 08:48:08 2016 -0700 Committer: Matt McCline Committed: Thu May 26 08:48:08 2016 -0700 -- .../ql/exec/vector/VectorizationContext.java| 22 +++- .../clientpositive/vector_between_columns.q | 8 +- .../tez/vector_between_columns.q.out| 115 +- .../clientpositive/vector_between_columns.q.out | 117 ++- 4 files changed, 249 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hive/blob/abaf8824/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 f09bfd6..86fdf1c 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 @@ -1946,8 +1946,17 @@ public class VectorizationContext { private VectorExpression getCustomUDFExpression(ExprNodeGenericFuncDesc expr, Mode mode) throws HiveException { -if (mode != Mode.PROJECTION) { - return null; +boolean isFilter = false;// Assume. +if (mode == Mode.FILTER) { + + // Is output type a BOOLEAN? + TypeInfo resultTypeInfo = expr.getTypeInfo(); + if (resultTypeInfo.getCategory() == Category.PRIMITIVE && + ((PrimitiveTypeInfo) resultTypeInfo).getPrimitiveCategory() == PrimitiveCategory.BOOLEAN) { +isFilter = true; + } else { +return null; + } } //GenericUDFBridge udfBridge = (GenericUDFBridge) expr.getGenericUDF(); @@ -2018,7 +2027,14 @@ public class VectorizationContext { for (Integer i : exprResultColumnNums) { ocm.freeOutputColumn(i); } -return ve; + +if (isFilter) { + SelectColumnIsTrue filterVectorExpr = new SelectColumnIsTrue(outputCol); + filterVectorExpr.setChildExpressions(new VectorExpression[] {ve}); + return filterVectorExpr; +} else { + return ve; +} } public static boolean isStringFamily(String resultType) { http://git-wip-us.apache.org/repos/asf/hive/blob/abaf8824/ql/src/test/queries/clientpositive/vector_between_columns.q -- diff --git a/ql/src/test/queries/clientpositive/vector_between_columns.q b/ql/src/test/queries/clientpositive/vector_between_columns.q index ba38445..41f9243 100644 --- a/ql/src/test/queries/clientpositive/vector_between_columns.q +++ b/ql/src/test/queries/clientpositive/vector_between_columns.q @@ -7,8 +7,7 @@ set hive.mapred.mode=nonstrict; -- SORT_QUERY_RESULTS -- --- The following WILL NOT BE ABLE TO USE the VectorUDFAdaptor to GenericUDFBetween --- because the mode = FILTER is not supported yet. +-- Verify the VectorUDFAdaptor to GenericUDFBetween works for PROJECTION and FILTER. -- create table if not exists TSINT_txt ( RNUM int , CSINT smallint ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'; @@ -25,6 +24,11 @@ create table TSINT stored as orc AS SELECT * FROM TSINT_txt; create table TINT stored as orc AS SELECT * FROM TINT_txt; +explain +select tint.rnum, tsint.rnum, tint.cint, tsint.csint, (case when (tint.cint between tsint.csint and tsint.csint) then "Ok" else "NoOk" end) as between_col from tint , tsint; + +select tint.rnum, tsint.rnum, tint.cint, tsint.csint, (case when (tint.cint between tsint.csint and tsint.csint) then "Ok" else "NoOk" end) as between_col from tint , tsint; + explain select tint.rnum, tsint.rnum, tint.cint, tsint.csint from tint , tsint where tint.cint between tsint.csint and tsint.csint; http://git-wip-us.apache.org/repos/asf/hive/blob/abaf8824/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out -- diff --git a/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out b/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out index 1361d2d..e7af0db 100644 ---
hive git commit: HIVE-13826: Make VectorUDFAdaptor work for GenericUDFBetween when used as FILTER (Matt McCline, reviewed by Ashutosh Chauhan)
Repository: hive Updated Branches: refs/heads/master 9bebaf619 -> 717258696 HIVE-13826: Make VectorUDFAdaptor work for GenericUDFBetween when used as FILTER (Matt McCline, 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/71725869 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/71725869 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/71725869 Branch: refs/heads/master Commit: 7172586966739de0ba1659bf9abcea40d109b341 Parents: 9bebaf6 Author: Matt McClineAuthored: Thu May 26 08:25:29 2016 -0700 Committer: Matt McCline Committed: Thu May 26 08:25:29 2016 -0700 -- .../ql/exec/vector/VectorizationContext.java| 22 +++- .../clientpositive/vector_between_columns.q | 8 +- .../tez/vector_between_columns.q.out| 116 +- .../clientpositive/vector_between_columns.q.out | 117 ++- 4 files changed, 250 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hive/blob/71725869/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 886e222..a76e31d 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 @@ -1965,8 +1965,17 @@ public class VectorizationContext { private VectorExpression getCustomUDFExpression(ExprNodeGenericFuncDesc expr, Mode mode) throws HiveException { -if (mode != Mode.PROJECTION) { - return null; +boolean isFilter = false;// Assume. +if (mode == Mode.FILTER) { + + // Is output type a BOOLEAN? + TypeInfo resultTypeInfo = expr.getTypeInfo(); + if (resultTypeInfo.getCategory() == Category.PRIMITIVE && + ((PrimitiveTypeInfo) resultTypeInfo).getPrimitiveCategory() == PrimitiveCategory.BOOLEAN) { +isFilter = true; + } else { +return null; + } } //GenericUDFBridge udfBridge = (GenericUDFBridge) expr.getGenericUDF(); @@ -2032,7 +2041,14 @@ public class VectorizationContext { for (Integer i : exprResultColumnNums) { ocm.freeOutputColumn(i); } -return ve; + +if (isFilter) { + SelectColumnIsTrue filterVectorExpr = new SelectColumnIsTrue(outputCol); + filterVectorExpr.setChildExpressions(new VectorExpression[] {ve}); + return filterVectorExpr; +} else { + return ve; +} } public static boolean isStringFamily(String resultType) { http://git-wip-us.apache.org/repos/asf/hive/blob/71725869/ql/src/test/queries/clientpositive/vector_between_columns.q -- diff --git a/ql/src/test/queries/clientpositive/vector_between_columns.q b/ql/src/test/queries/clientpositive/vector_between_columns.q index ba38445..41f9243 100644 --- a/ql/src/test/queries/clientpositive/vector_between_columns.q +++ b/ql/src/test/queries/clientpositive/vector_between_columns.q @@ -7,8 +7,7 @@ set hive.mapred.mode=nonstrict; -- SORT_QUERY_RESULTS -- --- The following WILL NOT BE ABLE TO USE the VectorUDFAdaptor to GenericUDFBetween --- because the mode = FILTER is not supported yet. +-- Verify the VectorUDFAdaptor to GenericUDFBetween works for PROJECTION and FILTER. -- create table if not exists TSINT_txt ( RNUM int , CSINT smallint ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'; @@ -25,6 +24,11 @@ create table TSINT stored as orc AS SELECT * FROM TSINT_txt; create table TINT stored as orc AS SELECT * FROM TINT_txt; +explain +select tint.rnum, tsint.rnum, tint.cint, tsint.csint, (case when (tint.cint between tsint.csint and tsint.csint) then "Ok" else "NoOk" end) as between_col from tint , tsint; + +select tint.rnum, tsint.rnum, tint.cint, tsint.csint, (case when (tint.cint between tsint.csint and tsint.csint) then "Ok" else "NoOk" end) as between_col from tint , tsint; + explain select tint.rnum, tsint.rnum, tint.cint, tsint.csint from tint , tsint where tint.cint between tsint.csint and tsint.csint; http://git-wip-us.apache.org/repos/asf/hive/blob/71725869/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out -- diff --git a/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out b/ql/src/test/results/clientpositive/tez/vector_between_columns.q.out index 8a9978b..939aab5 100644 ---