diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index d49563b1ca..e60c4c5df5 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -259,6 +259,7 @@ minillaplocal.shared.query.files=alter_merge_2_orc.q,\ vector_data_types.q,\ vector_date_1.q,\ vector_decimal64_div_decimal64scalar.q,\ + vector_decimal64_div_decimal64column.q,\ vector_decimal_1.q,\ vector_decimal_10_0.q,\ vector_decimal_2.q,\ diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt new file mode 100644 index 0000000000..01da31c2db --- /dev/null +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt @@ -0,0 +1,277 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.exec.vector.expressions.gen; + +import java.util.Arrays; + +import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.Decimal64ColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor; +import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch; +import org.apache.hadoop.hive.ql.exec.vector.expressions.NullUtil; +import org.apache.hadoop.hive.ql.exec.vector.expressions.Decimal64Util; +import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpression; +import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; +import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable; +import org.apache.hadoop.hive.ql.metadata.HiveException; + +/** + * Generated from template Decimal64ColumnArithmeticDecimal64Column.txt, which covers + * decimal64 arithmetic expressions between columns. + */ +public class extends VectorExpression { + + private static final long serialVersionUID = 1L; + + private static final long[] powerOfTenTable = { + 1L, // 0 + 10L, + 100L, + 1_000L, + 10_000L, + 100_000L, + 1_000_000L, + 10_000_000L, + 100_000_000L, // 8 + 1_000_000_000L, + 10_000_000_000L, + 100_000_000_000L, + 1_000_000_000_000L, + 10_000_000_000_000L, + 100_000_000_000_000L, + 1_000_000_000_000_000L, + 10_000_000_000_000_000L, // 16 + 100_000_000_000_000_000L, + 1_000_000_000_000_000_000L, // 18 + }; + + private final int colNum1; + private final int colNum2; + + public (int colNum1, int colNum2, int outputColumnNum) { + super(outputColumnNum); + this.colNum1 = colNum1; + this.colNum2 = colNum2; + } + + public () { + super(); + + // Dummy final assignments. + colNum1 = -1; + colNum2 = -1; + } + + /* + * Division that rounds up if the subsequent digits are greater than half. + * Sign of the result will depend on the both x and y. + * If x and y have different sign, then the result is multiplied by -1. + * If x and y have same sign, then the result is always positive. + */ + private long roundingDivision(long divident, long divisor) { + final long absDivident = Math.abs(divident); + final long absDivisor = Math.abs(divisor); + final boolean differentSigns = (divident > 0) ^ (divisor > 0); + final long remainder = absDivident % absDivisor; + long result = absDivident / absDivisor; + if (remainder*2 >= absDivisor) { + result += 1; // round half away from 0 + } + if (differentSigns) { + return -1*result; + } else { + return result; + } + } + + @Override + public void evaluate(VectorizedRowBatch batch) throws HiveException { + + // return immediately if batch is empty + final int n = batch.size; + if (n == 0) { + return; + } + + if (childExpressions != null) { + super.evaluateChildren(batch); + } + + Decimal64ColumnVector inputColVector1 = (Decimal64ColumnVector) batch.cols[colNum1]; + Decimal64ColumnVector inputColVector2 = (Decimal64ColumnVector) batch.cols[colNum2]; + Decimal64ColumnVector outputColVector = (Decimal64ColumnVector) batch.cols[outputColumnNum]; + int[] sel = batch.selected; + + long[] vector1 = inputColVector1.vector; + long[] vector2 = inputColVector2.vector; + long[] outputVector = outputColVector.vector; + boolean[] outputIsNull = outputColVector.isNull; + int outputScale = ((DecimalTypeInfo) outputTypeInfo).scale(); + long scaleFactor = powerOfTenTable[outputScale]; + + final long outputDecimal64AbsMax = + HiveDecimalWritable.getDecimal64AbsMax(outputColVector.precision); + + /* + * Propagate null values for a two-input operator and set isRepeating and noNulls appropriately. + */ + NullUtil.propagateNullsColCol( + inputColVector1, inputColVector2, outputColVector, sel, n, batch.selectedInUse); + + /* + * Disregard nulls for processing. In other words, + * the arithmetic operation is performed even if one or + * more inputs are null. This is to improve speed by avoiding + * conditional checks in the inner loop. + */ + if (inputColVector1.isRepeating && inputColVector2.isRepeating) { + if(vector2[0] == 0) { + outputColVector.noNulls = false; + outputColVector.isRepeating = true; + Arrays.fill(outputIsNull, true); + NullUtil.setNullOutputEntriesColScalar(outputColVector, batch.selectedInUse, sel, n); + return; + } + final long result = roundingDivision(vector1[0] * scaleFactor, vector2[0]); + outputVector[0] = result; + if (Math.abs(result) > outputDecimal64AbsMax) { + outputColVector.noNulls = false; + outputIsNull[0] = true; + } + } else if (inputColVector1.isRepeating) { + final long repeatedValue1 = vector1[0]; + if (batch.selectedInUse) { + for(int j = 0; j != n; j++) { + int i = sel[j]; + if(vector2[i] == 0) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + outputVector[i] = LongColumnVector.NULL_VALUE; + } else { + final long result = roundingDivision(repeatedValue1 * scaleFactor, vector2[i]); + outputVector[i] = result; + if (Math.abs(result) > outputDecimal64AbsMax) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + } + } + } + } else { + for(int i = 0; i != n; i++) { + if(vector2[i] == 0) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + outputVector[i] = LongColumnVector.NULL_VALUE; + } else { + final long result = roundingDivision(repeatedValue1 * scaleFactor, vector2[i]); + outputVector[i] = result; + if (Math.abs(result) > outputDecimal64AbsMax) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + } + } + } + } + } else if (inputColVector2.isRepeating) { + final long repeatedValue2 = vector2[0]; + if(repeatedValue2 == 0) { + outputColVector.noNulls = false; + outputColVector.isRepeating = true; + Arrays.fill(outputIsNull, true); + NullUtil.setNullOutputEntriesColScalar(outputColVector, batch.selectedInUse, sel, n); + return; + } + if (batch.selectedInUse) { + for(int j = 0; j != n; j++) { + int i = sel[j]; + final long result = roundingDivision(vector1[i] * scaleFactor, repeatedValue2); + outputVector[i] = result; + if (Math.abs(result) > outputDecimal64AbsMax) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + } + } + } else { + for(int i = 0; i != n; i++) { + final long result = roundingDivision(vector1[i] * scaleFactor, repeatedValue2); + outputVector[i] = result; + if (Math.abs(result) > outputDecimal64AbsMax) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + } + } + } + } else { + if (batch.selectedInUse) { + for(int j = 0; j != n; j++) { + int i = sel[j]; + if(vector2[i] == 0) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + outputVector[i] = LongColumnVector.NULL_VALUE; + } else { + final long result = roundingDivision(vector1[i] * scaleFactor, vector2[i]); + outputVector[i] = result; + if (Math.abs(result) > outputDecimal64AbsMax) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + } + } + } + } else { + for(int i = 0; i != n; i++) { + if(vector2[i] == 0) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + outputVector[i] = LongColumnVector.NULL_VALUE; + } else { + final long result = roundingDivision(vector1[i] * scaleFactor, vector2[i]); + outputVector[i] = result; + if (Math.abs(result) > outputDecimal64AbsMax) { + outputColVector.noNulls = false; + outputIsNull[i] = true; + } + } + } + } + } + + // Currently, we defer division, etc to regular HiveDecimal so we don't do any null + // default value setting here. + } + + @Override + public String vectorExpressionParameters() { + return getColumnParamString(0, colNum1) + ", " + getColumnParamString(1, colNum2); + } + + @Override + public VectorExpressionDescriptor.Descriptor getDescriptor() { + return (new VectorExpressionDescriptor.Builder()) + .setMode( + VectorExpressionDescriptor.Mode.PROJECTION) + .setNumArguments(2) + .setArgumentTypes( + VectorExpressionDescriptor.ArgumentType.DECIMAL_64, + VectorExpressionDescriptor.ArgumentType.DECIMAL_64) + .setInputExpressionTypes( + VectorExpressionDescriptor.InputExpressionType.COLUMN, + VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); + } +} diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt index d420e22bfa..7b2a043075 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt @@ -43,22 +43,22 @@ public class extends VectorExpression { 1L, // 0 10L, 100L, - 1000L, - 10000L, - 100000L, - 1000000L, - 10000000L, - 100000000L, // 8 - 1000000000L, - 10000000000L, - 100000000000L, - 1000000000000L, - 10000000000000L, - 100000000000000L, - 1000000000000000L, - 10000000000000000L, // 16 - 100000000000000000L, - 1000000000000000000L, // 18 + 1_000L, + 10_000L, + 100_000L, + 1_000_000L, + 10_000_000L, + 100_000_000L, // 8 + 1_000_000_000L, + 10_000_000_000L, + 100_000_000_000L, + 1_000_000_000_000L, + 10_000_000_000_000L, + 100_000_000_000_000L, + 1_000_000_000_000_000L, + 10_000_000_000_000_000L, // 16 + 100_000_000_000_000_000L, + 1_000_000_000_000_000_000L, // 18 }; private final int colNum; @@ -81,12 +81,11 @@ public class extends VectorExpression { /* * Division that rounds up if the subsequent digits are greater than half. * Sign of the result will depend on the both x and y. - * If x and y have different sign, then the result is multiplied by -1 - * If x and y have same sign, then the result is unchanged + * If x and y have different sign, then the result is multiplied by -1. + * If x and y have same sign, the result is always positive. */ - private long roundingDivision(long divident, long divisor) { + private long roundingDivision(long divident, long divisor, long absDivisor) { final long absDivident = Math.abs(divident); - final long absDivisor = Math.abs(divisor); final boolean differentSigns = (divident > 0) ^ (divisor > 0); final long remainder = absDivident % absDivisor; long result = absDivident / absDivisor; @@ -128,6 +127,8 @@ public class extends VectorExpression { final long outputDecimal64AbsMax = HiveDecimalWritable.getDecimal64AbsMax(outputColVector.precision); int outputScale = ((DecimalTypeInfo) outputTypeInfo).scale(); + long scaleFactor = powerOfTenTable[outputScale]; + long absValue = Math.abs(value); if (value == 0) { // Denominator is zero, convert the batch to nulls @@ -140,7 +141,7 @@ public class extends VectorExpression { if (inputColVector.noNulls || !inputIsNull[0]) { outputIsNull[0] = false; // The following may override a "false" null setting if an error or overflow occurs. - final long result = roundingDivision(vector[0] * powerOfTenTable[outputScale], value); + final long result = roundingDivision(vector[0] * scaleFactor, value, absValue); if (Math.abs(result) > outputDecimal64AbsMax) { outputIsNull[0] = true; outputColVector.noNulls = false; @@ -164,7 +165,7 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { final int i = sel[j]; outputIsNull[i] = false; - final long result = roundingDivision(vector[i] * powerOfTenTable[outputScale], value); + final long result = roundingDivision(vector[i] * scaleFactor, value, absValue); outputVector[i] = result; if (Math.abs(result) > outputDecimal64AbsMax) { outputColVector.noNulls = false; @@ -174,7 +175,7 @@ public class extends VectorExpression { } else { for(int j = 0; j != n; j++) { final int i = sel[j]; - final long result = roundingDivision(vector[i] * powerOfTenTable[outputScale], value); + final long result = roundingDivision(vector[i] * scaleFactor, value, absValue); outputVector[i] = result; if (Math.abs(result) > outputDecimal64AbsMax) { outputColVector.noNulls = false; @@ -191,7 +192,7 @@ public class extends VectorExpression { outputColVector.noNulls = true; } for(int i = 0; i != n; i++) { - final long result = roundingDivision(vector[i] * powerOfTenTable[outputScale], value); + final long result = roundingDivision(vector[i] * scaleFactor, value, absValue); outputVector[i] = result; if (Math.abs(result) > outputDecimal64AbsMax) { outputColVector.noNulls = false; @@ -211,7 +212,7 @@ public class extends VectorExpression { if (!inputIsNull[i]) { outputIsNull[i] = false; // The following may override a "false" null setting if an error or overflow occurs. - final long result = roundingDivision(vector[i] * powerOfTenTable[outputScale], value); + final long result = roundingDivision(vector[i] * scaleFactor, value, absValue); outputVector[i] = result; if (Math.abs(result) > outputDecimal64AbsMax) { outputIsNull[i] = true; @@ -228,7 +229,7 @@ public class extends VectorExpression { if (!inputIsNull[i]) { outputIsNull[i] = false; // The following may override a "false" null setting if an error or overflow occurs. - final long result = roundingDivision(vector[i] * powerOfTenTable[outputScale], value); + final long result = roundingDivision(vector[i] * scaleFactor, value, absValue); outputVector[i] = result; if (Math.abs(result) > outputDecimal64AbsMax) { outputIsNull[i] = true; 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 bc19eb50a1..ce6adc4a6b 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 @@ -1782,11 +1782,10 @@ private VectorExpression getDecimal64VectorExpressionForUdf(GenericUDF genericUd decimal64ColumnScale = returnDecimalTypeInfo.getScale(); isDecimal64ScaleEstablished = true; } else if (genericUdf instanceof GenericUDFOPDivide) { - // Check possible addition of long numbers overflow during decimal64 division + // Check possible overflow during decimal64 division for intermediate result // if yes then skip the optimization DecimalTypeInfo leftType = (DecimalTypeInfo)childExprs.get(0).getTypeInfo(); - DecimalTypeInfo rightType = (DecimalTypeInfo)childExprs.get(1).getTypeInfo(); - if (leftType.precision() > 17 || rightType.precision() > 17) { + if((leftType.precision() + returnDecimalTypeInfo.getScale()) > 18) { return null; } } else if (returnDecimalTypeInfo.getScale() != decimal64ColumnScale) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDivide.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDivide.java index a4c2475120..0c0ce68311 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDivide.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDivide.java @@ -48,7 +48,8 @@ LongScalarDivideLongColumn.class, LongScalarDivideDoubleColumn.class, DoubleScalarDivideLongColumn.class, DoubleScalarDivideDoubleColumn.class, DecimalColDivideDecimalColumn.class, DecimalColDivideDecimalScalar.class, - DecimalScalarDivideDecimalColumn.class, Decimal64ColDivideDecimal64Scalar.class}) + DecimalScalarDivideDecimalColumn.class, Decimal64ColDivideDecimal64Scalar.class, + Decimal64ColDivideDecimal64Column.class}) public class GenericUDFOPDivide extends GenericUDFBaseNumeric { public GenericUDFOPDivide() { diff --git a/ql/src/test/queries/clientpositive/vector_decimal64_div_decimal64column.q b/ql/src/test/queries/clientpositive/vector_decimal64_div_decimal64column.q new file mode 100644 index 0000000000..34091f3267 --- /dev/null +++ b/ql/src/test/queries/clientpositive/vector_decimal64_div_decimal64column.q @@ -0,0 +1,6 @@ +create external table vector_decimal64_div_decimal64column(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; +LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64column; +create table vector_decimal64_div_decimal64column_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC; +insert into table vector_decimal64_div_decimal64column_tmp select * from vector_decimal64_div_decimal64column; +explain vectorization detail select sum(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp; +select sum(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp; diff --git a/ql/src/test/queries/clientpositive/vector_decimal64_div_decimal64scalar.q b/ql/src/test/queries/clientpositive/vector_decimal64_div_decimal64scalar.q index 02c08abb62..220bdae466 100644 --- a/ql/src/test/queries/clientpositive/vector_decimal64_div_decimal64scalar.q +++ b/ql/src/test/queries/clientpositive/vector_decimal64_div_decimal64scalar.q @@ -1,8 +1,8 @@ -create external table cdpd4378(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; -LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE cdpd4378; -create table cdpd4378_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC; -insert into table cdpd4378_tmp select * from cdpd4378; -explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp; -select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp; -explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp; -select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp; +create external table vector_decimal64_div_decimal64scalar(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; +LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64scalar; +create table vector_decimal64_div_decimal64scalar_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC; +insert into table vector_decimal64_div_decimal64scalar_tmp select * from vector_decimal64_div_decimal64scalar; +explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp; +select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp; +explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp; +select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp; diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal64_div_decimal64column.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal64_div_decimal64column.q.out new file mode 100644 index 0000000000..ff2b9e1bde --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/vector_decimal64_div_decimal64column.q.out @@ -0,0 +1,170 @@ +PREHOOK: query: create external table vector_decimal64_div_decimal64column(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) 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_div_decimal64column +POSTHOOK: query: create external table vector_decimal64_div_decimal64column(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) 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_div_decimal64column +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64column +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@vector_decimal64_div_decimal64column +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64column +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@vector_decimal64_div_decimal64column +PREHOOK: query: create table vector_decimal64_div_decimal64column_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@vector_decimal64_div_decimal64column_tmp +POSTHOOK: query: create table vector_decimal64_div_decimal64column_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@vector_decimal64_div_decimal64column_tmp +PREHOOK: query: insert into table vector_decimal64_div_decimal64column_tmp select * from vector_decimal64_div_decimal64column +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_div_decimal64column +PREHOOK: Output: default@vector_decimal64_div_decimal64column_tmp +POSTHOOK: query: insert into table vector_decimal64_div_decimal64column_tmp select * from vector_decimal64_div_decimal64column +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_div_decimal64column +POSTHOOK: Output: default@vector_decimal64_div_decimal64column_tmp +POSTHOOK: Lineage: vector_decimal64_div_decimal64column_tmp.ss_ext_discount_amt SIMPLE [(vector_decimal64_div_decimal64column)vector_decimal64_div_decimal64column.FieldSchema(name:ss_ext_discount_amt, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64column_tmp.ss_ext_list_price SIMPLE [(vector_decimal64_div_decimal64column)vector_decimal64_div_decimal64column.FieldSchema(name:ss_ext_list_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64column_tmp.ss_ext_sales_price SIMPLE [(vector_decimal64_div_decimal64column)vector_decimal64_div_decimal64column.FieldSchema(name:ss_ext_sales_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64column_tmp.ss_ext_wholesale_cost SIMPLE [(vector_decimal64_div_decimal64column)vector_decimal64_div_decimal64column.FieldSchema(name:ss_ext_wholesale_cost, type:decimal(7,2), comment:null), ] +PREHOOK: query: explain vectorization detail select sum(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_div_decimal64column_tmp +#### A masked pattern was here #### +POSTHOOK: query: explain vectorization detail select sum(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_div_decimal64column_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_div_decimal64column_tmp + Statistics: Num rows: 1000 Data size: 224000 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(7,2)/DECIMAL_64, 2:ss_ext_discount_amt:decimal(7,2)/DECIMAL_64, 3:ss_ext_sales_price:decimal(7,2)/DECIMAL_64, 4:ROW__ID:struct] + Select Operator + expressions: (ss_ext_list_price / ss_ext_discount_amt) (type: decimal(17,10)) + outputColumnNames: _col0 + Select Vectorization: + className: VectorSelectOperator + native: true + projectedOutputColumnNums: [5] + selectExpressions: Decimal64ColDivideDecimal64Column(col 0:decimal(7,2)/DECIMAL_64, col 2:decimal(7,2)/DECIMAL_64) -> 5:decimal(17,10)/DECIMAL_64 + Statistics: Num rows: 1000 Data size: 224000 Basic stats: COMPLETE Column stats: COMPLETE + Group By Operator + aggregations: sum(_col0) + Group By Vectorization: + aggregators: VectorUDAFSumDecimal64ToDecimal(col 5:decimal(17,10)/DECIMAL_64) -> decimal(27,10) + className: VectorGroupByOperator + groupByMode: HASH + native: false + vectorProcessingMode: HASH + projectedOutputColumnNums: [0] + minReductionHashAggr: 0.99 + mode: hash + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + 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(27,10) + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: _col0 (type: decimal(27,10)) + 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, 2] + dataColumns: ss_ext_list_price:decimal(7,2)/DECIMAL_64, ss_ext_wholesale_cost:decimal(7,2)/DECIMAL_64, ss_ext_discount_amt:decimal(7,2)/DECIMAL_64, ss_ext_sales_price:decimal(7,2)/DECIMAL_64 + partitionColumnCount: 0 + scratchColumnTypeNames: [decimal(17,10)/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(27,10) + partitionColumnCount: 0 + scratchColumnTypeNames: [] + Reduce Operator Tree: + Group By Operator + aggregations: sum(VALUE._col0) + Group By Vectorization: + aggregators: VectorUDAFSumDecimal(col 0:decimal(27,10)) -> decimal(27,10) + 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(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_div_decimal64column_tmp +#### A masked pattern was here #### +POSTHOOK: query: select sum(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_div_decimal64column_tmp +#### A masked pattern was here #### +3154.0222743675 diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal64_div_decimal64scalar.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal64_div_decimal64scalar.q.out index bb21cd9a42..b537d5a387 100644 --- a/ql/src/test/results/clientpositive/llap/vector_decimal64_div_decimal64scalar.q.out +++ b/ql/src/test/results/clientpositive/llap/vector_decimal64_div_decimal64scalar.q.out @@ -1,46 +1,46 @@ -PREHOOK: query: create external table cdpd4378(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE +PREHOOK: query: create external table vector_decimal64_div_decimal64scalar(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE PREHOOK: type: CREATETABLE PREHOOK: Output: database:default -PREHOOK: Output: default@cdpd4378 -POSTHOOK: query: create external table cdpd4378(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE +PREHOOK: Output: default@vector_decimal64_div_decimal64scalar +POSTHOOK: query: create external table vector_decimal64_div_decimal64scalar(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:default -POSTHOOK: Output: default@cdpd4378 -PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE cdpd4378 +POSTHOOK: Output: default@vector_decimal64_div_decimal64scalar +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64scalar PREHOOK: type: LOAD #### A masked pattern was here #### -PREHOOK: Output: default@cdpd4378 -POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE cdpd4378 +PREHOOK: Output: default@vector_decimal64_div_decimal64scalar +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64scalar POSTHOOK: type: LOAD #### A masked pattern was here #### -POSTHOOK: Output: default@cdpd4378 -PREHOOK: query: create table cdpd4378_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC +POSTHOOK: Output: default@vector_decimal64_div_decimal64scalar +PREHOOK: query: create table vector_decimal64_div_decimal64scalar_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC PREHOOK: type: CREATETABLE PREHOOK: Output: database:default -PREHOOK: Output: default@cdpd4378_tmp -POSTHOOK: query: create table cdpd4378_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC +PREHOOK: Output: default@vector_decimal64_div_decimal64scalar_tmp +POSTHOOK: query: create table vector_decimal64_div_decimal64scalar_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:default -POSTHOOK: Output: default@cdpd4378_tmp -PREHOOK: query: insert into table cdpd4378_tmp select * from cdpd4378 +POSTHOOK: Output: default@vector_decimal64_div_decimal64scalar_tmp +PREHOOK: query: insert into table vector_decimal64_div_decimal64scalar_tmp select * from vector_decimal64_div_decimal64scalar PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378 -PREHOOK: Output: default@cdpd4378_tmp -POSTHOOK: query: insert into table cdpd4378_tmp select * from cdpd4378 +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar +PREHOOK: Output: default@vector_decimal64_div_decimal64scalar_tmp +POSTHOOK: query: insert into table vector_decimal64_div_decimal64scalar_tmp select * from vector_decimal64_div_decimal64scalar POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378 -POSTHOOK: Output: default@cdpd4378_tmp -POSTHOOK: Lineage: cdpd4378_tmp.ss_ext_discount_amt SIMPLE [(cdpd4378)cdpd4378.FieldSchema(name:ss_ext_discount_amt, type:decimal(7,2), comment:null), ] -POSTHOOK: Lineage: cdpd4378_tmp.ss_ext_list_price SIMPLE [(cdpd4378)cdpd4378.FieldSchema(name:ss_ext_list_price, type:decimal(7,2), comment:null), ] -POSTHOOK: Lineage: cdpd4378_tmp.ss_ext_sales_price SIMPLE [(cdpd4378)cdpd4378.FieldSchema(name:ss_ext_sales_price, type:decimal(7,2), comment:null), ] -POSTHOOK: Lineage: cdpd4378_tmp.ss_ext_wholesale_cost SIMPLE [(cdpd4378)cdpd4378.FieldSchema(name:ss_ext_wholesale_cost, type:decimal(7,2), comment:null), ] -PREHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar +POSTHOOK: Output: default@vector_decimal64_div_decimal64scalar_tmp +POSTHOOK: Lineage: vector_decimal64_div_decimal64scalar_tmp.ss_ext_discount_amt SIMPLE [(vector_decimal64_div_decimal64scalar)vector_decimal64_div_decimal64scalar.FieldSchema(name:ss_ext_discount_amt, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64scalar_tmp.ss_ext_list_price SIMPLE [(vector_decimal64_div_decimal64scalar)vector_decimal64_div_decimal64scalar.FieldSchema(name:ss_ext_list_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64scalar_tmp.ss_ext_sales_price SIMPLE [(vector_decimal64_div_decimal64scalar)vector_decimal64_div_decimal64scalar.FieldSchema(name:ss_ext_sales_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64scalar_tmp.ss_ext_wholesale_cost SIMPLE [(vector_decimal64_div_decimal64scalar)vector_decimal64_div_decimal64scalar.FieldSchema(name:ss_ext_wholesale_cost, type:decimal(7,2), comment:null), ] +PREHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378_tmp +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### -POSTHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp +POSTHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### PLAN VECTORIZATION: enabled: true @@ -61,7 +61,7 @@ STAGE PLANS: Map 1 Map Operator Tree: TableScan - alias: cdpd4378_tmp + alias: vector_decimal64_div_decimal64scalar_tmp Statistics: Num rows: 1000 Data size: 448000 Basic stats: COMPLETE Column stats: COMPLETE TableScan Vectorization: native: true @@ -159,22 +159,22 @@ STAGE PLANS: Processor Tree: ListSink -PREHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp +PREHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378_tmp +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### -POSTHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp +POSTHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### 401098.9228951000 -PREHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp +PREHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378_tmp +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### -POSTHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp +POSTHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### PLAN VECTORIZATION: enabled: true @@ -195,7 +195,7 @@ STAGE PLANS: Map 1 Map Operator Tree: TableScan - alias: cdpd4378_tmp + alias: vector_decimal64_div_decimal64scalar_tmp Statistics: Num rows: 1000 Data size: 448000 Basic stats: COMPLETE Column stats: COMPLETE TableScan Vectorization: native: true @@ -293,12 +293,12 @@ STAGE PLANS: Processor Tree: ListSink -PREHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp +PREHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378_tmp +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### -POSTHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp +POSTHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### 413636.364000 diff --git a/ql/src/test/results/clientpositive/vector_decimal64_div_decimal64column.q.out b/ql/src/test/results/clientpositive/vector_decimal64_div_decimal64column.q.out new file mode 100644 index 0000000000..ac140a34da --- /dev/null +++ b/ql/src/test/results/clientpositive/vector_decimal64_div_decimal64column.q.out @@ -0,0 +1,142 @@ +PREHOOK: query: create external table vector_decimal64_div_decimal64column(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) 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_div_decimal64column +POSTHOOK: query: create external table vector_decimal64_div_decimal64column(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) 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_div_decimal64column +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64column +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@vector_decimal64_div_decimal64column +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64column +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@vector_decimal64_div_decimal64column +PREHOOK: query: create table vector_decimal64_div_decimal64column_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@vector_decimal64_div_decimal64column_tmp +POSTHOOK: query: create table vector_decimal64_div_decimal64column_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@vector_decimal64_div_decimal64column_tmp +PREHOOK: query: insert into table vector_decimal64_div_decimal64column_tmp select * from vector_decimal64_div_decimal64column +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_div_decimal64column +PREHOOK: Output: default@vector_decimal64_div_decimal64column_tmp +POSTHOOK: query: insert into table vector_decimal64_div_decimal64column_tmp select * from vector_decimal64_div_decimal64column +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_div_decimal64column +POSTHOOK: Output: default@vector_decimal64_div_decimal64column_tmp +POSTHOOK: Lineage: vector_decimal64_div_decimal64column_tmp.ss_ext_discount_amt SIMPLE [(vector_decimal64_div_decimal64column)vector_decimal64_div_decimal64column.FieldSchema(name:ss_ext_discount_amt, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64column_tmp.ss_ext_list_price SIMPLE [(vector_decimal64_div_decimal64column)vector_decimal64_div_decimal64column.FieldSchema(name:ss_ext_list_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64column_tmp.ss_ext_sales_price SIMPLE [(vector_decimal64_div_decimal64column)vector_decimal64_div_decimal64column.FieldSchema(name:ss_ext_sales_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64column_tmp.ss_ext_wholesale_cost SIMPLE [(vector_decimal64_div_decimal64column)vector_decimal64_div_decimal64column.FieldSchema(name:ss_ext_wholesale_cost, type:decimal(7,2), comment:null), ] +PREHOOK: query: explain vectorization detail select sum(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_div_decimal64column_tmp +#### A masked pattern was here #### +POSTHOOK: query: explain vectorization detail select sum(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_div_decimal64column_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 + Map Reduce + Map Operator Tree: + TableScan + alias: vector_decimal64_div_decimal64column_tmp + Statistics: Num rows: 1000 Data size: 224000 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(7,2)/DECIMAL_64, 2:ss_ext_discount_amt:decimal(7,2)/DECIMAL_64, 3:ss_ext_sales_price:decimal(7,2)/DECIMAL_64, 4:ROW__ID:struct] + Select Operator + expressions: (ss_ext_list_price / ss_ext_discount_amt) (type: decimal(17,10)) + outputColumnNames: _col0 + Select Vectorization: + className: VectorSelectOperator + native: true + projectedOutputColumnNums: [5] + selectExpressions: Decimal64ColDivideDecimal64Column(col 0:decimal(7,2)/DECIMAL_64, col 2:decimal(7,2)/DECIMAL_64) -> 5:decimal(17,10)/DECIMAL_64 + Statistics: Num rows: 1000 Data size: 224000 Basic stats: COMPLETE Column stats: COMPLETE + Group By Operator + aggregations: sum(_col0) + Group By Vectorization: + aggregators: VectorUDAFSumDecimal64ToDecimal(col 5:decimal(17,10)/DECIMAL_64) -> decimal(27,10) + className: VectorGroupByOperator + groupByMode: HASH + native: false + vectorProcessingMode: HASH + projectedOutputColumnNums: [0] + minReductionHashAggr: 0.99 + mode: hash + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + sort order: + Reduce Sink Vectorization: + className: VectorReduceSinkOperator + native: false + nativeConditionsMet: hive.vectorized.execution.reducesink.new.enabled IS true, No PTF TopN IS true, No DISTINCT columns IS true, BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true + nativeConditionsNotMet: hive.execution.engine mr IN [tez, spark] IS false + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: _col0 (type: decimal(27,10)) + Execution mode: vectorized + 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, 2] + dataColumns: ss_ext_list_price:decimal(7,2)/DECIMAL_64, ss_ext_wholesale_cost:decimal(7,2)/DECIMAL_64, ss_ext_discount_amt:decimal(7,2)/DECIMAL_64, ss_ext_sales_price:decimal(7,2)/DECIMAL_64 + partitionColumnCount: 0 + scratchColumnTypeNames: [decimal(17,10)/DECIMAL_64] + Reduce Vectorization: + enabled: false + enableConditionsMet: hive.vectorized.execution.reduce.enabled IS true + enableConditionsNotMet: hive.execution.engine mr IN [tez, spark] IS false + Reduce Operator Tree: + Group By Operator + aggregations: sum(VALUE._col0) + mode: mergepartial + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: 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(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp +PREHOOK: type: QUERY +PREHOOK: Input: default@vector_decimal64_div_decimal64column_tmp +#### A masked pattern was here #### +POSTHOOK: query: select sum(ss_ext_list_price/ss_ext_discount_amt) from vector_decimal64_div_decimal64column_tmp +POSTHOOK: type: QUERY +POSTHOOK: Input: default@vector_decimal64_div_decimal64column_tmp +#### A masked pattern was here #### +3154.0222743675 diff --git a/ql/src/test/results/clientpositive/vector_decimal64_div_decimal64scalar.q.out b/ql/src/test/results/clientpositive/vector_decimal64_div_decimal64scalar.q.out index e080068f1b..0a8c0f3dfc 100644 --- a/ql/src/test/results/clientpositive/vector_decimal64_div_decimal64scalar.q.out +++ b/ql/src/test/results/clientpositive/vector_decimal64_div_decimal64scalar.q.out @@ -1,46 +1,46 @@ -PREHOOK: query: create external table cdpd4378(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE +PREHOOK: query: create external table vector_decimal64_div_decimal64scalar(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE PREHOOK: type: CREATETABLE PREHOOK: Output: database:default -PREHOOK: Output: default@cdpd4378 -POSTHOOK: query: create external table cdpd4378(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE +PREHOOK: Output: default@vector_decimal64_div_decimal64scalar +POSTHOOK: query: create external table vector_decimal64_div_decimal64scalar(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:default -POSTHOOK: Output: default@cdpd4378 -PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE cdpd4378 +POSTHOOK: Output: default@vector_decimal64_div_decimal64scalar +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64scalar PREHOOK: type: LOAD #### A masked pattern was here #### -PREHOOK: Output: default@cdpd4378 -POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE cdpd4378 +PREHOOK: Output: default@vector_decimal64_div_decimal64scalar +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal64table.csv' OVERWRITE INTO TABLE vector_decimal64_div_decimal64scalar POSTHOOK: type: LOAD #### A masked pattern was here #### -POSTHOOK: Output: default@cdpd4378 -PREHOOK: query: create table cdpd4378_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC +POSTHOOK: Output: default@vector_decimal64_div_decimal64scalar +PREHOOK: query: create table vector_decimal64_div_decimal64scalar_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC PREHOOK: type: CREATETABLE PREHOOK: Output: database:default -PREHOOK: Output: default@cdpd4378_tmp -POSTHOOK: query: create table cdpd4378_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC +PREHOOK: Output: default@vector_decimal64_div_decimal64scalar_tmp +POSTHOOK: query: create table vector_decimal64_div_decimal64scalar_tmp(ss_ext_list_price decimal(7,2), ss_ext_wholesale_cost decimal(7,2), ss_ext_discount_amt decimal(7,2), ss_ext_sales_price decimal(7,2)) stored as ORC POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:default -POSTHOOK: Output: default@cdpd4378_tmp -PREHOOK: query: insert into table cdpd4378_tmp select * from cdpd4378 +POSTHOOK: Output: default@vector_decimal64_div_decimal64scalar_tmp +PREHOOK: query: insert into table vector_decimal64_div_decimal64scalar_tmp select * from vector_decimal64_div_decimal64scalar PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378 -PREHOOK: Output: default@cdpd4378_tmp -POSTHOOK: query: insert into table cdpd4378_tmp select * from cdpd4378 +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar +PREHOOK: Output: default@vector_decimal64_div_decimal64scalar_tmp +POSTHOOK: query: insert into table vector_decimal64_div_decimal64scalar_tmp select * from vector_decimal64_div_decimal64scalar POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378 -POSTHOOK: Output: default@cdpd4378_tmp -POSTHOOK: Lineage: cdpd4378_tmp.ss_ext_discount_amt SIMPLE [(cdpd4378)cdpd4378.FieldSchema(name:ss_ext_discount_amt, type:decimal(7,2), comment:null), ] -POSTHOOK: Lineage: cdpd4378_tmp.ss_ext_list_price SIMPLE [(cdpd4378)cdpd4378.FieldSchema(name:ss_ext_list_price, type:decimal(7,2), comment:null), ] -POSTHOOK: Lineage: cdpd4378_tmp.ss_ext_sales_price SIMPLE [(cdpd4378)cdpd4378.FieldSchema(name:ss_ext_sales_price, type:decimal(7,2), comment:null), ] -POSTHOOK: Lineage: cdpd4378_tmp.ss_ext_wholesale_cost SIMPLE [(cdpd4378)cdpd4378.FieldSchema(name:ss_ext_wholesale_cost, type:decimal(7,2), comment:null), ] -PREHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar +POSTHOOK: Output: default@vector_decimal64_div_decimal64scalar_tmp +POSTHOOK: Lineage: vector_decimal64_div_decimal64scalar_tmp.ss_ext_discount_amt SIMPLE [(vector_decimal64_div_decimal64scalar)vector_decimal64_div_decimal64scalar.FieldSchema(name:ss_ext_discount_amt, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64scalar_tmp.ss_ext_list_price SIMPLE [(vector_decimal64_div_decimal64scalar)vector_decimal64_div_decimal64scalar.FieldSchema(name:ss_ext_list_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64scalar_tmp.ss_ext_sales_price SIMPLE [(vector_decimal64_div_decimal64scalar)vector_decimal64_div_decimal64scalar.FieldSchema(name:ss_ext_sales_price, type:decimal(7,2), comment:null), ] +POSTHOOK: Lineage: vector_decimal64_div_decimal64scalar_tmp.ss_ext_wholesale_cost SIMPLE [(vector_decimal64_div_decimal64scalar)vector_decimal64_div_decimal64scalar.FieldSchema(name:ss_ext_wholesale_cost, type:decimal(7,2), comment:null), ] +PREHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378_tmp +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### -POSTHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp +POSTHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### PLAN VECTORIZATION: enabled: true @@ -55,7 +55,7 @@ STAGE PLANS: Map Reduce Map Operator Tree: TableScan - alias: cdpd4378_tmp + alias: vector_decimal64_div_decimal64scalar_tmp Statistics: Num rows: 1000 Data size: 448000 Basic stats: COMPLETE Column stats: COMPLETE TableScan Vectorization: native: true @@ -131,22 +131,22 @@ STAGE PLANS: Processor Tree: ListSink -PREHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp +PREHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378_tmp +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### -POSTHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from cdpd4378_tmp +POSTHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.268767) from vector_decimal64_div_decimal64scalar_tmp POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### 401098.9228951000 -PREHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp +PREHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378_tmp +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### -POSTHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp +POSTHOOK: query: explain vectorization detail select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### PLAN VECTORIZATION: enabled: true @@ -161,7 +161,7 @@ STAGE PLANS: Map Reduce Map Operator Tree: TableScan - alias: cdpd4378_tmp + alias: vector_decimal64_div_decimal64scalar_tmp Statistics: Num rows: 1000 Data size: 448000 Basic stats: COMPLETE Column stats: COMPLETE TableScan Vectorization: native: true @@ -237,12 +237,12 @@ STAGE PLANS: Processor Tree: ListSink -PREHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp +PREHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp PREHOOK: type: QUERY -PREHOOK: Input: default@cdpd4378_tmp +PREHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### -POSTHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from cdpd4378_tmp +POSTHOOK: query: select sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2.2) from vector_decimal64_div_decimal64scalar_tmp POSTHOOK: type: QUERY -POSTHOOK: Input: default@cdpd4378_tmp +POSTHOOK: Input: default@vector_decimal64_div_decimal64scalar_tmp #### A masked pattern was here #### 413636.364000 diff --git a/vector-code-gen/src/org/apache/hadoop/hive/tools/GenVectorCode.java b/vector-code-gen/src/org/apache/hadoop/hive/tools/GenVectorCode.java index 83cd48c578..82fc1415de 100644 --- a/vector-code-gen/src/org/apache/hadoop/hive/tools/GenVectorCode.java +++ b/vector-code-gen/src/org/apache/hadoop/hive/tools/GenVectorCode.java @@ -317,6 +317,7 @@ {"Decimal64ColumnArithmeticDecimal64Column", "Subtract", "-"}, {"Decimal64ColumnDivideDecimal64Scalar", "Divide", "/"}, + {"Decimal64ColumnDivideDecimal64Column", "Divide", "/"}, {"ColumnCompareScalar", "Equal", "long", "long", "=="}, {"ColumnCompareScalar", "Equal", "long", "double", "=="}, @@ -1418,6 +1419,8 @@ private void generate() throws Exception { generateDecimal64ColumnArithmeticDecimal64Column(tdesc); } else if (tdesc[0].equals("Decimal64ColumnDivideDecimal64Scalar")) { generateDecimal64ColumnArithmeticDecimal64Scalar(tdesc); + } else if (tdesc[0].equals("Decimal64ColumnDivideDecimal64Column")) { + generateDecimal64ColumnArithmeticDecimal64Column(tdesc); } else if (tdesc[0].equals("ColumnUnaryMinus")) { generateColumnUnaryMinus(tdesc); } else if (tdesc[0].equals("ColumnUnaryFunc")) {