diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java index 46c2a78..6476db8 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java @@ -629,7 +629,8 @@ private ExprNodeDesc getImplicitCastExpression(GenericUDF udf, ExprNodeDesc chil } else { // Casts to exact types including long to double etc. are needed in some special cases. - if (udf instanceof GenericUDFCoalesce || udf instanceof GenericUDFElt) { + if (udf instanceof GenericUDFCoalesce || udf instanceof GenericUDFNvl + || udf instanceof GenericUDFElt) { GenericUDF genericUdf = getGenericUDFForCast(castType); List children = new ArrayList(); children.add(child); @@ -1175,13 +1176,14 @@ private VectorExpression getGenericUdfVectorExpression(GenericUDF udf, return getInExpression(childExpr, mode, returnType); } else if (udf instanceof GenericUDFOPPositive) { return getIdentityExpression(childExpr); - } else if (udf instanceof GenericUDFCoalesce) { + } else if (udf instanceof GenericUDFCoalesce || udf instanceof GenericUDFNvl) { // Coalesce is a special case because it can take variable number of arguments. + // Nvl is a specialization of the Coalesce. return getCoalesceExpression(childExpr, returnType); } else if (udf instanceof GenericUDFElt) { - // Coalesce is a special case because it can take variable number of arguments. + // Elt is a special case because it can take variable number of arguments. return getEltExpression(childExpr, returnType); } else if (udf instanceof GenericUDFBridge) { VectorExpression v = getGenericUDFBridgeVectorExpression((GenericUDFBridge) udf, childExpr, mode, diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java index da1d9eb..33b5352 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java @@ -272,6 +272,7 @@ public Vectorizer() { supportedGenericUDFs.add(GenericUDFCase.class); supportedGenericUDFs.add(GenericUDFWhen.class); supportedGenericUDFs.add(GenericUDFCoalesce.class); + supportedGenericUDFs.add(GenericUDFNvl.class); supportedGenericUDFs.add(GenericUDFElt.class); supportedGenericUDFs.add(GenericUDFInitCap.class); diff --git ql/src/test/queries/clientpositive/vector_coalesce.q ql/src/test/queries/clientpositive/vector_coalesce.q index c9b8e5a..b1a7766 100644 --- ql/src/test/queries/clientpositive/vector_coalesce.q +++ ql/src/test/queries/clientpositive/vector_coalesce.q @@ -50,3 +50,25 @@ FROM alltypesorc WHERE ctimestamp1 IS NOT NULL OR ctimestamp2 IS NOT NULL ORDER BY ctimestamp1, ctimestamp2, c LIMIT 10; + +EXPLAIN SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10; + +SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10; + +EXPLAIN SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10; + +SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10; diff --git ql/src/test/queries/clientpositive/vector_nvl.q ql/src/test/queries/clientpositive/vector_nvl.q new file mode 100644 index 0000000..742bf52 --- /dev/null +++ ql/src/test/queries/clientpositive/vector_nvl.q @@ -0,0 +1,36 @@ +SET hive.explain.user=false; +SET hive.vectorized.execution.enabled=true; + +EXPLAIN SELECT cdouble, nvl(cdouble, 100) as n +FROM alltypesorc +WHERE (cdouble IS NULL) +LIMIT 10; + +SELECT cdouble, nvl(cdouble, 100) as n +FROM alltypesorc +WHERE (cdouble IS NULL) +LIMIT 10; + +EXPLAIN SELECT cfloat, nvl(cfloat, 1) as n +FROM alltypesorc +LIMIT 10; + +SELECT cfloat, nvl(cfloat, 1) as n +FROM alltypesorc +LIMIT 10; + +EXPLAIN SELECT nvl(null, 10) as n +FROM alltypesorc +LIMIT 10; + +SELECT nvl(null, 10) as n +FROM alltypesorc +LIMIT 10; + +EXPLAIN SELECT nvl(null, null) as n +FROM alltypesorc +LIMIT 10; + +SELECT nvl(null, null) as n +FROM alltypesorc +LIMIT 10; diff --git ql/src/test/results/clientpositive/tez/vector_coalesce.q.out ql/src/test/results/clientpositive/tez/vector_coalesce.q.out index 4b81d0c..ad5261c 100644 --- ql/src/test/results/clientpositive/tez/vector_coalesce.q.out +++ ql/src/test/results/clientpositive/tez/vector_coalesce.q.out @@ -360,3 +360,144 @@ NULL 1969-12-31 15:59:43.684 1969-12-31 15:59:43.684 NULL 1969-12-31 15:59:43.703 1969-12-31 15:59:43.703 NULL 1969-12-31 15:59:43.704 1969-12-31 15:59:43.704 NULL 1969-12-31 15:59:43.709 1969-12-31 15:59:43.709 +PREHOOK: query: EXPLAIN SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Tez + Edges: + Reducer 2 <- Map 1 (SIMPLE_EDGE) +#### A masked pattern was here #### + Vertices: + Map 1 + Map Operator Tree: + TableScan + alias: alltypesorc + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (cfloat is null and cbigint is null) (type: boolean) + Statistics: Num rows: 3072 Data size: 660491 Basic stats: COMPLETE Column stats: NONE + Select Operator + Statistics: Num rows: 3072 Data size: 660491 Basic stats: COMPLETE Column stats: NONE + Reduce Output Operator + key expressions: null (type: float), null (type: bigint), null (type: float) + sort order: +++ + Statistics: Num rows: 3072 Data size: 660491 Basic stats: COMPLETE Column stats: NONE + Execution mode: vectorized + Reducer 2 + Reduce Operator Tree: + Select Operator + expressions: null (type: float), null (type: bigint), null (type: float) + outputColumnNames: _col0, _col1, _col2 + Statistics: Num rows: 3072 Data size: 660491 Basic stats: COMPLETE Column stats: NONE + Limit + Number of rows: 10 + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + Execution mode: vectorized + + Stage: Stage-0 + Fetch Operator + limit: 10 + Processor Tree: + ListSink + +PREHOOK: query: SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +POSTHOOK: query: SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +PREHOOK: query: EXPLAIN SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: 10 + Processor Tree: + TableScan + alias: alltypesorc + Filter Operator + predicate: cbigint is null (type: boolean) + Select Operator + expressions: null (type: bigint), ctinyint (type: tinyint), COALESCE(null,ctinyint) (type: bigint) + outputColumnNames: _col0, _col1, _col2 + Limit + Number of rows: 10 + ListSink + +PREHOOK: query: SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +POSTHOOK: query: SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +NULL -11 -11 +NULL -28 -28 +NULL -34 -34 +NULL -50 -50 +NULL 27 27 +NULL 29 29 +NULL 31 31 +NULL 31 31 +NULL 61 61 +NULL NULL NULL diff --git ql/src/test/results/clientpositive/vector_coalesce.q.out ql/src/test/results/clientpositive/vector_coalesce.q.out index 8cc8220..327ff58 100644 --- ql/src/test/results/clientpositive/vector_coalesce.q.out +++ ql/src/test/results/clientpositive/vector_coalesce.q.out @@ -332,3 +332,154 @@ NULL 1969-12-31 15:59:43.684 1969-12-31 15:59:43.684 NULL 1969-12-31 15:59:43.703 1969-12-31 15:59:43.703 NULL 1969-12-31 15:59:43.704 1969-12-31 15:59:43.704 NULL 1969-12-31 15:59:43.709 1969-12-31 15:59:43.709 +PREHOOK: query: EXPLAIN SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: alltypesorc + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (cfloat is null and cbigint is null) (type: boolean) + Statistics: Num rows: 3072 Data size: 660491 Basic stats: COMPLETE Column stats: NONE + Select Operator + Statistics: Num rows: 3072 Data size: 660491 Basic stats: COMPLETE Column stats: NONE + Reduce Output Operator + key expressions: null (type: float), null (type: bigint), null (type: float) + sort order: +++ + Statistics: Num rows: 3072 Data size: 660491 Basic stats: COMPLETE Column stats: NONE + Execution mode: vectorized + Reduce Operator Tree: + Select Operator + expressions: null (type: float), null (type: bigint), null (type: float) + outputColumnNames: _col0, _col1, _col2 + Statistics: Num rows: 3072 Data size: 660491 Basic stats: COMPLETE Column stats: NONE + Limit + Number of rows: 10 + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: 10 + Processor Tree: + ListSink + +PREHOOK: query: SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +POSTHOOK: query: SELECT cfloat, cbigint, coalesce(cfloat, cbigint) as c +FROM alltypesorc +WHERE (cfloat IS NULL AND cbigint IS NULL) +ORDER BY cfloat, cbigint, c +LIMIT 10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +NULL NULL NULL +PREHOOK: query: EXPLAIN SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: alltypesorc + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: cbigint is null (type: boolean) + Statistics: Num rows: 6144 Data size: 1320982 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: null (type: bigint), ctinyint (type: tinyint), COALESCE(null,ctinyint) (type: bigint) + outputColumnNames: _col0, _col1, _col2 + Statistics: Num rows: 6144 Data size: 1320982 Basic stats: COMPLETE Column stats: NONE + Limit + Number of rows: 10 + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + Execution mode: vectorized + + Stage: Stage-0 + Fetch Operator + limit: 10 + Processor Tree: + ListSink + +PREHOOK: query: SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +POSTHOOK: query: SELECT cbigint, ctinyint, coalesce(cbigint, ctinyint) as c +FROM alltypesorc +WHERE cbigint IS NULL +LIMIT 10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +NULL -11 -11 +NULL -28 -28 +NULL -34 -34 +NULL -50 -50 +NULL 27 27 +NULL 29 29 +NULL 31 31 +NULL 31 31 +NULL 61 61 +NULL NULL NULL diff --git ql/src/test/results/clientpositive/vector_nvl.q.out ql/src/test/results/clientpositive/vector_nvl.q.out new file mode 100644 index 0000000..88836c0 --- /dev/null +++ ql/src/test/results/clientpositive/vector_nvl.q.out @@ -0,0 +1,233 @@ +PREHOOK: query: EXPLAIN SELECT cdouble, nvl(cdouble, 100) as n +FROM alltypesorc +WHERE (cdouble IS NULL) +LIMIT 10 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN SELECT cdouble, nvl(cdouble, 100) as n +FROM alltypesorc +WHERE (cdouble IS NULL) +LIMIT 10 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: alltypesorc + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: cdouble is null (type: boolean) + Statistics: Num rows: 6144 Data size: 1320982 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: null (type: double), 100.0 (type: double) + outputColumnNames: _col0, _col1 + Statistics: Num rows: 6144 Data size: 1320982 Basic stats: COMPLETE Column stats: NONE + Limit + Number of rows: 10 + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + Execution mode: vectorized + + Stage: Stage-0 + Fetch Operator + limit: 10 + Processor Tree: + ListSink + +PREHOOK: query: SELECT cdouble, nvl(cdouble, 100) as n +FROM alltypesorc +WHERE (cdouble IS NULL) +LIMIT 10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +POSTHOOK: query: SELECT cdouble, nvl(cdouble, 100) as n +FROM alltypesorc +WHERE (cdouble IS NULL) +LIMIT 10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +NULL 100.0 +NULL 100.0 +NULL 100.0 +NULL 100.0 +NULL 100.0 +NULL 100.0 +NULL 100.0 +NULL 100.0 +NULL 100.0 +NULL 100.0 +PREHOOK: query: EXPLAIN SELECT cfloat, nvl(cfloat, 1) as n +FROM alltypesorc +LIMIT 10 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN SELECT cfloat, nvl(cfloat, 1) as n +FROM alltypesorc +LIMIT 10 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: alltypesorc + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: cfloat (type: float), if cfloat is null returns1 (type: float) + outputColumnNames: _col0, _col1 + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: NONE + Limit + Number of rows: 10 + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 10 Data size: 2150 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + Execution mode: vectorized + + Stage: Stage-0 + Fetch Operator + limit: 10 + Processor Tree: + ListSink + +PREHOOK: query: SELECT cfloat, nvl(cfloat, 1) as n +FROM alltypesorc +LIMIT 10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +POSTHOOK: query: SELECT cfloat, nvl(cfloat, 1) as n +FROM alltypesorc +LIMIT 10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +-50.0 -50.0 +NULL 1.0 +-28.0 -28.0 +31.0 31.0 +-34.0 -34.0 +29.0 29.0 +31.0 31.0 +27.0 27.0 +-11.0 -11.0 +61.0 61.0 +PREHOOK: query: EXPLAIN SELECT nvl(null, 10) as n +FROM alltypesorc +LIMIT 10 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN SELECT nvl(null, 10) as n +FROM alltypesorc +LIMIT 10 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: 10 + Processor Tree: + TableScan + alias: alltypesorc + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: 10 (type: int) + outputColumnNames: _col0 + Statistics: Num rows: 12288 Data size: 49152 Basic stats: COMPLETE Column stats: COMPLETE + Limit + Number of rows: 10 + Statistics: Num rows: 10 Data size: 40 Basic stats: COMPLETE Column stats: COMPLETE + ListSink + +PREHOOK: query: SELECT nvl(null, 10) as n +FROM alltypesorc +LIMIT 10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +POSTHOOK: query: SELECT nvl(null, 10) as n +FROM alltypesorc +LIMIT 10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +PREHOOK: query: EXPLAIN SELECT nvl(null, null) as n +FROM alltypesorc +LIMIT 10 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN SELECT nvl(null, null) as n +FROM alltypesorc +LIMIT 10 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: 10 + Processor Tree: + TableScan + alias: alltypesorc + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: null (type: void) + outputColumnNames: _col0 + Statistics: Num rows: 12288 Data size: 0 Basic stats: PARTIAL Column stats: COMPLETE + Limit + Number of rows: 10 + Statistics: Num rows: 10 Data size: 0 Basic stats: PARTIAL Column stats: COMPLETE + ListSink + +PREHOOK: query: SELECT nvl(null, null) as n +FROM alltypesorc +LIMIT 10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +POSTHOOK: query: SELECT nvl(null, null) as n +FROM alltypesorc +LIMIT 10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alltypesorc +#### A masked pattern was here #### +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL