diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/SearchTransformer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/SearchTransformer.java index 565479734b42..2e09dc1d3542 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/SearchTransformer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/SearchTransformer.java @@ -17,6 +17,9 @@ */ package org.apache.hadoop.hive.ql.optimizer.calcite; +import com.google.common.collect.BoundType; +import com.google.common.collect.Range; +import com.google.common.collect.RangeSet; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexCall; @@ -35,8 +38,10 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.Set; /** * A class that transforms a call to the internal {@link SqlStdOperatorTable#SEARCH} operator into an equivalent @@ -92,6 +97,16 @@ public RexNode transform() { range -> rexBuilder.makeCall(SqlStdOperatorTable.NOT_EQUALS, ref, rexBuilder.makeLiteral(range.lowerEndpoint(), operandType, true, true))).toList(); orList.add(RexUtil.composeConjunction(rexBuilder, list)); + } else if (isNotBetween(sarg.rangeSet)) { + Iterator> iterator = sarg.rangeSet.asRanges().iterator(); + C lower = iterator.next().upperEndpoint(); + C upper = iterator.next().lowerEndpoint(); + RexNode notBetween = rexBuilder.makeCall(HiveBetween.INSTANCE, + rexBuilder.makeLiteral(true), // inverse flag enabled, i.e. 'NOT BETWEEN' + ref, + rexBuilder.makeLiteral(lower, operandType, true, true), + rexBuilder.makeLiteral(upper, operandType, true, true)); + orList.add(notBetween); } else { RangeConverter consumer = new RangeConverter<>(rexBuilder, operandType, ref); RangeSets.forEach(sarg.rangeSet, consumer); @@ -125,6 +140,19 @@ public RexNode transform() { return x; } + // Identifies a NOT BETWEEN expression: x < 10 OR x > 20 => x NOT BETWEEN 10, 20 + private boolean isNotBetween(RangeSet rangeSet) { + Set> ranges = rangeSet.asRanges(); + if (ranges.size() == 2) { + Iterator> iterator = ranges.iterator(); + Range first = iterator.next(); + Range second = iterator.next(); + return !first.hasLowerBound() && first.hasUpperBound() && first.upperBoundType() == BoundType.OPEN + && !second.hasUpperBound() && second.hasLowerBound() && second.lowerBoundType() == BoundType.OPEN; + } + return false; + } + public static class Shuttle extends RexShuttle { private final RexBuilder rexBuilder; private RexUnknownAs unknownContext; diff --git a/ql/src/test/org/apache/hadoop/hive/ql/optimizer/calcite/TestSearchTransformerShuttle.java b/ql/src/test/org/apache/hadoop/hive/ql/optimizer/calcite/TestSearchTransformerShuttle.java index 599ee2d6c16a..7a24f2076563 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/optimizer/calcite/TestSearchTransformerShuttle.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/optimizer/calcite/TestSearchTransformerShuttle.java @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableRangeSet; import com.google.common.collect.Range; import com.google.common.collect.RangeSet; +import com.google.common.collect.TreeRangeSet; import org.apache.calcite.jdbc.JavaTypeFactoryImpl; import org.apache.calcite.rel.type.RelDataType; @@ -97,6 +98,21 @@ public static Collection generateExpressions() { expressions.add(new Object[] { searchFalse, TRUE, "AND(IS NOT NULL($0), BETWEEN(false, $0, 10, 20))" }); expressions.add(new Object[] { searchFalse, UNKNOWN, "AND(IS NOT NULL($0), BETWEEN(false, $0, 10, 20))" }); + + // NOT BETWEEN tests + final RexNode searchNotBetweenUnknown = createNotBetweenSearchNode(rexBuilder, 10, 20, UNKNOWN); + final RexNode searchNotBetweenFalse = createNotBetweenSearchNode(rexBuilder, 10, 20, FALSE); + final RexNode searchNotBetweenTrue = createNotBetweenSearchNode(rexBuilder, 10, 20, TRUE); + expressions.add(new Object[] { searchNotBetweenFalse, UNKNOWN, "AND(IS NOT NULL($0), BETWEEN(true, $0, 10, 20))" }); + expressions.add(new Object[] { searchNotBetweenFalse, TRUE, "AND(IS NOT NULL($0), BETWEEN(true, $0, 10, 20))" }); + expressions.add(new Object[] { searchNotBetweenFalse, FALSE, "BETWEEN(true, $0, 10, 20)" }); + expressions.add(new Object[] { searchNotBetweenTrue, UNKNOWN, "OR(IS NULL($0), BETWEEN(true, $0, 10, 20))" }); + expressions.add(new Object[] { searchNotBetweenTrue, TRUE, "BETWEEN(true, $0, 10, 20)" }); + expressions.add(new Object[] { searchNotBetweenTrue, FALSE, "OR(IS NULL($0), BETWEEN(true, $0, 10, 20))" }); + expressions.add(new Object[] { searchNotBetweenUnknown, UNKNOWN, "BETWEEN(true, $0, 10, 20)" }); + expressions.add(new Object[] { searchNotBetweenUnknown, TRUE, "BETWEEN(true, $0, 10, 20)" }); + expressions.add(new Object[] { searchNotBetweenUnknown, FALSE, "BETWEEN(true, $0, 10, 20)" }); + return expressions; } @@ -109,5 +125,15 @@ private static RexNode createSearchNode(RexBuilder builder, int lower, int upper return builder.makeCall(SEARCH, builder.makeInputRef(intType, 0), builder.makeSearchArgumentLiteral(sarg, intType)); } + private static RexNode createNotBetweenSearchNode(RexBuilder builder, int lower, int upper, RexUnknownAs nullAs) { + final RelDataType intType = builder.getTypeFactory() + .createTypeWithNullability(builder.getTypeFactory().createSqlType(SqlTypeName.INTEGER), true); + RangeSet rangeSet = TreeRangeSet.create(); + rangeSet.add(Range.lessThan(BigDecimal.valueOf(lower))); + rangeSet.add(Range.greaterThan(BigDecimal.valueOf(upper))); + Sarg sarg = Sarg.of(nullAs, rangeSet); + return builder.makeCall(SEARCH, builder.makeInputRef(intType, 0), builder.makeSearchArgumentLiteral(sarg, intType)); + } + } diff --git a/ql/src/test/results/clientpositive/llap/correlationoptimizer8.q.out b/ql/src/test/results/clientpositive/llap/correlationoptimizer8.q.out index 19af2ee56349..ef44e27e6b2b 100644 --- a/ql/src/test/results/clientpositive/llap/correlationoptimizer8.q.out +++ b/ql/src/test/results/clientpositive/llap/correlationoptimizer8.q.out @@ -82,21 +82,21 @@ STAGE PLANS: Map Operator Tree: TableScan alias: x - filterExpr: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) + filterExpr: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) Statistics: Num rows: 25 Data size: 4375 Basic stats: COMPLETE Column stats: COMPLETE Filter Operator - predicate: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + predicate: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: key (type: string), value (type: string) outputColumnNames: _col0, _col1 - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Reduce Output Operator key expressions: _col0 (type: string) null sort order: z sort order: + Map-reduce partition columns: _col0 (type: string) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE value expressions: _col1 (type: string) Execution mode: vectorized, llap LLAP IO: all inputs @@ -126,14 +126,14 @@ STAGE PLANS: 0 _col0 (type: string) 1 _col0 (type: string) outputColumnNames: _col1, _col2, _col3 - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: _col2 (type: string), _col3 (type: string), _col1 (type: bigint) outputColumnNames: _col0, _col1, _col2 - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE File Output Operator compressed: false - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE table: input format: org.apache.hadoop.mapred.SequenceFileInputFormat output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat @@ -282,21 +282,21 @@ STAGE PLANS: Map Operator Tree: TableScan alias: x - filterExpr: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) + filterExpr: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) Statistics: Num rows: 25 Data size: 4375 Basic stats: COMPLETE Column stats: COMPLETE Filter Operator - predicate: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + predicate: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: key (type: string), value (type: string) outputColumnNames: _col0, _col1 - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Reduce Output Operator key expressions: _col0 (type: string) null sort order: z sort order: + Map-reduce partition columns: _col0 (type: string) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE value expressions: _col1 (type: string) Execution mode: vectorized, llap LLAP IO: all inputs @@ -326,14 +326,14 @@ STAGE PLANS: 0 _col0 (type: string) 1 _col0 (type: string) outputColumnNames: _col1, _col2, _col3 - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: _col2 (type: string), _col3 (type: string), _col1 (type: bigint) outputColumnNames: _col0, _col1, _col2 - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE File Output Operator compressed: false - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE table: input format: org.apache.hadoop.mapred.SequenceFileInputFormat output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat @@ -922,21 +922,21 @@ STAGE PLANS: Map Operator Tree: TableScan alias: x - filterExpr: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) + filterExpr: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) Statistics: Num rows: 25 Data size: 4375 Basic stats: COMPLETE Column stats: COMPLETE Filter Operator - predicate: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + predicate: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: key (type: string), value (type: string) outputColumnNames: _col0, _col1 - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Reduce Output Operator key expressions: _col0 (type: string) null sort order: z sort order: + Map-reduce partition columns: _col0 (type: string) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE value expressions: _col1 (type: string) Execution mode: vectorized, llap LLAP IO: all inputs @@ -970,14 +970,14 @@ STAGE PLANS: 0 _col0 (type: string) 1 _col0 (type: string) outputColumnNames: _col1, _col2, _col3 - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: _col2 (type: string), _col3 (type: string), _col1 (type: bigint) outputColumnNames: _col0, _col1, _col2 - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE File Output Operator compressed: false - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE table: input format: org.apache.hadoop.mapred.SequenceFileInputFormat output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat diff --git a/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out b/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out index a06b1eb40f82..a74aab430a15 100644 --- a/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out +++ b/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out @@ -2280,7 +2280,7 @@ WHERE "ss_customer_sk" IS NOT NULL AND "ss_sold_date_sk" IS NOT NULL) AS "t1" INNER JOIN (SELECT "d_date_sk" FROM (SELECT "d_date_sk", "d_year", "d_moy" FROM "DATE_DIM") AS "t2" -WHERE ("d_moy" < 1 OR "d_moy" > 3) AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."ss_sold_date_sk" = "t4"."d_date_sk" +WHERE "d_moy" NOT BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."ss_sold_date_sk" = "t4"."d_date_sk" hive.sql.query.fieldNames ss_customer_sk hive.sql.query.fieldTypes int hive.sql.query.split false @@ -2316,7 +2316,7 @@ WHERE "ws_bill_customer_sk" IS NOT NULL AND "ws_sold_date_sk" IS NOT NULL) AS "t INNER JOIN (SELECT "d_date_sk" FROM (SELECT "d_date_sk", "d_year", "d_moy" FROM "DATE_DIM") AS "t2" -WHERE ("d_moy" < 1 OR "d_moy" > 3) AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."ws_sold_date_sk" = "t4"."d_date_sk" +WHERE "d_moy" NOT BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."ws_sold_date_sk" = "t4"."d_date_sk" hive.sql.query.fieldNames literalTrue,ws_bill_customer_sk hive.sql.query.fieldTypes boolean,int hive.sql.query.split false @@ -2347,7 +2347,7 @@ WHERE "cs_ship_customer_sk" IS NOT NULL AND "cs_sold_date_sk" IS NOT NULL) AS "t INNER JOIN (SELECT "d_date_sk" FROM (SELECT "d_date_sk", "d_year", "d_moy" FROM "DATE_DIM") AS "t2" -WHERE ("d_moy" < 1 OR "d_moy" > 3) AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."cs_sold_date_sk" = "t4"."d_date_sk" +WHERE "d_moy" NOT BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."cs_sold_date_sk" = "t4"."d_date_sk" hive.sql.query.fieldNames literalTrue,cs_ship_customer_sk hive.sql.query.fieldTypes boolean,int hive.sql.query.split false @@ -6918,7 +6918,7 @@ WHERE "ss_customer_sk" IS NOT NULL AND "ss_sold_date_sk" IS NOT NULL) AS "t1" INNER JOIN (SELECT "d_date_sk" FROM (SELECT "d_date_sk", "d_year", "d_moy" FROM "DATE_DIM") AS "t2" -WHERE ("d_moy" < 1 OR "d_moy" > 3) AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."ss_sold_date_sk" = "t4"."d_date_sk" +WHERE "d_moy" NOT BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."ss_sold_date_sk" = "t4"."d_date_sk" hive.sql.query.fieldNames ss_customer_sk hive.sql.query.fieldTypes int hive.sql.query.split false @@ -6954,7 +6954,7 @@ WHERE "ws_bill_customer_sk" IS NOT NULL AND "ws_sold_date_sk" IS NOT NULL) AS "t INNER JOIN (SELECT "d_date_sk" FROM (SELECT "d_date_sk", "d_year", "d_moy" FROM "DATE_DIM") AS "t2" -WHERE ("d_moy" < 1 OR "d_moy" > 3) AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."ws_sold_date_sk" = "t4"."d_date_sk" +WHERE "d_moy" NOT BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."ws_sold_date_sk" = "t4"."d_date_sk" GROUP BY "t1"."ws_bill_customer_sk" hive.sql.query.fieldNames literalTrue,ws_bill_customer_sk hive.sql.query.fieldTypes boolean,int @@ -6986,7 +6986,7 @@ WHERE "cs_ship_customer_sk" IS NOT NULL AND "cs_sold_date_sk" IS NOT NULL) AS "t INNER JOIN (SELECT "d_date_sk" FROM (SELECT "d_date_sk", "d_year", "d_moy" FROM "DATE_DIM") AS "t2" -WHERE ("d_moy" < 1 OR "d_moy" > 3) AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."cs_sold_date_sk" = "t4"."d_date_sk" +WHERE "d_moy" NOT BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t4" ON "t1"."cs_sold_date_sk" = "t4"."d_date_sk" GROUP BY "t1"."cs_ship_customer_sk" hive.sql.query.fieldNames literalTrue,cs_ship_customer_sk hive.sql.query.fieldTypes boolean,int diff --git a/ql/src/test/results/clientpositive/llap/filter_numeric.q.out b/ql/src/test/results/clientpositive/llap/filter_numeric.q.out index 4702fd6a8cf8..d27dfbb9b57d 100644 --- a/ql/src/test/results/clientpositive/llap/filter_numeric.q.out +++ b/ql/src/test/results/clientpositive/llap/filter_numeric.q.out @@ -1658,7 +1658,7 @@ STAGE PLANS: Processor Tree: TableScan alias: partint - filterExpr: ((hr < 12) or (hr > 14)) (type: boolean) + filterExpr: hr NOT BETWEEN 12 AND 14 (type: boolean) Select Operator expressions: key (type: string), value (type: string), hr (type: int) outputColumnNames: _col0, _col1, _col2 diff --git a/ql/src/test/results/clientpositive/llap/join34.q.out b/ql/src/test/results/clientpositive/llap/join34.q.out index ef54be0b29eb..cf0ca30f36cb 100644 --- a/ql/src/test/results/clientpositive/llap/join34.q.out +++ b/ql/src/test/results/clientpositive/llap/join34.q.out @@ -43,7 +43,7 @@ FROM `default`.`src` WHERE `key` > 100) AS `t3`) AS `t4` INNER JOIN (SELECT `key`, `value` FROM `default`.`src1` -WHERE (`key` < 20 OR `key` > 100) AND `key` IS NOT NULL) AS `t6` ON `t4`.`key` = `t6`.`key` +WHERE CAST(`key` AS DOUBLE) NOT BETWEEN 20 AND 100 AND `key` IS NOT NULL) AS `t6` ON `t4`.`key` = `t6`.`key` STAGE DEPENDENCIES: Stage-1 is a root stage Stage-2 depends on stages: Stage-1 @@ -65,7 +65,7 @@ STAGE PLANS: TableScan alias: x filterExpr: (UDFToDouble(key) < 20.0D) (type: boolean) - probeDecodeDetails: cacheKey:HASH_MAP_MAPJOIN_40_container, bigKeyColName:key, smallTablePos:1, keyRatio:0.064 + probeDecodeDetails: cacheKey:HASH_MAP_MAPJOIN_40_container, bigKeyColName:key, smallTablePos:1, keyRatio:0.092 Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE GatherStats: false Filter Operator @@ -79,7 +79,7 @@ STAGE PLANS: Map Join Operator condition map: Inner Join 0 to 1 - Estimated key counts: Map 5 => 16 + Estimated key counts: Map 5 => 23 keys: 0 _col0 (type: string) 1 _col0 (type: string) @@ -87,18 +87,18 @@ STAGE PLANS: input vertices: 1 Map 5 Position of Big Table: 0 - Statistics: Num rows: 32 Data size: 8512 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 12236 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: _col2 (type: string), _col3 (type: string), _col1 (type: string) outputColumnNames: _col0, _col1, _col2 - Statistics: Num rows: 32 Data size: 8512 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 12236 Basic stats: COMPLETE Column stats: COMPLETE File Output Operator bucketingVersion: 2 compressed: false GlobalTableId: 1 #### A masked pattern was here #### NumFilesPerFileSink: 1 - Statistics: Num rows: 32 Data size: 8512 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 12236 Basic stats: COMPLETE Column stats: COMPLETE #### A masked pattern was here #### table: input format: org.apache.hadoop.mapred.TextInputFormat @@ -121,10 +121,10 @@ STAGE PLANS: Select Operator expressions: _col0 (type: string), _col1 (type: string), _col2 (type: string) outputColumnNames: key, value, val2 - Statistics: Num rows: 32 Data size: 8512 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 12236 Basic stats: COMPLETE Column stats: COMPLETE Group By Operator aggregations: max(length(key)), avg(COALESCE(length(key),0)), count(1), count(key), compute_bit_vector_hll(key), max(length(value)), avg(COALESCE(length(value),0)), count(value), compute_bit_vector_hll(value), max(length(val2)), avg(COALESCE(length(val2),0)), count(val2), compute_bit_vector_hll(val2) - minReductionHashAggr: 0.96875 + minReductionHashAggr: 0.9782609 mode: hash outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12 Statistics: Num rows: 1 Data size: 704 Basic stats: COMPLETE Column stats: COMPLETE @@ -194,7 +194,7 @@ STAGE PLANS: Map Join Operator condition map: Inner Join 0 to 1 - Estimated key counts: Map 5 => 16 + Estimated key counts: Map 5 => 23 keys: 0 _col0 (type: string) 1 _col0 (type: string) @@ -202,18 +202,18 @@ STAGE PLANS: input vertices: 1 Map 5 Position of Big Table: 0 - Statistics: Num rows: 32 Data size: 8512 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 12236 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: _col2 (type: string), _col3 (type: string), _col1 (type: string) outputColumnNames: _col0, _col1, _col2 - Statistics: Num rows: 32 Data size: 8512 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 12236 Basic stats: COMPLETE Column stats: COMPLETE File Output Operator bucketingVersion: 2 compressed: false GlobalTableId: 1 #### A masked pattern was here #### NumFilesPerFileSink: 1 - Statistics: Num rows: 32 Data size: 8512 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 12236 Basic stats: COMPLETE Column stats: COMPLETE #### A masked pattern was here #### table: input format: org.apache.hadoop.mapred.TextInputFormat @@ -236,10 +236,10 @@ STAGE PLANS: Select Operator expressions: _col0 (type: string), _col1 (type: string), _col2 (type: string) outputColumnNames: key, value, val2 - Statistics: Num rows: 32 Data size: 8512 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 12236 Basic stats: COMPLETE Column stats: COMPLETE Group By Operator aggregations: max(length(key)), avg(COALESCE(length(key),0)), count(1), count(key), compute_bit_vector_hll(key), max(length(value)), avg(COALESCE(length(value),0)), count(value), compute_bit_vector_hll(value), max(length(val2)), avg(COALESCE(length(val2),0)), count(val2), compute_bit_vector_hll(val2) - minReductionHashAggr: 0.96875 + minReductionHashAggr: 0.9782609 mode: hash outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12 Statistics: Num rows: 1 Data size: 704 Basic stats: COMPLETE Column stats: COMPLETE @@ -295,17 +295,17 @@ STAGE PLANS: Map Operator Tree: TableScan alias: x - filterExpr: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) + filterExpr: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) Statistics: Num rows: 25 Data size: 4375 Basic stats: COMPLETE Column stats: COMPLETE GatherStats: false Filter Operator isSamplingPred: false - predicate: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + predicate: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: key (type: string), value (type: string) outputColumnNames: _col0, _col1 - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Reduce Output Operator bucketingVersion: 2 key expressions: _col0 (type: string) @@ -313,7 +313,7 @@ STAGE PLANS: numBuckets: -1 sort order: + Map-reduce partition columns: _col0 (type: string) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE tag: 1 value expressions: _col1 (type: string) auto parallelism: true @@ -324,7 +324,7 @@ STAGE PLANS: numBuckets: -1 sort order: + Map-reduce partition columns: _col0 (type: string) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE tag: 1 value expressions: _col1 (type: string) auto parallelism: true diff --git a/ql/src/test/results/clientpositive/llap/join35.q.out b/ql/src/test/results/clientpositive/llap/join35.q.out index 39c088690d6e..958494046bb1 100644 --- a/ql/src/test/results/clientpositive/llap/join35.q.out +++ b/ql/src/test/results/clientpositive/llap/join35.q.out @@ -45,7 +45,7 @@ WHERE `key` > 100 GROUP BY `key`) AS `t5`) AS `t6` INNER JOIN (SELECT `key`, `value` FROM `default`.`src1` -WHERE (`key` < 20 OR `key` > 100) AND `key` IS NOT NULL) AS `t8` ON `t6`.`key` = `t8`.`key` +WHERE CAST(`key` AS DOUBLE) NOT BETWEEN 20 AND 100 AND `key` IS NOT NULL) AS `t8` ON `t6`.`key` = `t8`.`key` STAGE DEPENDENCIES: Stage-1 is a root stage Stage-2 depends on stages: Stage-1 @@ -156,17 +156,17 @@ STAGE PLANS: Map Operator Tree: TableScan alias: x - filterExpr: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) + filterExpr: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) Statistics: Num rows: 25 Data size: 4375 Basic stats: COMPLETE Column stats: COMPLETE GatherStats: false Filter Operator isSamplingPred: false - predicate: (((UDFToDouble(key) < 20.0D) or (UDFToDouble(key) > 100.0D)) and key is not null) (type: boolean) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + predicate: (UDFToDouble(key) NOT BETWEEN 20.0D AND 100.0D and key is not null) (type: boolean) + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: key (type: string), value (type: string) outputColumnNames: _col0, _col1 - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE Reduce Output Operator bucketingVersion: 2 key expressions: _col0 (type: string) @@ -174,7 +174,7 @@ STAGE PLANS: numBuckets: -1 sort order: + Map-reduce partition columns: _col0 (type: string) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE tag: 1 value expressions: _col1 (type: string) auto parallelism: true @@ -185,7 +185,7 @@ STAGE PLANS: numBuckets: -1 sort order: + Map-reduce partition columns: _col0 (type: string) - Statistics: Num rows: 16 Data size: 2800 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 23 Data size: 4025 Basic stats: COMPLETE Column stats: COMPLETE tag: 1 value expressions: _col1 (type: string) auto parallelism: true @@ -241,7 +241,7 @@ STAGE PLANS: Map Join Operator condition map: Inner Join 0 to 1 - Estimated key counts: Map 6 => 16 + Estimated key counts: Map 6 => 23 keys: 0 _col0 (type: string) 1 _col0 (type: string) @@ -249,18 +249,18 @@ STAGE PLANS: input vertices: 1 Map 6 Position of Big Table: 0 - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: _col2 (type: string), _col3 (type: string), UDFToInteger(_col1) (type: int) outputColumnNames: _col0, _col1, _col2 - Statistics: Num rows: 32 Data size: 5728 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8234 Basic stats: COMPLETE Column stats: COMPLETE File Output Operator bucketingVersion: 2 compressed: false GlobalTableId: 1 #### A masked pattern was here #### NumFilesPerFileSink: 1 - Statistics: Num rows: 32 Data size: 5728 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8234 Basic stats: COMPLETE Column stats: COMPLETE #### A masked pattern was here #### table: input format: org.apache.hadoop.mapred.TextInputFormat @@ -283,10 +283,10 @@ STAGE PLANS: Select Operator expressions: _col0 (type: string), _col1 (type: string), _col2 (type: int) outputColumnNames: key, value, val2 - Statistics: Num rows: 32 Data size: 5728 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8234 Basic stats: COMPLETE Column stats: COMPLETE Group By Operator aggregations: max(length(key)), avg(COALESCE(length(key),0)), count(1), count(key), compute_bit_vector_hll(key), max(length(value)), avg(COALESCE(length(value),0)), count(value), compute_bit_vector_hll(value), min(val2), max(val2), count(val2), compute_bit_vector_hll(val2) - minReductionHashAggr: 0.96875 + minReductionHashAggr: 0.9782609 mode: hash outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12 Statistics: Num rows: 1 Data size: 632 Basic stats: COMPLETE Column stats: COMPLETE @@ -349,7 +349,7 @@ STAGE PLANS: Map Join Operator condition map: Inner Join 0 to 1 - Estimated key counts: Map 6 => 16 + Estimated key counts: Map 6 => 23 keys: 0 _col0 (type: string) 1 _col0 (type: string) @@ -357,18 +357,18 @@ STAGE PLANS: input vertices: 1 Map 6 Position of Big Table: 0 - Statistics: Num rows: 32 Data size: 5856 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8418 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: _col2 (type: string), _col3 (type: string), UDFToInteger(_col1) (type: int) outputColumnNames: _col0, _col1, _col2 - Statistics: Num rows: 32 Data size: 5728 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8234 Basic stats: COMPLETE Column stats: COMPLETE File Output Operator bucketingVersion: 2 compressed: false GlobalTableId: 1 #### A masked pattern was here #### NumFilesPerFileSink: 1 - Statistics: Num rows: 32 Data size: 5728 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8234 Basic stats: COMPLETE Column stats: COMPLETE #### A masked pattern was here #### table: input format: org.apache.hadoop.mapred.TextInputFormat @@ -391,10 +391,10 @@ STAGE PLANS: Select Operator expressions: _col0 (type: string), _col1 (type: string), _col2 (type: int) outputColumnNames: key, value, val2 - Statistics: Num rows: 32 Data size: 5728 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 46 Data size: 8234 Basic stats: COMPLETE Column stats: COMPLETE Group By Operator aggregations: max(length(key)), avg(COALESCE(length(key),0)), count(1), count(key), compute_bit_vector_hll(key), max(length(value)), avg(COALESCE(length(value),0)), count(value), compute_bit_vector_hll(value), min(val2), max(val2), count(val2), compute_bit_vector_hll(val2) - minReductionHashAggr: 0.96875 + minReductionHashAggr: 0.9782609 mode: hash outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12 Statistics: Num rows: 1 Data size: 632 Basic stats: COMPLETE Column stats: COMPLETE diff --git a/ql/src/test/results/clientpositive/llap/stats_histogram.q.out b/ql/src/test/results/clientpositive/llap/stats_histogram.q.out index 439ebba09c5a..e2094c635b21 100644 --- a/ql/src/test/results/clientpositive/llap/stats_histogram.q.out +++ b/ql/src/test/results/clientpositive/llap/stats_histogram.q.out @@ -710,10 +710,10 @@ STAGE PLANS: Map Operator Tree: TableScan alias: test_stats - filterExpr: (((d < 3.0) or (d > 7.0)) and (e > 0)) (type: boolean) + filterExpr: (d NOT BETWEEN 3.0 AND 7.0 and (e > 0)) (type: boolean) Statistics: Num rows: 15 Data size: 1732 Basic stats: COMPLETE Column stats: COMPLETE Filter Operator - predicate: (((d < 3.0) or (d > 7.0)) and (e > 0)) (type: boolean) + predicate: (d NOT BETWEEN 3.0 AND 7.0 and (e > 0)) (type: boolean) Statistics: Num rows: 8 Data size: 924 Basic stats: COMPLETE Column stats: COMPLETE Select Operator Statistics: Num rows: 8 Data size: 924 Basic stats: COMPLETE Column stats: COMPLETE diff --git a/ql/src/test/results/clientpositive/llap/stats_histogram_null.q.out b/ql/src/test/results/clientpositive/llap/stats_histogram_null.q.out index 07e48b5888ae..ec93c95c7686 100644 --- a/ql/src/test/results/clientpositive/llap/stats_histogram_null.q.out +++ b/ql/src/test/results/clientpositive/llap/stats_histogram_null.q.out @@ -640,10 +640,10 @@ STAGE PLANS: Map Operator Tree: TableScan alias: t1 - filterExpr: (((b < 2) or (b > 6)) and a is not null) (type: boolean) + filterExpr: (b NOT BETWEEN 2 AND 6 and a is not null) (type: boolean) Statistics: Num rows: 20 Data size: 1756 Basic stats: COMPLETE Column stats: COMPLETE Filter Operator - predicate: (((b < 2) or (b > 6)) and a is not null) (type: boolean) + predicate: (b NOT BETWEEN 2 AND 6 and a is not null) (type: boolean) Statistics: Num rows: 1 Data size: 89 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: a (type: string) diff --git a/ql/src/test/results/clientpositive/llap/vector_between_columns.q.out b/ql/src/test/results/clientpositive/llap/vector_between_columns.q.out index f3c8eb8c0145..48de7adb7acf 100644 --- a/ql/src/test/results/clientpositive/llap/vector_between_columns.q.out +++ b/ql/src/test/results/clientpositive/llap/vector_between_columns.q.out @@ -526,7 +526,7 @@ STAGE PLANS: Map Operator Tree: TableScan alias: test_orc_ppd - filterExpr: ((data_release < 20191201L) or (data_release > 20200101L)) (type: boolean) + filterExpr: data_release NOT BETWEEN 20191201L AND 20200101L (type: boolean) Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE TableScan Vectorization: native: true @@ -534,8 +534,8 @@ STAGE PLANS: Filter Vectorization: className: VectorFilterOperator native: true - predicateExpression: FilterExprOrExpr(children: FilterLongColLessLongScalar(col 0:bigint, val 20191201), FilterLongColGreaterLongScalar(col 0:bigint, val 20200101)) - predicate: ((data_release < 20191201L) or (data_release > 20200101L)) (type: boolean) + predicateExpression: FilterLongColumnNotBetween(col 0:bigint, left 20191201, right 20200101) + predicate: data_release NOT BETWEEN 20191201L AND 20200101L (type: boolean) Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Group By Operator aggregations: count() diff --git a/ql/src/test/results/clientpositive/llap/vector_between_in.q.out b/ql/src/test/results/clientpositive/llap/vector_between_in.q.out index 1edc82eeeded..855320d2eb74 100644 --- a/ql/src/test/results/clientpositive/llap/vector_between_in.q.out +++ b/ql/src/test/results/clientpositive/llap/vector_between_in.q.out @@ -587,7 +587,7 @@ STAGE PLANS: Map Operator Tree: TableScan alias: decimal_date_test - filterExpr: ((cdate < DATE'1968-05-01') or (cdate > DATE'1971-09-01')) (type: boolean) + filterExpr: cdate NOT BETWEEN DATE'1968-05-01' AND DATE'1971-09-01' (type: boolean) Statistics: Num rows: 12289 Data size: 339304 Basic stats: COMPLETE Column stats: COMPLETE TableScan Vectorization: native: true @@ -595,9 +595,9 @@ STAGE PLANS: Filter Vectorization: className: VectorFilterOperator native: true - predicateExpression: FilterExprOrExpr(children: FilterDateColLessDateScalar(col 3:date, val -610), FilterDateColGreaterDateScalar(col 3:date, val 608)) - predicate: ((cdate < DATE'1968-05-01') or (cdate > DATE'1971-09-01')) (type: boolean) - Statistics: Num rows: 466 Data size: 12936 Basic stats: COMPLETE Column stats: COMPLETE + predicateExpression: FilterLongColumnNotBetween(col 3:date, left -610, right 608) + predicate: cdate NOT BETWEEN DATE'1968-05-01' AND DATE'1971-09-01' (type: boolean) + Statistics: Num rows: 462 Data size: 12824 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: cdate (type: date) outputColumnNames: _col0 @@ -605,7 +605,7 @@ STAGE PLANS: className: VectorSelectOperator native: true projectedOutputColumnNums: [3] - Statistics: Num rows: 466 Data size: 12936 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 462 Data size: 12824 Basic stats: COMPLETE Column stats: COMPLETE Reduce Output Operator key expressions: _col0 (type: date) null sort order: z @@ -614,7 +614,7 @@ STAGE PLANS: className: VectorReduceSinkObjectHashOperator native: true nativeConditionsMet: hive.vectorized.execution.reducesink.new.enabled IS true, hive.execution.engine tez IN [tez] IS true, No PTF TopN IS true, No DISTINCT columns IS true, BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true - Statistics: Num rows: 466 Data size: 12936 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 462 Data size: 12824 Basic stats: COMPLETE Column stats: COMPLETE Execution mode: vectorized, llap LLAP IO: all inputs Map Vectorization: @@ -642,13 +642,13 @@ STAGE PLANS: className: VectorSelectOperator native: true projectedOutputColumnNums: [0] - Statistics: Num rows: 466 Data size: 12936 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 462 Data size: 12824 Basic stats: COMPLETE Column stats: COMPLETE File Output Operator compressed: false File Sink Vectorization: className: VectorFileSinkOperator native: false - Statistics: Num rows: 466 Data size: 12936 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 462 Data size: 12824 Basic stats: COMPLETE Column stats: COMPLETE table: input format: org.apache.hadoop.mapred.SequenceFileInputFormat output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat @@ -789,7 +789,7 @@ STAGE PLANS: Map Operator Tree: TableScan alias: decimal_date_test - filterExpr: ((cdecimal1 < -2000) or (cdecimal1 > 4390.1351351351)) (type: boolean) + filterExpr: cdecimal1 NOT BETWEEN -2000 AND 4390.1351351351 (type: boolean) Statistics: Num rows: 12289 Data size: 1027600 Basic stats: COMPLETE Column stats: COMPLETE TableScan Vectorization: native: true @@ -797,15 +797,15 @@ STAGE PLANS: Filter Vectorization: className: VectorFilterOperator native: true - predicateExpression: FilterExprOrExpr(children: FilterDecimalColLessDecimalScalar(col 1:decimal(20,10), val -2000), FilterDecimalColGreaterDecimalScalar(col 1:decimal(20,10), val 4390.1351351351)) - predicate: ((cdecimal1 < -2000) or (cdecimal1 > 4390.1351351351)) (type: boolean) - Statistics: Num rows: 12275 Data size: 1026480 Basic stats: COMPLETE Column stats: COMPLETE + predicateExpression: FilterDecimalColumnNotBetween(col 1:decimal(20,10), left -2000, right 4390.1351351351) + predicate: cdecimal1 NOT BETWEEN -2000 AND 4390.1351351351 (type: boolean) + Statistics: Num rows: 12259 Data size: 1025136 Basic stats: COMPLETE Column stats: COMPLETE Select Operator Select Vectorization: className: VectorSelectOperator native: true projectedOutputColumnNums: [] - Statistics: Num rows: 12275 Data size: 1026480 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 12259 Data size: 1025136 Basic stats: COMPLETE Column stats: COMPLETE Group By Operator aggregations: count() Group By Vectorization: @@ -1590,13 +1590,13 @@ STAGE PLANS: TableScan Vectorization: native: true Select Operator - expressions: ((cdecimal1 < -2000) or (cdecimal1 > 4390.1351351351)) (type: boolean) + expressions: cdecimal1 NOT BETWEEN -2000 AND 4390.1351351351 (type: boolean) outputColumnNames: _col0 Select Vectorization: className: VectorSelectOperator native: true - projectedOutputColumnNums: [8] - selectExpressions: ColOrCol(col 6:boolean, col 7:boolean)(children: DecimalColLessDecimalScalar(col 1:decimal(20,10), val -2000) -> 6:boolean, DecimalColGreaterDecimalScalar(col 1:decimal(20,10), val 4390.1351351351) -> 7:boolean) -> 8:boolean + projectedOutputColumnNums: [6] + selectExpressions: DecimalColumnNotBetween(col 1:decimal(20,10), left -2000, right 4390.1351351351) -> 6:boolean Statistics: Num rows: 12289 Data size: 1027600 Basic stats: COMPLETE Column stats: COMPLETE Group By Operator aggregations: count() @@ -1604,7 +1604,7 @@ STAGE PLANS: aggregators: VectorUDAFCountStar(*) -> bigint className: VectorGroupByOperator groupByMode: HASH - keyExpressions: col 8:boolean + keyExpressions: col 6:boolean native: false vectorProcessingMode: HASH projectedOutputColumnNums: [0]