You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2019/11/06 03:49:45 UTC
[hive] branch master updated: HIVE-22382 : Support Decimal64 column
division with decimal64 Column (Ramesh Kumar via Gopal V)
This is an automated email from the ASF dual-hosted git repository.
hashutosh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new aac72eb HIVE-22382 : Support Decimal64 column division with decimal64 Column (Ramesh Kumar via Gopal V)
aac72eb is described below
commit aac72eb50c5db5ba509dce4deb1069c4162791c0
Author: Ramesh Kumar Thangarajan <ra...@cloudera.com>
AuthorDate: Thu Oct 24 23:03:00 2019 -0700
HIVE-22382 : Support Decimal64 column division with decimal64 Column (Ramesh Kumar via Gopal V)
Signed-off-by: Ashutosh Chauhan <ha...@apache.org>
---
.../test/resources/testconfiguration.properties | 1 +
...xt => Decimal64ColumnDivideDecimal64Column.txt} | 245 +++++++++++----------
.../Decimal64ColumnDivideDecimal64Scalar.txt | 53 ++---
.../hive/ql/exec/vector/VectorizationContext.java | 5 +-
.../hive/ql/udf/generic/GenericUDFOPDivide.java | 3 +-
.../vector_decimal64_div_decimal64column.q | 6 +
.../vector_decimal64_div_decimal64scalar.q | 16 +-
.../vector_decimal64_div_decimal64column.q.out | 170 ++++++++++++++
.../vector_decimal64_div_decimal64scalar.q.out | 80 +++----
.../clientpositive/llap/vector_decimal_udf.q.out | 12 +-
.../vector_decimal64_div_decimal64column.q.out | 142 ++++++++++++
.../vector_decimal64_div_decimal64scalar.q.out | 80 +++----
.../apache/hadoop/hive/tools/GenVectorCode.java | 3 +
13 files changed, 574 insertions(+), 242 deletions(-)
diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties
index d49563b..e60c4c5 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/Decimal64ColumnDivideDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt
similarity index 52%
copy from ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt
copy to ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt
index d420e22..01da31c 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt
@@ -20,20 +20,20 @@ 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.expressions.NullUtil;
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.io.HiveDecimalWritable;
import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo;
-import org.apache.hadoop.hive.common.type.HiveDecimal;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
import org.apache.hadoop.hive.ql.metadata.HiveException;
/**
- * Generated from template Decimal64ColumnDivideDecimal64Scalar.txt, which covers decimal64 arithmetic
- * expressions between a column and a scalar.
+ * Generated from template Decimal64ColumnArithmeticDecimal64Column.txt, which covers
+ * decimal64 arithmetic expressions between columns.
*/
public class <ClassName> extends VectorExpression {
@@ -43,46 +43,46 @@ public class <ClassName> 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;
- private final long value;
+ private final int colNum1;
+ private final int colNum2;
- public <ClassName>(int colNum, long value, int outputColumnNum) {
+ public <ClassName>(int colNum1, int colNum2, int outputColumnNum) {
super(outputColumnNum);
- this.colNum = colNum;
- this.value = value;
+ this.colNum1 = colNum1;
+ this.colNum2 = colNum2;
}
public <ClassName>() {
super();
// Dummy final assignments.
- colNum = -1;
- value = 0;
+ 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 unchanged
+ * 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);
@@ -113,85 +113,103 @@ public class <ClassName> extends VectorExpression {
super.evaluateChildren(batch);
}
- Decimal64ColumnVector inputColVector = (Decimal64ColumnVector) batch.cols[colNum];
+ Decimal64ColumnVector inputColVector1 = (Decimal64ColumnVector) batch.cols[colNum1];
+ Decimal64ColumnVector inputColVector2 = (Decimal64ColumnVector) batch.cols[colNum2];
Decimal64ColumnVector outputColVector = (Decimal64ColumnVector) batch.cols[outputColumnNum];
int[] sel = batch.selected;
- boolean[] inputIsNull = inputColVector.isNull;
- boolean[] outputIsNull = outputColVector.isNull;
- // We do not need to do a column reset since we are carefully changing the output.
- outputColVector.isRepeating = false;
-
- long[] vector = inputColVector.vector;
+ 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);
- int outputScale = ((DecimalTypeInfo) outputTypeInfo).scale();
- if (value == 0) {
- // Denominator is zero, convert the batch to nulls
- outputColVector.noNulls = false;
- outputColVector.isRepeating = true;
- outputIsNull[0] = true;
- NullUtil.setNullOutputEntriesColScalar(outputColVector, batch.selectedInUse, sel, n);
- return;
- } else if (inputColVector.isRepeating) {
- 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);
- if (Math.abs(result) > outputDecimal64AbsMax) {
- outputIsNull[0] = true;
- outputColVector.noNulls = false;
- } else {
- outputVector[0] = result;
- }
- } else {
- outputIsNull[0] = true;
+ /*
+ * 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;
}
- outputColVector.isRepeating = true;
- return;
- }
-
- if (inputColVector.noNulls) {
+ 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) {
-
- // CONSIDER: For large n, fill n or all of isNull array and use the tighter ELSE loop.
-
- if (!outputColVector.noNulls) {
- for(int j = 0; j != n; j++) {
- final int i = sel[j];
- outputIsNull[i] = false;
- final long result = roundingDivision(vector[i] * powerOfTenTable[outputScale], value);
+ 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 j = 0; j != n; j++) {
- final int i = sel[j];
- final long result = roundingDivision(vector[i] * powerOfTenTable[outputScale], value);
- outputVector[i] = result;
- if (Math.abs(result) > outputDecimal64AbsMax) {
- outputColVector.noNulls = false;
- outputIsNull[i] = true;
- }
- }
- }
+ }
} else {
- if (!outputColVector.noNulls) {
-
- // Assume it is almost always a performance win to fill all of isNull so we can
- // safely reset noNulls.
- Arrays.fill(outputIsNull, false);
- outputColVector.noNulls = true;
+ 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(vector[i] * powerOfTenTable[outputScale], value);
+ final long result = roundingDivision(vector1[i] * scaleFactor, repeatedValue2);
outputVector[i] = result;
if (Math.abs(result) > outputDecimal64AbsMax) {
outputColVector.noNulls = false;
@@ -199,57 +217,48 @@ public class <ClassName> extends VectorExpression {
}
}
}
- } else /* there are NULLs in the inputColVector */ {
-
- /*
- * Do careful maintenance of the outputColVector.noNulls flag.
- */
-
+ } else {
if (batch.selectedInUse) {
for(int j = 0; j != n; j++) {
int i = sel[j];
- 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);
+ 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) {
- outputIsNull[i] = true;
outputColVector.noNulls = false;
+ outputIsNull[i] = true;
}
- } else {
- outputIsNull[i] = true;
- outputColVector.noNulls = false;
}
}
} else {
- System.arraycopy(inputIsNull, 0, outputIsNull, 0, n);
for(int i = 0; i != n; i++) {
- 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);
+ 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) {
- outputIsNull[i] = true;
outputColVector.noNulls = false;
+ outputIsNull[i] = true;
}
- } else {
- outputIsNull[i] = true;
- outputColVector.noNulls = false;
}
}
}
}
+
+ // Currently, we defer division, etc to regular HiveDecimal so we don't do any null
+ // default value setting here.
}
@Override
public String vectorExpressionParameters() {
- DecimalTypeInfo decimalTypeInfo = (DecimalTypeInfo) inputTypeInfos[0];
- HiveDecimalWritable writable = new HiveDecimalWritable();
- writable.deserialize64(value, decimalTypeInfo.scale());
- return getColumnParamString(0, colNum) + ", decimal64Val " + value +
- ", decimalVal " + writable.toString();
+ return getColumnParamString(0, colNum1) + ", " + getColumnParamString(1, colNum2);
}
@Override
@@ -263,6 +272,6 @@ public class <ClassName> extends VectorExpression {
VectorExpressionDescriptor.ArgumentType.DECIMAL_64)
.setInputExpressionTypes(
VectorExpressionDescriptor.InputExpressionType.COLUMN,
- VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
+ VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
}
}
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt
index d420e22..7b2a043 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt
@@ -43,22 +43,22 @@ public class <ClassName> 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 <ClassName> 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 <ClassName> 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 <ClassName> 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 <ClassName> 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 <ClassName> 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 <ClassName> 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 <ClassName> 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 <ClassName> 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 bc19eb5..ce6adc4 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 @@ import com.google.common.annotations.VisibleForTesting;
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 a4c2475..0c0ce68 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 @@ import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
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 0000000..34091f3
--- /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 02c08ab..220bdae 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 0000000..ff2b9e1
--- /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<writeid:bigint,bucketid:int,rowid:bigint>]
+ 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 bb21cd9..b537d5a 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/llap/vector_decimal_udf.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal_udf.q.out
index d149e99..a0436b8 100644
--- a/ql/src/test/results/clientpositive/llap/vector_decimal_udf.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_decimal_udf.q.out
@@ -5776,8 +5776,8 @@ STAGE PLANS:
Select Vectorization:
className: VectorSelectOperator
native: true
- projectedOutputColumnNums: [3]
- selectExpressions: Decimal64ColDivideDecimal64Scalar(col 0:decimal(15,3)/DECIMAL_64, decimal64Val 0, decimalVal 0) -> 3:decimal(18,6)/DECIMAL_64
+ projectedOutputColumnNums: [4]
+ selectExpressions: DecimalColDivideDecimalScalar(col 3:decimal(15,3), val 0)(children: ConvertDecimal64ToDecimal(col 0:decimal(15,3)/DECIMAL_64) -> 3:decimal(15,3)) -> 4:decimal(18,6)
Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: NONE
File Output Operator
compressed: false
@@ -5805,7 +5805,7 @@ STAGE PLANS:
includeColumns: [0]
dataColumns: key:decimal(15,3)/DECIMAL_64, value:int
partitionColumnCount: 0
- scratchColumnTypeNames: [decimal(18,6)/DECIMAL_64]
+ scratchColumnTypeNames: [decimal(15,3), decimal(18,6)]
Stage: Stage-0
Fetch Operator
@@ -7344,8 +7344,8 @@ STAGE PLANS:
Select Vectorization:
className: VectorSelectOperator
native: true
- projectedOutputColumnNums: [5]
- selectExpressions: DecimalColModuloDecimalColumn(col 6:decimal(16,3), col 7:decimal(18,6))(children: ConvertDecimal64ToDecimal(col 3:decimal(16,3)/DECIMAL_64)(children: Decimal64ColAddDecimal64Scalar(col 0:decimal(15,3)/DECIMAL_64, decimal64Val 1000, decimalVal 1) -> 3:decimal(16,3)/DECIMAL_64) -> 6:decimal(16,3), ConvertDecimal64ToDecimal(col 4:decimal(18,6)/DECIMAL_64)(children: Decimal64ColDivideDecimal64Scalar(col 0:decimal(15,3)/DECIMAL_64, decimal64Val 2000, [...]
+ projectedOutputColumnNums: [6]
+ selectExpressions: DecimalColModuloDecimalColumn(col 7:decimal(16,3), col 5:decimal(18,6))(children: ConvertDecimal64ToDecimal(col 3:decimal(16,3)/DECIMAL_64)(children: Decimal64ColAddDecimal64Scalar(col 0:decimal(15,3)/DECIMAL_64, decimal64Val 1000, decimalVal 1) -> 3:decimal(16,3)/DECIMAL_64) -> 7:decimal(16,3), DecimalColDivideDecimalScalar(col 4:decimal(15,3), val 2)(children: ConvertDecimal64ToDecimal(col 0:decimal(15,3)/DECIMAL_64) -> 4:decimal(15,3)) -> 5:d [...]
Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: NONE
File Output Operator
compressed: false
@@ -7373,7 +7373,7 @@ STAGE PLANS:
includeColumns: [0]
dataColumns: key:decimal(15,3)/DECIMAL_64, value:int
partitionColumnCount: 0
- scratchColumnTypeNames: [decimal(16,3)/DECIMAL_64, decimal(18,6)/DECIMAL_64, decimal(18,6), decimal(16,3), decimal(18,6)]
+ scratchColumnTypeNames: [decimal(16,3)/DECIMAL_64, decimal(15,3), decimal(18,6), decimal(18,6), decimal(16,3)]
Stage: Stage-0
Fetch Operator
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 0000000..ac140a3
--- /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<writeid:bigint,bucketid:int,rowid:bigint>]
+ 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 e080068..0a8c0f3 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 83cd48c..82fc141 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 @@ public class GenVectorCode extends Task {
{"Decimal64ColumnArithmeticDecimal64Column", "Subtract", "-"},
{"Decimal64ColumnDivideDecimal64Scalar", "Divide", "/"},
+ {"Decimal64ColumnDivideDecimal64Column", "Divide", "/"},
{"ColumnCompareScalar", "Equal", "long", "long", "=="},
{"ColumnCompareScalar", "Equal", "long", "double", "=="},
@@ -1418,6 +1419,8 @@ public class GenVectorCode extends Task {
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")) {