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

csringhofer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit e8ebf0be67828b855d4533c07ef544f85897ec62
Author: Peter Rozsa <[email protected]>
AuthorDate: Mon Aug 22 11:19:24 2022 +0200

    IMPALA-11496: Push down date literals to Kudu scanner
    
    This change enables creating, and pushing down Kudu
    predicates from DATE type. Kudu planner testcases
    added for DATE, BIGINT, FLOAT, DOUBLE types to
    cover all supported type's predicate creation.
    
    Change-Id: I4f323d23df3a92361390f9da387182db3f3bde3e
    Reviewed-on: http://gerrit.cloudera.org:8080/18898
    Reviewed-by: Impala Public Jenkins <[email protected]>
    Tested-by: Impala Public Jenkins <[email protected]>
---
 .../org/apache/impala/planner/KuduScanNode.java    | 12 +++-
 .../queries/PlannerTest/kudu.test                  | 68 ++++++++++++++++++++++
 2 files changed, 77 insertions(+), 3 deletions(-)

diff --git a/fe/src/main/java/org/apache/impala/planner/KuduScanNode.java 
b/fe/src/main/java/org/apache/impala/planner/KuduScanNode.java
index 6663460ae..65f8c5a05 100644
--- a/fe/src/main/java/org/apache/impala/planner/KuduScanNode.java
+++ b/fe/src/main/java/org/apache/impala/planner/KuduScanNode.java
@@ -29,8 +29,8 @@ import java.util.Set;
 import org.apache.impala.analysis.Analyzer;
 import org.apache.impala.analysis.BinaryPredicate;
 import org.apache.impala.analysis.BoolLiteral;
+import org.apache.impala.analysis.DateLiteral;
 import org.apache.impala.analysis.Expr;
-import org.apache.impala.analysis.ExprSubstitutionMap;
 import org.apache.impala.analysis.InPredicate;
 import org.apache.impala.analysis.IsNullPredicate;
 import org.apache.impala.analysis.LiteralExpr;
@@ -567,14 +567,20 @@ public class KuduScanNode extends ScanNode {
         }
         break;
       }
+      case DATE:
+        kuduPredicate = KuduPredicate.newComparisonPredicate(column, op,
+            ((DateLiteral)literal).getValue());
+        break;
       case DECIMAL: {
         kuduPredicate = KuduPredicate.newComparisonPredicate(column, op,
             ((NumericLiteral)literal).getValue());
         break;
       }
-      default: break;
+      default:
+        //All supported types are covered, should not reach default case
+        Preconditions.checkState(false);
     }
-    if (kuduPredicate == null) return false;
+    Preconditions.checkState(kuduPredicate != null);
 
     kuduConjuncts_.add(predicate);
     kuduPredicates_.add(kuduPredicate);
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test 
b/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test
index 6bdcc41b9..7d5a3b3dc 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test
@@ -712,3 +712,71 @@ PLAN-ROOT SINK
    kudu predicates: l_orderkey = 1, l_partkey = 1, l_suppkey = 1
    row-size=0B cardinality=1
 ====
+# DATE predicate.
+select * from functional_kudu.date_tbl where date_col = DATE "1970-01-01";
+---- PLAN
+PLAN-ROOT SINK
+|
+00:SCAN KUDU [functional_kudu.date_tbl]
+   kudu predicates: date_col = DATE '1970-01-01'
+   row-size=12B cardinality=1
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+01:EXCHANGE [UNPARTITIONED]
+|
+00:SCAN KUDU [functional_kudu.date_tbl]
+   kudu predicates: date_col = DATE '1970-01-01'
+   row-size=12B cardinality=1
+====
+# BIGINT predicate.
+select * from functional_kudu.alltypes where bigint_col = 1;
+---- PLAN
+PLAN-ROOT SINK
+|
+00:SCAN KUDU [functional_kudu.alltypes]
+   kudu predicates: bigint_col = 1
+   row-size=97B cardinality=730
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+01:EXCHANGE [UNPARTITIONED]
+|
+00:SCAN KUDU [functional_kudu.alltypes]
+   kudu predicates: bigint_col = 1
+   row-size=97B cardinality=730
+====
+# FLOAT predicate.
+select * from functional_kudu.alltypes where float_col = 1.0;
+---- PLAN
+PLAN-ROOT SINK
+|
+00:SCAN KUDU [functional_kudu.alltypes]
+   kudu predicates: float_col = 1.0
+   row-size=97B cardinality=730
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+01:EXCHANGE [UNPARTITIONED]
+|
+00:SCAN KUDU [functional_kudu.alltypes]
+   kudu predicates: float_col = 1.0
+   row-size=97B cardinality=730
+====
+# DOUBLE predicate.
+select * from functional_kudu.alltypes where double_col = 1.0;
+---- PLAN
+PLAN-ROOT SINK
+|
+00:SCAN KUDU [functional_kudu.alltypes]
+   kudu predicates: double_col = 1.0
+   row-size=97B cardinality=730
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+01:EXCHANGE [UNPARTITIONED]
+|
+00:SCAN KUDU [functional_kudu.alltypes]
+   kudu predicates: double_col = 1.0
+   row-size=97B cardinality=730
+====
\ No newline at end of file

Reply via email to