This is an automated email from the ASF dual-hosted git repository.
abstractdog pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 50f40447089 HIVE-29433: ClassCastException in
FilterLongColumnBetween.evaluate when vectorization is enabled:
DecimalColumnVector cannot be cast to class LongColumnVector (#6366)
50f40447089 is described below
commit 50f40447089b2781999bd89acae650c44df0875b
Author: Tanishq Chugh <[email protected]>
AuthorDate: Wed Apr 15 14:27:59 2026 +0530
HIVE-29433: ClassCastException in FilterLongColumnBetween.evaluate when
vectorization is enabled: DecimalColumnVector cannot be cast to class
LongColumnVector (#6366)
---
.../hive/ql/exec/vector/VectorizationContext.java | 14 +
.../clientpositive/cast_decimal_vectorized.q | 26 +
.../llap/cast_decimal_vectorized.q.out | 612 +++++++++++++++++++++
3 files changed, 652 insertions(+)
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 e56cbb3cec7..894231e991e 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
@@ -1700,6 +1700,16 @@ private VectorExpression
getIdentityExpression(List<ExprNodeDesc> childExprList)
return ve;
}
+ /**
+ * Determines whether an expression and its children are compatible with the
DECIMAL_64 vectorization execution path.
+ * The method evaluates the expression against known scenarios where
DECIMAL_64 is not supported,
+ * returning false if any incompatibility is found. For UDFs, it handles
specific implementations
+ * (e.g., GenericUDFToDecimal), checks for the
@VectorizedExpressionsSupportDecimal64 annotation,
+ * and recursively verifies all child nodes. If all checks pass, it returns
true.
+ * @param exprNodeDesc expression node to be evaluated.
+ * @return true if the expression and its children are DECIMAL_64
compatible, false otherwise.
+ * @throws HiveException
+ */
private boolean checkExprNodeDescForDecimal64(ExprNodeDesc exprNodeDesc)
throws HiveException {
if (exprNodeDesc instanceof ExprNodeColumnDesc) {
int colIndex = getInputColumnIndex((ExprNodeColumnDesc) exprNodeDesc);
@@ -1717,6 +1727,10 @@ private boolean
checkExprNodeDescForDecimal64(ExprNodeDesc exprNodeDesc) throws
GenericUDF udf = ((ExprNodeGenericFuncDesc)
exprNodeDesc).getGenericUDF();
Class<?> udfClass = udf.getClass();
if (udf instanceof GenericUDFToDecimal) {
+ ExprNodeDesc child = exprNodeDesc.getChildren().get(0);
+ if (isDecimalFamily(child.getTypeString())) {
+ return checkExprNodeDescForDecimal64(child);
+ }
return true;
}
// We have a class-level annotation that says whether the UDF's
vectorization expressions
diff --git a/ql/src/test/queries/clientpositive/cast_decimal_vectorized.q
b/ql/src/test/queries/clientpositive/cast_decimal_vectorized.q
new file mode 100644
index 00000000000..f6a1cbdafee
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/cast_decimal_vectorized.q
@@ -0,0 +1,26 @@
+CREATE TABLE test_stats0 (e decimal(38,10)) stored as orc;
+insert into test_stats0 (e) values (0.0);
+
+set hive.vectorized.execution.enabled=false;
+select count(*) from test_stats0 where CAST(e as DECIMAL(15,1)) BETWEEN 100.0
AND 1000.0;
+
+set hive.vectorized.execution.enabled=true;
+EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats0 where CAST(e as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0;
+select count(*) from test_stats0 where CAST(e as DECIMAL(15,1)) BETWEEN 100.0
AND 1000.0;
+
+EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats0 where CAST(e as
DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0;
+select count(*) from test_stats0 where CAST(e as DECIMAL(30,1)) BETWEEN 100.0
AND 1000.0;
+
+
+CREATE TABLE test_stats1 (int_col INT) stored as orc;
+insert into test_stats1 (int_col) values (0);
+
+set hive.vectorized.execution.enabled=false;
+select count(*) from test_stats1 where CAST(int_col as DECIMAL(15,1)) BETWEEN
100.0 AND 1000.0;
+
+set hive.vectorized.execution.enabled=true;
+EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats1 where
CAST(int_col as DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0;
+select count(*) from test_stats1 where CAST(int_col as DECIMAL(15,1)) BETWEEN
100.0 AND 1000.0;
+
+EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats1 where
CAST(int_col as DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0;
+select count(*) from test_stats1 where CAST(int_col as DECIMAL(30,1)) BETWEEN
100.0 AND 1000.0;
\ No newline at end of file
diff --git
a/ql/src/test/results/clientpositive/llap/cast_decimal_vectorized.q.out
b/ql/src/test/results/clientpositive/llap/cast_decimal_vectorized.q.out
new file mode 100644
index 00000000000..543cbd8e559
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/cast_decimal_vectorized.q.out
@@ -0,0 +1,612 @@
+PREHOOK: query: CREATE TABLE test_stats0 (e decimal(38,10)) stored as orc
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_stats0
+POSTHOOK: query: CREATE TABLE test_stats0 (e decimal(38,10)) stored as orc
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_stats0
+PREHOOK: query: insert into test_stats0 (e) values (0.0)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@test_stats0
+POSTHOOK: query: insert into test_stats0 (e) values (0.0)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@test_stats0
+POSTHOOK: Lineage: test_stats0.e SCRIPT []
+PREHOOK: query: select count(*) from test_stats0 where CAST(e as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from test_stats0 where CAST(e as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+0
+PREHOOK: query: EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats0
where CAST(e as DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats0
where CAST(e as DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+PLAN VECTORIZATION:
+ enabled: true
+ enabledConditionsMet: [hive.vectorized.execution.enabled IS true]
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-1
+ Tez
+#### A masked pattern was here ####
+ Edges:
+ Reducer 2 <- Map 1 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+ Vertices:
+ Map 1
+ Map Operator Tree:
+ TableScan
+ alias: test_stats0
+ filterExpr: CAST( e AS decimal(15,1)) BETWEEN 100 AND 1000
(type: boolean)
+ Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE
Column stats: COMPLETE
+ TableScan Vectorization:
+ native: true
+ vectorizationSchemaColumns: [0:e:decimal(38,10),
1:ROW__ID:struct<writeid:bigint,bucketid:int,rowid:bigint>,
2:ROW__IS__DELETED:boolean]
+ Filter Operator
+ Filter Vectorization:
+ className: VectorFilterOperator
+ native: true
+ predicateExpression: FilterDecimalColumnBetween(col
3:decimal(15,1), left 100, right 1000)(children: CastDecimalToDecimal(col
0:decimal(38,10)) -> 3:decimal(15,1))
+ predicate: CAST( e AS decimal(15,1)) BETWEEN 100 AND 1000
(type: boolean)
+ Statistics: Num rows: 1 Data size: 112 Basic stats:
COMPLETE Column stats: COMPLETE
+ Select Operator
+ Select Vectorization:
+ className: VectorSelectOperator
+ native: true
+ projectedOutputColumnNums: []
+ Statistics: Num rows: 1 Data size: 112 Basic stats:
COMPLETE Column stats: COMPLETE
+ Group By Operator
+ aggregations: count()
+ Group By Vectorization:
+ aggregators: VectorUDAFCountStar(*) -> bigint
+ className: VectorGroupByOperator
+ groupByMode: HASH
+ native: false
+ vectorProcessingMode: HASH
+ projectedOutputColumnNums: [0]
+ minReductionHashAggr: 0.4
+ mode: hash
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 8 Basic stats:
COMPLETE Column stats: COMPLETE
+ Reduce Output Operator
+ null sort order:
+ sort order:
+ Reduce Sink Vectorization:
+ className: VectorReduceSinkEmptyKeyOperator
+ 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
+ valueColumns: 0:bigint
+ Statistics: Num rows: 1 Data size: 8 Basic stats:
COMPLETE Column stats: COMPLETE
+ value expressions: _col0 (type: bigint)
+ Execution mode: vectorized, llap
+ LLAP IO: all inputs
+ Map Vectorization:
+ enabled: true
+ enabledConditionsMet:
hive.vectorized.use.vectorized.input.format IS true
+ inputFormatFeatureSupport: [DECIMAL_64]
+ featureSupportInUse: [DECIMAL_64]
+ inputFileFormats:
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 1
+ includeColumns: [0]
+ dataColumns: e:decimal(38,10)
+ partitionColumnCount: 0
+ scratchColumnTypeNames: [decimal(15,1)]
+ Reducer 2
+ Execution mode: vectorized, llap
+ Reduce Vectorization:
+ enabled: true
+ enableConditionsMet: hive.vectorized.execution.reduce.enabled
IS true, hive.execution.engine tez IN [tez] IS true
+ reduceColumnNullOrder:
+ reduceColumnSortOrder:
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 1
+ dataColumns: VALUE._col0:bigint
+ partitionColumnCount: 0
+ scratchColumnTypeNames: []
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations: count(VALUE._col0)
+ Group By Vectorization:
+ aggregators: VectorUDAFCountMerge(col 0:bigint) -> bigint
+ className: VectorGroupByOperator
+ groupByMode: MERGEPARTIAL
+ native: false
+ vectorProcessingMode: GLOBAL
+ projectedOutputColumnNums: [0]
+ mode: mergepartial
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE
Column stats: COMPLETE
+ File Output Operator
+ compressed: false
+ File Sink Vectorization:
+ className: VectorFileSinkOperator
+ native: false
+ Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE
Column stats: COMPLETE
+ table:
+ input format:
org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ ListSink
+
+PREHOOK: query: select count(*) from test_stats0 where CAST(e as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from test_stats0 where CAST(e as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+0
+PREHOOK: query: EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats0
where CAST(e as DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats0
where CAST(e as DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+PLAN VECTORIZATION:
+ enabled: true
+ enabledConditionsMet: [hive.vectorized.execution.enabled IS true]
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-1
+ Tez
+#### A masked pattern was here ####
+ Edges:
+ Reducer 2 <- Map 1 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+ Vertices:
+ Map 1
+ Map Operator Tree:
+ TableScan
+ alias: test_stats0
+ filterExpr: CAST( e AS decimal(30,1)) BETWEEN 100 AND 1000
(type: boolean)
+ Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE
Column stats: COMPLETE
+ TableScan Vectorization:
+ native: true
+ vectorizationSchemaColumns: [0:e:decimal(38,10),
1:ROW__ID:struct<writeid:bigint,bucketid:int,rowid:bigint>,
2:ROW__IS__DELETED:boolean]
+ Filter Operator
+ Filter Vectorization:
+ className: VectorFilterOperator
+ native: true
+ predicateExpression: FilterDecimalColumnBetween(col
3:decimal(30,1), left 100, right 1000)(children: CastDecimalToDecimal(col
0:decimal(38,10)) -> 3:decimal(30,1))
+ predicate: CAST( e AS decimal(30,1)) BETWEEN 100 AND 1000
(type: boolean)
+ Statistics: Num rows: 1 Data size: 112 Basic stats:
COMPLETE Column stats: COMPLETE
+ Select Operator
+ Select Vectorization:
+ className: VectorSelectOperator
+ native: true
+ projectedOutputColumnNums: []
+ Statistics: Num rows: 1 Data size: 112 Basic stats:
COMPLETE Column stats: COMPLETE
+ Group By Operator
+ aggregations: count()
+ Group By Vectorization:
+ aggregators: VectorUDAFCountStar(*) -> bigint
+ className: VectorGroupByOperator
+ groupByMode: HASH
+ native: false
+ vectorProcessingMode: HASH
+ projectedOutputColumnNums: [0]
+ minReductionHashAggr: 0.4
+ mode: hash
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 8 Basic stats:
COMPLETE Column stats: COMPLETE
+ Reduce Output Operator
+ null sort order:
+ sort order:
+ Reduce Sink Vectorization:
+ className: VectorReduceSinkEmptyKeyOperator
+ 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
+ valueColumns: 0:bigint
+ Statistics: Num rows: 1 Data size: 8 Basic stats:
COMPLETE Column stats: COMPLETE
+ value expressions: _col0 (type: bigint)
+ Execution mode: vectorized, llap
+ LLAP IO: all inputs
+ Map Vectorization:
+ enabled: true
+ enabledConditionsMet:
hive.vectorized.use.vectorized.input.format IS true
+ inputFormatFeatureSupport: [DECIMAL_64]
+ featureSupportInUse: [DECIMAL_64]
+ inputFileFormats:
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 1
+ includeColumns: [0]
+ dataColumns: e:decimal(38,10)
+ partitionColumnCount: 0
+ scratchColumnTypeNames: [decimal(30,1)]
+ Reducer 2
+ Execution mode: vectorized, llap
+ Reduce Vectorization:
+ enabled: true
+ enableConditionsMet: hive.vectorized.execution.reduce.enabled
IS true, hive.execution.engine tez IN [tez] IS true
+ reduceColumnNullOrder:
+ reduceColumnSortOrder:
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 1
+ dataColumns: VALUE._col0:bigint
+ partitionColumnCount: 0
+ scratchColumnTypeNames: []
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations: count(VALUE._col0)
+ Group By Vectorization:
+ aggregators: VectorUDAFCountMerge(col 0:bigint) -> bigint
+ className: VectorGroupByOperator
+ groupByMode: MERGEPARTIAL
+ native: false
+ vectorProcessingMode: GLOBAL
+ projectedOutputColumnNums: [0]
+ mode: mergepartial
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE
Column stats: COMPLETE
+ File Output Operator
+ compressed: false
+ File Sink Vectorization:
+ className: VectorFileSinkOperator
+ native: false
+ Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE
Column stats: COMPLETE
+ table:
+ input format:
org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ ListSink
+
+PREHOOK: query: select count(*) from test_stats0 where CAST(e as
DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from test_stats0 where CAST(e as
DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats0
+#### A masked pattern was here ####
+0
+PREHOOK: query: CREATE TABLE test_stats1 (int_col INT) stored as orc
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_stats1
+POSTHOOK: query: CREATE TABLE test_stats1 (int_col INT) stored as orc
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_stats1
+PREHOOK: query: insert into test_stats1 (int_col) values (0)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@test_stats1
+POSTHOOK: query: insert into test_stats1 (int_col) values (0)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@test_stats1
+POSTHOOK: Lineage: test_stats1.int_col SCRIPT []
+PREHOOK: query: select count(*) from test_stats1 where CAST(int_col as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from test_stats1 where CAST(int_col as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+0
+PREHOOK: query: EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats1
where CAST(int_col as DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats1
where CAST(int_col as DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+PLAN VECTORIZATION:
+ enabled: true
+ enabledConditionsMet: [hive.vectorized.execution.enabled IS true]
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-1
+ Tez
+#### A masked pattern was here ####
+ Edges:
+ Reducer 2 <- Map 1 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+ Vertices:
+ Map 1
+ Map Operator Tree:
+ TableScan
+ alias: test_stats1
+ filterExpr: CAST( int_col AS decimal(15,1)) BETWEEN 100 AND
1000 (type: boolean)
+ Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE
Column stats: COMPLETE
+ TableScan Vectorization:
+ native: true
+ vectorizationSchemaColumns: [0:int_col:int,
1:ROW__ID:struct<writeid:bigint,bucketid:int,rowid:bigint>,
2:ROW__IS__DELETED:boolean]
+ Filter Operator
+ Filter Vectorization:
+ className: VectorFilterOperator
+ native: true
+ predicateExpression: FilterDecimal64ColumnBetween(col
3:decimal(15,1)/DECIMAL_64, decimal64LeftVal 1000, decimalLeftVal 1000,
decimal64RightVal 10000, decimalRightVal 10000)(children:
CastLongToDecimal64(col 0:int) -> 3:decimal(15,1)/DECIMAL_64)
+ predicate: CAST( int_col AS decimal(15,1)) BETWEEN 100 AND
1000 (type: boolean)
+ Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE
Column stats: COMPLETE
+ Select Operator
+ Select Vectorization:
+ className: VectorSelectOperator
+ native: true
+ projectedOutputColumnNums: []
+ Statistics: Num rows: 1 Data size: 4 Basic stats:
COMPLETE Column stats: COMPLETE
+ Group By Operator
+ aggregations: count()
+ Group By Vectorization:
+ aggregators: VectorUDAFCountStar(*) -> bigint
+ className: VectorGroupByOperator
+ groupByMode: HASH
+ native: false
+ vectorProcessingMode: HASH
+ projectedOutputColumnNums: [0]
+ minReductionHashAggr: 0.4
+ mode: hash
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 8 Basic stats:
COMPLETE Column stats: COMPLETE
+ Reduce Output Operator
+ null sort order:
+ sort order:
+ Reduce Sink Vectorization:
+ className: VectorReduceSinkEmptyKeyOperator
+ 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
+ valueColumns: 0:bigint
+ Statistics: Num rows: 1 Data size: 8 Basic stats:
COMPLETE Column stats: COMPLETE
+ value expressions: _col0 (type: bigint)
+ Execution mode: vectorized, llap
+ LLAP IO: all inputs
+ Map Vectorization:
+ enabled: true
+ enabledConditionsMet:
hive.vectorized.use.vectorized.input.format IS true
+ inputFormatFeatureSupport: [DECIMAL_64]
+ featureSupportInUse: [DECIMAL_64]
+ inputFileFormats:
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 1
+ includeColumns: [0]
+ dataColumns: int_col:int
+ partitionColumnCount: 0
+ scratchColumnTypeNames: [decimal(15,1)/DECIMAL_64]
+ Reducer 2
+ Execution mode: vectorized, llap
+ Reduce Vectorization:
+ enabled: true
+ enableConditionsMet: hive.vectorized.execution.reduce.enabled
IS true, hive.execution.engine tez IN [tez] IS true
+ reduceColumnNullOrder:
+ reduceColumnSortOrder:
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 1
+ dataColumns: VALUE._col0:bigint
+ partitionColumnCount: 0
+ scratchColumnTypeNames: []
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations: count(VALUE._col0)
+ Group By Vectorization:
+ aggregators: VectorUDAFCountMerge(col 0:bigint) -> bigint
+ className: VectorGroupByOperator
+ groupByMode: MERGEPARTIAL
+ native: false
+ vectorProcessingMode: GLOBAL
+ projectedOutputColumnNums: [0]
+ mode: mergepartial
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE
Column stats: COMPLETE
+ File Output Operator
+ compressed: false
+ File Sink Vectorization:
+ className: VectorFileSinkOperator
+ native: false
+ Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE
Column stats: COMPLETE
+ table:
+ input format:
org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ ListSink
+
+PREHOOK: query: select count(*) from test_stats1 where CAST(int_col as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from test_stats1 where CAST(int_col as
DECIMAL(15,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+0
+PREHOOK: query: EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats1
where CAST(int_col as DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN VECTORIZATION DETAIL select count(*) from test_stats1
where CAST(int_col as DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+PLAN VECTORIZATION:
+ enabled: true
+ enabledConditionsMet: [hive.vectorized.execution.enabled IS true]
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-1
+ Tez
+#### A masked pattern was here ####
+ Edges:
+ Reducer 2 <- Map 1 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+ Vertices:
+ Map 1
+ Map Operator Tree:
+ TableScan
+ alias: test_stats1
+ filterExpr: CAST( int_col AS decimal(30,1)) BETWEEN 100 AND
1000 (type: boolean)
+ Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE
Column stats: COMPLETE
+ TableScan Vectorization:
+ native: true
+ vectorizationSchemaColumns: [0:int_col:int,
1:ROW__ID:struct<writeid:bigint,bucketid:int,rowid:bigint>,
2:ROW__IS__DELETED:boolean]
+ Filter Operator
+ Filter Vectorization:
+ className: VectorFilterOperator
+ native: true
+ predicateExpression: FilterDecimalColumnBetween(col
3:decimal(30,1), left 100, right 1000)(children: CastLongToDecimal(col 0:int)
-> 3:decimal(30,1))
+ predicate: CAST( int_col AS decimal(30,1)) BETWEEN 100 AND
1000 (type: boolean)
+ Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE
Column stats: COMPLETE
+ Select Operator
+ Select Vectorization:
+ className: VectorSelectOperator
+ native: true
+ projectedOutputColumnNums: []
+ Statistics: Num rows: 1 Data size: 4 Basic stats:
COMPLETE Column stats: COMPLETE
+ Group By Operator
+ aggregations: count()
+ Group By Vectorization:
+ aggregators: VectorUDAFCountStar(*) -> bigint
+ className: VectorGroupByOperator
+ groupByMode: HASH
+ native: false
+ vectorProcessingMode: HASH
+ projectedOutputColumnNums: [0]
+ minReductionHashAggr: 0.4
+ mode: hash
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 8 Basic stats:
COMPLETE Column stats: COMPLETE
+ Reduce Output Operator
+ null sort order:
+ sort order:
+ Reduce Sink Vectorization:
+ className: VectorReduceSinkEmptyKeyOperator
+ 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
+ valueColumns: 0:bigint
+ Statistics: Num rows: 1 Data size: 8 Basic stats:
COMPLETE Column stats: COMPLETE
+ value expressions: _col0 (type: bigint)
+ Execution mode: vectorized, llap
+ LLAP IO: all inputs
+ Map Vectorization:
+ enabled: true
+ enabledConditionsMet:
hive.vectorized.use.vectorized.input.format IS true
+ inputFormatFeatureSupport: [DECIMAL_64]
+ featureSupportInUse: [DECIMAL_64]
+ inputFileFormats:
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 1
+ includeColumns: [0]
+ dataColumns: int_col:int
+ partitionColumnCount: 0
+ scratchColumnTypeNames: [decimal(30,1)]
+ Reducer 2
+ Execution mode: vectorized, llap
+ Reduce Vectorization:
+ enabled: true
+ enableConditionsMet: hive.vectorized.execution.reduce.enabled
IS true, hive.execution.engine tez IN [tez] IS true
+ reduceColumnNullOrder:
+ reduceColumnSortOrder:
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 1
+ dataColumns: VALUE._col0:bigint
+ partitionColumnCount: 0
+ scratchColumnTypeNames: []
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations: count(VALUE._col0)
+ Group By Vectorization:
+ aggregators: VectorUDAFCountMerge(col 0:bigint) -> bigint
+ className: VectorGroupByOperator
+ groupByMode: MERGEPARTIAL
+ native: false
+ vectorProcessingMode: GLOBAL
+ projectedOutputColumnNums: [0]
+ mode: mergepartial
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE
Column stats: COMPLETE
+ File Output Operator
+ compressed: false
+ File Sink Vectorization:
+ className: VectorFileSinkOperator
+ native: false
+ Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE
Column stats: COMPLETE
+ table:
+ input format:
org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ ListSink
+
+PREHOOK: query: select count(*) from test_stats1 where CAST(int_col as
DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from test_stats1 where CAST(int_col as
DECIMAL(30,1)) BETWEEN 100.0 AND 1000.0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_stats1
+#### A masked pattern was here ####
+0