diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index 375e22c2c1..461956b845 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -876,6 +876,7 @@ minillaplocal.query.files=\ vector_decimal_2.q,\ vector_decimal_udf.q,\ vector_decimal64_case_when_nvl.q,\ + vector_decimal64_case_when_nvl_cbo_1.q,\ vector_full_outer_join.q,\ vector_fullouter_mapjoin_1_fast.q,\ vector_fullouter_mapjoin_1_optimized.q,\ 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 043fdd63e7..048df016f0 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 @@ -1149,6 +1149,44 @@ private TypeInfo getCommonTypeForChildExpressions(GenericUDF genericUdf, return commonType; } + /** + * Given a udf and its children, return the common type to which the children's type should be + * cast. + */ + private DataTypePhysicalVariation getCommonPhysicalVariationForChildExpressions(GenericUDF genericUdf, + List children, TypeInfo returnType) throws HiveException { + if (children.size() == 0) { + return DataTypePhysicalVariation.NONE; + } + DataTypePhysicalVariation returnDataTypePhysicalVariation = DataTypePhysicalVariation.DECIMAL_64; + DataTypePhysicalVariation[] childrenDataTypePhysicalVariations = new DataTypePhysicalVariation[children.size()]; + for(int i = 0; i < children.size(); ++i) { + if (children.get(i) instanceof ExprNodeColumnDesc) { + int colIndex = getInputColumnIndex((ExprNodeColumnDesc) children.get(i)); + childrenDataTypePhysicalVariations[i] = getDataTypePhysicalVariation(colIndex); + } + else if (children.get(i) instanceof ExprNodeConstantDesc) { + if (isIntFamily(children.get(i).getTypeString()) || isDecimalFamily(children.get(i).getTypeString())) { + childrenDataTypePhysicalVariations[i] = DataTypePhysicalVariation.DECIMAL_64; + } + else { + childrenDataTypePhysicalVariations[i] = DataTypePhysicalVariation.NONE; + } + } + else { + childrenDataTypePhysicalVariations[i] = DataTypePhysicalVariation.NONE; + } + } + for (int i = 0; i < children.size(); ++i) { + if (childrenDataTypePhysicalVariations[i] == DataTypePhysicalVariation.NONE || + childrenDataTypePhysicalVariations[i] == null) { + returnDataTypePhysicalVariation = DataTypePhysicalVariation.NONE; + break; + } + } + return returnDataTypePhysicalVariation; + } + /** * Add a cast expression to the expression tree if needed. The output of child expressions of a given UDF might * need a cast if their return type is different from the return type of the UDF. @@ -1175,6 +1213,8 @@ private TypeInfo getCommonTypeForChildExpressions(GenericUDF genericUdf, } TypeInfo commonType = getCommonTypeForChildExpressions(genericUDF, children, returnType); + DataTypePhysicalVariation commonPhysicalVariation = getCommonPhysicalVariationForChildExpressions( + genericUDF, children, returnType); if (commonType == null) { @@ -1191,7 +1231,7 @@ private TypeInfo getCommonTypeForChildExpressions(GenericUDF genericUdf, if (i++ == 0) { castType = isIntFamily(child.getTypeString()) ? child.getTypeInfo() : TypeInfoFactory.intTypeInfo; } - ExprNodeDesc castExpression = getImplicitCastExpression(genericUDF, child, castType); + ExprNodeDesc castExpression = getImplicitCastExpression(genericUDF, child, castType, commonPhysicalVariation); if (castExpression != null) { atleastOneCastNeeded = true; childrenWithCasts.add(castExpression); @@ -1217,7 +1257,7 @@ private TypeInfo getCommonTypeForChildExpressions(GenericUDF genericUdf, atleastOneCastNeeded = true; continue; } - ExprNodeDesc castExpression = getImplicitCastExpression(genericUDF, child, commonType); + ExprNodeDesc castExpression = getImplicitCastExpression(genericUDF, child, commonType, commonPhysicalVariation); if (castExpression != null) { atleastOneCastNeeded = true; childrenWithCasts.add(castExpression); @@ -1230,10 +1270,10 @@ private TypeInfo getCommonTypeForChildExpressions(GenericUDF genericUdf, for (int i=0; i children = new ArrayList<>(); children.add(child); @@ -2480,7 +2523,8 @@ private VectorExpression getCoalesceExpression(List childExpr, inputColumns[i] = ve.getOutputColumnNum(); inputTypeInfos[i] = ve.getOutputTypeInfo(); inputDataTypePhysicalVariations[i] = ve.getOutputDataTypePhysicalVariation(); - if (inputDataTypePhysicalVariations[i] == DataTypePhysicalVariation.NONE) { + if (inputDataTypePhysicalVariations[i] == DataTypePhysicalVariation.NONE || + inputDataTypePhysicalVariations[i] == null) { if (childExpr.get(i) instanceof ExprNodeConstantDesc && inputTypeInfos[i] instanceof DecimalTypeInfo && ((DecimalTypeInfo)inputTypeInfos[i]).precision() <= 18) { fixConstants = true; @@ -2492,7 +2536,8 @@ private VectorExpression getCoalesceExpression(List childExpr, if (outputDataTypePhysicalVariation == DataTypePhysicalVariation.DECIMAL_64 && fixConstants) { for (int i = 0; i < vectorChildren.length; ++i) { - if (inputDataTypePhysicalVariations[i] == DataTypePhysicalVariation.NONE && + if ((inputDataTypePhysicalVariations[i] == DataTypePhysicalVariation.NONE || + inputDataTypePhysicalVariations[i] == null) && vectorChildren[i] instanceof ConstantVectorExpression) { ConstantVectorExpression cve = ((ConstantVectorExpression)vectorChildren[i]); HiveDecimal hd = cve.getDecimalValue(); diff --git a/ql/src/test/queries/clientpositive/vector_decimal64_case_when_nvl_cbo_1.q b/ql/src/test/queries/clientpositive/vector_decimal64_case_when_nvl_cbo_1.q new file mode 100644 index 0000000000..700ecee305 --- /dev/null +++ b/ql/src/test/queries/clientpositive/vector_decimal64_case_when_nvl_cbo_1.q @@ -0,0 +1,10 @@ +set hive.cbo.enable=true; +set hive.explain.user=false; +create external table vector_decimal64_case_when(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(19,1), ss_ext_discount_amt int, ss_ext_sales_price double) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; +LOAD DATA LOCAL INPATH '../../data/files/decimal64table1.csv' OVERWRITE INTO TABLE vector_decimal64_case_when; +create table vector_decimal64_case_when_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(19,1), ss_ext_discount_amt int, ss_ext_sales_price decimal(7,2)) stored as ORC; +insert into table vector_decimal64_case_when_tmp select * from vector_decimal64_case_when; +explain vectorization detail select sum(NVL(ss_ext_list_price, 1.1)) from vector_decimal64_case_when_tmp; +select sum(NVL(ss_ext_list_price, 1.1)) from vector_decimal64_case_when_tmp; +explain vectorization detail select sum(NVL(ss_ext_list_price, 1)) from vector_decimal64_case_when_tmp; +select sum(NVL(ss_ext_list_price, 1)) from vector_decimal64_case_when_tmp; diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal64_case_when_nvl_cbo_1.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal64_case_when_nvl_cbo_1.q.out new file mode 100644 index 0000000000..247533ae8c --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/vector_decimal64_case_when_nvl_cbo_1.q.out @@ -0,0 +1,306 @@ +PREHOOK: query: create external table vector_decimal64_case_when(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(19,1), ss_ext_discount_amt int, ss_ext_sales_price double) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@vector_decimal64_case_when +POSTHOOK: query: create external table vector_decimal64_case_when(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(19,1), ss_ext_discount_amt int, ss_ext_sales_price double) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@vector_decimal64_case_when +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table1.csv' OVERWRITE INTO TABLE vector_decimal64_case_when +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@vector_decimal64_case_when +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table1.csv' OVERWRITE INTO TABLE vector_decimal64_case_when +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@vector_decimal64_case_when +PREHOOK: query: create table vector_decimal64_case_when_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(19,1), ss_ext_discount_amt int, ss_ext_sales_price decimal(7,2)) stored as ORC +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@vector_decimal64_case_when_tmp +POSTHOOK: query: create table vector_decimal64_case_when_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(19,1), ss_ext_discount_amt int, ss_ext_sales_price decimal(7,2)) stored as ORC +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@vector_decimal64_case_when_tmp +PREHOOK: query: insert into table vector_decimal64_case_when_tmp select * from vector_decimal64_case_when +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_case_when +PREHOOK: Output: default@vector_decimal64_case_when_tmp +POSTHOOK: query: insert into table vector_decimal64_case_when_tmp select * from vector_decimal64_case_when +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_case_when +POSTHOOK: Output: default@vector_decimal64_case_when_tmp +POSTHOOK: Lineage: vector_decimal64_case_when_tmp.ss_ext_discount_amt SIMPLE [(vector_decimal64_case_when)vector_decimal64_case_when.FieldSchema(name:ss_ext_discount_amt, type:int, comment:null), ] +POSTHOOK: Lineage: vector_decimal64_case_when_tmp.ss_ext_list_price SIMPLE [(vector_decimal64_case_when)vector_decimal64_case_when.FieldSchema(name:ss_ext_list_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_case_when_tmp.ss_ext_sales_price EXPRESSION [(vector_decimal64_case_when)vector_decimal64_case_when.FieldSchema(name:ss_ext_sales_price, type:double, comment:null), ] +POSTHOOK: Lineage: vector_decimal64_case_when_tmp.ss_ext_wholesale_cost SIMPLE [(vector_decimal64_case_when)vector_decimal64_case_when.FieldSchema(name:ss_ext_wholesale_cost, type:decimal(19,1), comment:null), ] +PREHOOK: query: explain vectorization detail select sum(NVL(ss_ext_list_price, 1.1)) from vector_decimal64_case_when_tmp +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_case_when_tmp +#### A masked pattern was here #### +POSTHOOK: query: explain vectorization detail select sum(NVL(ss_ext_list_price, 1.1)) from vector_decimal64_case_when_tmp +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_case_when_tmp +#### 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: vector_decimal64_case_when_tmp + Statistics: Num rows: 4 Data size: 448 Basic stats: COMPLETE Column stats: COMPLETE + TableScan Vectorization: + native: true + vectorizationSchemaColumns: [0:ss_ext_list_price:decimal(7,2)/DECIMAL_64, 1:ss_ext_wholesale_cost:decimal(19,1), 2:ss_ext_discount_amt:int, 3:ss_ext_sales_price:decimal(7,2)/DECIMAL_64, 4:ROW__ID:struct] + Select Operator + expressions: COALESCE(ss_ext_list_price,1.1) (type: decimal(7,2)) + outputColumnNames: _col0 + Select Vectorization: + className: VectorSelectOperator + native: true + projectedOutputColumnNums: [6] + selectExpressions: VectorCoalesce(columns [0, 5])(children: col 0:decimal(7,2)/DECIMAL_64, ConstantVectorExpression(val 1.1) -> 5:decimal(2,1)/DECIMAL_64) -> 6:decimal(7,2)/DECIMAL_64 + Statistics: Num rows: 4 Data size: 448 Basic stats: COMPLETE Column stats: COMPLETE + Group By Operator + aggregations: sum(_col0) + Group By Vectorization: + aggregators: VectorUDAFSumDecimal64(col 6:decimal(7,2)/DECIMAL_64) -> decimal(17,2)/DECIMAL_64 + className: VectorGroupByOperator + groupByMode: HASH + native: false + vectorProcessingMode: HASH + projectedOutputColumnNums: [0] + minReductionHashAggr: 0.75 + mode: hash + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 112 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, spark] IS true, No PTF TopN IS true, No DISTINCT columns IS true, BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true + valueColumns: 0:decimal(17,2) + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: _col0 (type: decimal(17,2)) + 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: 4 + includeColumns: [0] + dataColumns: ss_ext_list_price:decimal(7,2)/DECIMAL_64, ss_ext_wholesale_cost:decimal(19,1), ss_ext_discount_amt:int, ss_ext_sales_price:decimal(7,2)/DECIMAL_64 + partitionColumnCount: 0 + scratchColumnTypeNames: [decimal(2,1)/DECIMAL_64, decimal(7,2)/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, spark] IS true + reduceColumnNullOrder: + reduceColumnSortOrder: + allNative: false + usesVectorUDFAdaptor: false + vectorized: true + rowBatchContext: + dataColumnCount: 1 + dataColumns: VALUE._col0:decimal(17,2) + partitionColumnCount: 0 + scratchColumnTypeNames: [] + Reduce Operator Tree: + Group By Operator + aggregations: sum(VALUE._col0) + Group By Vectorization: + aggregators: VectorUDAFSumDecimal(col 0:decimal(17,2)) -> decimal(17,2) + className: VectorGroupByOperator + groupByMode: MERGEPARTIAL + native: false + vectorProcessingMode: GLOBAL + projectedOutputColumnNums: [0] + mode: mergepartial + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + File Sink Vectorization: + className: VectorFileSinkOperator + native: false + Statistics: Num rows: 1 Data size: 112 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 sum(NVL(ss_ext_list_price, 1.1)) from vector_decimal64_case_when_tmp +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_case_when_tmp +#### A masked pattern was here #### +POSTHOOK: query: select sum(NVL(ss_ext_list_price, 1.1)) from vector_decimal64_case_when_tmp +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_case_when_tmp +#### A masked pattern was here #### +3001.10 +PREHOOK: query: explain vectorization detail select sum(NVL(ss_ext_list_price, 1)) from vector_decimal64_case_when_tmp +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_case_when_tmp +#### A masked pattern was here #### +POSTHOOK: query: explain vectorization detail select sum(NVL(ss_ext_list_price, 1)) from vector_decimal64_case_when_tmp +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_case_when_tmp +#### 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: vector_decimal64_case_when_tmp + Statistics: Num rows: 4 Data size: 448 Basic stats: COMPLETE Column stats: COMPLETE + TableScan Vectorization: + native: true + vectorizationSchemaColumns: [0:ss_ext_list_price:decimal(7,2)/DECIMAL_64, 1:ss_ext_wholesale_cost:decimal(19,1), 2:ss_ext_discount_amt:int, 3:ss_ext_sales_price:decimal(7,2)/DECIMAL_64, 4:ROW__ID:struct] + Select Operator + expressions: COALESCE(ss_ext_list_price,1) (type: decimal(12,2)) + outputColumnNames: _col0 + Select Vectorization: + className: VectorSelectOperator + native: true + projectedOutputColumnNums: [6] + selectExpressions: VectorCoalesce(columns [0, 5])(children: col 0:decimal(7,2)/DECIMAL_64, ConstantVectorExpression(val 1) -> 5:decimal(10,0)/DECIMAL_64) -> 6:decimal(12,2)/DECIMAL_64 + Statistics: Num rows: 4 Data size: 448 Basic stats: COMPLETE Column stats: COMPLETE + Group By Operator + aggregations: sum(_col0) + Group By Vectorization: + aggregators: VectorUDAFSumDecimal64ToDecimal(col 6:decimal(12,2)/DECIMAL_64) -> decimal(22,2) + className: VectorGroupByOperator + groupByMode: HASH + native: false + vectorProcessingMode: HASH + projectedOutputColumnNums: [0] + minReductionHashAggr: 0.75 + mode: hash + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 112 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, spark] IS true, No PTF TopN IS true, No DISTINCT columns IS true, BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true + valueColumns: 0:decimal(22,2) + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: _col0 (type: decimal(22,2)) + 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: 4 + includeColumns: [0] + dataColumns: ss_ext_list_price:decimal(7,2)/DECIMAL_64, ss_ext_wholesale_cost:decimal(19,1), ss_ext_discount_amt:int, ss_ext_sales_price:decimal(7,2)/DECIMAL_64 + partitionColumnCount: 0 + scratchColumnTypeNames: [decimal(10,0)/DECIMAL_64, decimal(12,2)/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, spark] IS true + reduceColumnNullOrder: + reduceColumnSortOrder: + allNative: false + usesVectorUDFAdaptor: false + vectorized: true + rowBatchContext: + dataColumnCount: 1 + dataColumns: VALUE._col0:decimal(22,2) + partitionColumnCount: 0 + scratchColumnTypeNames: [] + Reduce Operator Tree: + Group By Operator + aggregations: sum(VALUE._col0) + Group By Vectorization: + aggregators: VectorUDAFSumDecimal(col 0:decimal(22,2)) -> decimal(22,2) + className: VectorGroupByOperator + groupByMode: MERGEPARTIAL + native: false + vectorProcessingMode: GLOBAL + projectedOutputColumnNums: [0] + mode: mergepartial + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + File Sink Vectorization: + className: VectorFileSinkOperator + native: false + Statistics: Num rows: 1 Data size: 112 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 sum(NVL(ss_ext_list_price, 1)) from vector_decimal64_case_when_tmp +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_case_when_tmp +#### A masked pattern was here #### +POSTHOOK: query: select sum(NVL(ss_ext_list_price, 1)) from vector_decimal64_case_when_tmp +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_case_when_tmp +#### A masked pattern was here #### +3001.00