You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ra...@apache.org on 2022/06/20 18:15:15 UTC

[hive] branch master updated: HIVE-26208: Exception in Vectorization with Decimal64 to Decimal casting (#3344)

This is an automated email from the ASF dual-hosted git repository.

rameshkumar 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 a694ee7b6da HIVE-26208: Exception in Vectorization with Decimal64 to Decimal casting (#3344)
a694ee7b6da is described below

commit a694ee7b6da82a9d11312d32524bebd70d292a94
Author: scarlin-cloudera <55...@users.noreply.github.com>
AuthorDate: Mon Jun 20 11:15:04 2022 -0700

    HIVE-26208: Exception in Vectorization with Decimal64 to Decimal casting (#3344)
    
    The exception was happening because the code that casts the Decimal64 to
    Decimal was not being added in filtered expressions.
    
    Once this code was added, it caused a regression in check_constraint.q. The
    reason for this was because we do not want to convert Decimal64 to Decimal
    if the expression explicitly handles decimal64 types. A method was added
    to these classes that will prevent the conversion in these cases.
---
 .../Decimal64ColumnArithmeticDecimal64Column.txt   |  7 +++-
 .../Decimal64ColumnArithmeticDecimal64Scalar.txt   |  5 +++
 ...al64ColumnArithmeticDecimal64ScalarUnscaled.txt |  4 ++
 .../ExpressionTemplates/Decimal64ColumnBetween.txt |  5 +++
 .../Decimal64ColumnCompareDecimal64Column.txt      |  7 +++-
 .../Decimal64ColumnCompareDecimal64Scalar.txt      |  7 +++-
 .../Decimal64ColumnDivideDecimal64Column.txt       |  5 +++
 .../Decimal64ColumnDivideDecimal64Scalar.txt       |  5 +++
 .../ExpressionTemplates/Decimal64ColumnScaleUp.txt |  4 ++
 .../Decimal64ScalarArithmeticDecimal64Column.txt   |  7 +++-
 ...al64ScalarArithmeticDecimal64ColumnUnscaled.txt |  5 +++
 .../Decimal64ScalarCompareDecimal64Column.txt      |  7 +++-
 ...FilterDecimal64ColumnCompareDecimal64Column.txt |  7 +++-
 ...FilterDecimal64ColumnCompareDecimal64Scalar.txt |  7 +++-
 ...FilterDecimal64ScalarCompareDecimal64Column.txt |  7 +++-
 .../vector/expressions/CastLongToDecimal64.java    |  5 +++
 .../expressions/ConvertDecimal64ToDecimal.java     |  5 +++
 .../vector/expressions/Decimal64ColumnInList.java  |  5 +++
 .../expressions/FilterDecimal64ColumnBetween.java  |  5 +++
 .../expressions/FilterDecimal64ColumnInList.java   |  5 +++
 .../FilterDecimal64ColumnNotBetween.java           |  5 +++
 .../IfExprDecimal64ColumnDecimal64Column.java      |  7 +++-
 .../IfExprDecimal64ColumnDecimal64Scalar.java      |  5 +++
 .../IfExprDecimal64ScalarDecimal64Column.java      |  5 +++
 .../IfExprDecimal64ScalarDecimal64Scalar.java      |  5 +++
 .../exec/vector/expressions/VectorExpression.java  | 12 +++++-
 .../hive/ql/optimizer/physical/Vectorizer.java     |  7 +++-
 .../test/queries/clientpositive/vector_decimal_7.q | 18 +++++++++
 .../clientpositive/llap/vector_decimal_7.q.out     | 45 ++++++++++++++++++++++
 29 files changed, 211 insertions(+), 12 deletions(-)

diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Column.txt
index 8f6e6be5903..bd11b5ddd1b 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Column.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Column.txt
@@ -177,4 +177,9 @@ public class <ClassName> extends VectorExpression {
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Scalar.txt
index 5a54fd48820..0bf4e155e39 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Scalar.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Scalar.txt
@@ -209,4 +209,9 @@ public class <ClassName> extends VectorExpression {
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64ScalarUnscaled.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64ScalarUnscaled.txt
index 6573611600b..662baa4edc3 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64ScalarUnscaled.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64ScalarUnscaled.txt
@@ -61,4 +61,8 @@ public class <ClassName> extends <ParentClassName> {
         .setUnscaled(true).build();
   }
 
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnBetween.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnBetween.txt
index 279d23231bc..a437c7b40ce 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnBetween.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnBetween.txt
@@ -47,4 +47,9 @@ public class <ClassName> extends <BaseClassName> {
         ", decimal64Left " + leftValue + ", decimalLeft " + writable1.toString() +
         ", decimal64Right " + rightValue + ", decimalRight " + writable2.toString();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Column.txt
index 127c90529ce..ff1597cce80 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Column.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Column.txt
@@ -51,4 +51,9 @@ public class <ClassName> extends <BaseClassName> {
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Scalar.txt
index 06e3321ab65..1a4d59a7399 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Scalar.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Scalar.txt
@@ -63,4 +63,9 @@ public class <ClassName> extends <BaseClassName> {
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt
index 8cea38a3e7b..962a429debb 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt
@@ -265,4 +265,9 @@ public class <ClassName> extends VectorExpression {
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt
index 8b4eaa63d84..c06222c56ac 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt
@@ -263,4 +263,9 @@ public class <ClassName> extends VectorExpression {
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnScaleUp.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnScaleUp.txt
index 6573611600b..662baa4edc3 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnScaleUp.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnScaleUp.txt
@@ -61,4 +61,8 @@ public class <ClassName> extends <ParentClassName> {
         .setUnscaled(true).build();
   }
 
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64Column.txt
index 5eaf694577f..2eba7896cfd 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64Column.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64Column.txt
@@ -208,4 +208,9 @@ public class <ClassName> extends VectorExpression {
             VectorExpressionDescriptor.InputExpressionType.SCALAR,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64ColumnUnscaled.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64ColumnUnscaled.txt
index 7c54409d58b..bdcfce2fa51 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64ColumnUnscaled.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64ColumnUnscaled.txt
@@ -62,4 +62,9 @@ public class <ClassName> extends <ParentClassName> {
             VectorExpressionDescriptor.InputExpressionType.COLUMN)
         .setUnscaled(true).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarCompareDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarCompareDecimal64Column.txt
index 6526e0c45df..2a6582a9673 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarCompareDecimal64Column.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarCompareDecimal64Column.txt
@@ -63,4 +63,9 @@ public class <ClassName> extends <BaseClassName> {
             VectorExpressionDescriptor.InputExpressionType.SCALAR,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Column.txt
index 6af237d600b..95cae531e7d 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Column.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Column.txt
@@ -51,4 +51,9 @@ public class <ClassName> extends <BaseClassName> {
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Scalar.txt
index 65737e819f9..4532d70e0db 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Scalar.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Scalar.txt
@@ -51,4 +51,9 @@ public class <ClassName> extends <BaseClassName> {
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ScalarCompareDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ScalarCompareDecimal64Column.txt
index 5c7d001814a..32d57e938b6 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ScalarCompareDecimal64Column.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ScalarCompareDecimal64Column.txt
@@ -51,4 +51,9 @@ public class <ClassName> extends <BaseClassName> {
             VectorExpressionDescriptor.InputExpressionType.SCALAR,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastLongToDecimal64.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastLongToDecimal64.java
index a474eea80a5..b819f671bfd 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastLongToDecimal64.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastLongToDecimal64.java
@@ -180,4 +180,9 @@ public class CastLongToDecimal64 extends VectorExpression {
             VectorExpressionDescriptor.InputExpressionType.COLUMN);
     return b.build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/ConvertDecimal64ToDecimal.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/ConvertDecimal64ToDecimal.java
index 04a2cba62ab..c3ce423bc93 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/ConvertDecimal64ToDecimal.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/ConvertDecimal64ToDecimal.java
@@ -41,4 +41,9 @@ public class ConvertDecimal64ToDecimal extends FuncLongToDecimal {
   protected void func(DecimalColumnVector outV, LongColumnVector inV, int i) {
     outV.vector[i].deserialize64(inV.vector[i], ((Decimal64ColumnVector) inV).scale);
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/Decimal64ColumnInList.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/Decimal64ColumnInList.java
index 53deaa9ce14..b3ddfab6a52 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/Decimal64ColumnInList.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/Decimal64ColumnInList.java
@@ -62,4 +62,9 @@ public class Decimal64ColumnInList extends LongColumnInList {
     // return null since this will be handled as a special case in VectorizationContext
     return null;
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnBetween.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnBetween.java
index 7a6023739bc..da3e26a2108 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnBetween.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnBetween.java
@@ -65,4 +65,9 @@ public class FilterDecimal64ColumnBetween extends FilterLongColumnBetween {
             VectorExpressionDescriptor.InputExpressionType.SCALAR,
             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnInList.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnInList.java
index a75cdbfaa9e..b788ac85fdb 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnInList.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnInList.java
@@ -65,4 +65,9 @@ public class FilterDecimal64ColumnInList extends FilterLongColumnInList {
     sb.append("]");
     return sb.toString();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnNotBetween.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnNotBetween.java
index d8abf4422c9..d15a8eabbca 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnNotBetween.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnNotBetween.java
@@ -65,4 +65,9 @@ public class FilterDecimal64ColumnNotBetween extends FilterLongColumnNotBetween
             VectorExpressionDescriptor.InputExpressionType.SCALAR,
             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Column.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Column.java
index 0cf2ffe999f..0873d1a04e9 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Column.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Column.java
@@ -52,4 +52,9 @@ public class IfExprDecimal64ColumnDecimal64Column extends IfExprLongColumnLongCo
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
+}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Scalar.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Scalar.java
index 3933fbe0434..60f90c9d952 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Scalar.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Scalar.java
@@ -67,4 +67,9 @@ public class IfExprDecimal64ColumnDecimal64Scalar extends IfExprLongColumnLongSc
             VectorExpressionDescriptor.InputExpressionType.COLUMN,
             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Column.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Column.java
index b7ee9c5d781..7e99321f640 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Column.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Column.java
@@ -68,4 +68,9 @@ public class IfExprDecimal64ScalarDecimal64Column extends IfExprLongScalarLongCo
             VectorExpressionDescriptor.InputExpressionType.SCALAR,
             VectorExpressionDescriptor.InputExpressionType.COLUMN).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Scalar.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Scalar.java
index 2ca02eaea34..8afbfa53c45 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Scalar.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Scalar.java
@@ -72,4 +72,9 @@ public class IfExprDecimal64ScalarDecimal64Scalar extends IfExprLongScalarLongSc
             VectorExpressionDescriptor.InputExpressionType.SCALAR,
             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
   }
+
+  @Override
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return false;
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpression.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpression.java
index 1461f35ff76..1aa7397b738 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpression.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpression.java
@@ -436,4 +436,14 @@ public abstract class VectorExpression implements Serializable {
     }
     return sb.toString();
   }
-}
\ No newline at end of file
+
+  /**
+   * By default vector expressions do not handle decimal64 types and should be
+   * converted into Decimal types if its output cannot handle Decimal64. Decimal64
+   * that only deal with Decimal64 types cannot handle conversions so they should
+   * override this method and return false.
+   */
+  public boolean shouldConvertDecimal64ToDecimal() {
+    return getOutputDataTypePhysicalVariation() == DataTypePhysicalVariation.NONE;
+  }
+}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
index ac9dddecbc6..875fe4c53b7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
@@ -4364,6 +4364,10 @@ public class Vectorizer implements PhysicalPlanResolver {
     ExprNodeDesc predicateExpr = filterDesc.getPredicate();
     VectorExpression vectorPredicateExpr =
         vContext.getVectorExpression(predicateExpr, VectorExpressionDescriptor.Mode.FILTER);
+    if (vectorPredicateExpr != null) {
+      vectorPredicateExpr = fixDecimalDataTypePhysicalVariations(vectorPredicateExpr,
+          vectorPredicateExpr.getChildExpressions(), vContext);
+    }
     vectorFilterDesc.setPredicateExpression(vectorPredicateExpr);
     return OperatorFactory.getVectorOperator(
         filterOp.getCompilationOpContext(), filterDesc,
@@ -4761,8 +4765,7 @@ public class Vectorizer implements PhysicalPlanResolver {
         children[i] = newChild;
       }
     }
-    if (parent.getOutputDataTypePhysicalVariation() == DataTypePhysicalVariation.NONE &&
-      !(parent instanceof ConvertDecimal64ToDecimal)) {
+    if (parent.shouldConvertDecimal64ToDecimal()) {
       boolean inputArgsChanged = false;
       DataTypePhysicalVariation[] dataTypePhysicalVariations = parent.getInputDataTypePhysicalVariations();
       for (int i = 0; i < children.length; i++) {
diff --git a/ql/src/test/queries/clientpositive/vector_decimal_7.q b/ql/src/test/queries/clientpositive/vector_decimal_7.q
new file mode 100644
index 00000000000..267cdf9054d
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/vector_decimal_7.q
@@ -0,0 +1,18 @@
+set hive.mapred.mode=nonstrict;
+set hive.explain.user=false;
+SET hive.vectorized.execution.enabled=true;
+set hive.fetch.task.conversion=none;
+
+DROP TABLE IF EXISTS int_txt;
+
+CREATE TABLE int_txt (`i` int);
+
+LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE int_txt;
+
+select count(*)
+from
+  int_txt
+  where
+         (( 1.0 * i) / ( 1.0 * i)) > 1.2;
+
+DROP TABLE IF EXISTS int_txt;
diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal_7.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal_7.q.out
new file mode 100644
index 00000000000..b87c51195b0
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/vector_decimal_7.q.out
@@ -0,0 +1,45 @@
+PREHOOK: query: DROP TABLE IF EXISTS int_txt
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS int_txt
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE int_txt (`i` int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@int_txt
+POSTHOOK: query: CREATE TABLE int_txt (`i` int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@int_txt
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE int_txt
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@int_txt
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE int_txt
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@int_txt
+PREHOOK: query: select count(*)
+from
+  int_txt
+  where
+         (( 1.0 * i) / ( 1.0 * i)) > 1.2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@int_txt
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*)
+from
+  int_txt
+  where
+         (( 1.0 * i) / ( 1.0 * i)) > 1.2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@int_txt
+#### A masked pattern was here ####
+0
+PREHOOK: query: DROP TABLE IF EXISTS int_txt
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@int_txt
+PREHOOK: Output: default@int_txt
+POSTHOOK: query: DROP TABLE IF EXISTS int_txt
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@int_txt
+POSTHOOK: Output: default@int_txt