IMPALA-6635: Add DECIMAL type to Kudu predicates

This patch enables pushing scan predicates on
DECIMAL columns down to Kudu.

Testing:
- Added Planner decimal predicate test to kudu.test
- Added Planner decimal in-list test to kudu-selectivity.test

Change-Id: I2569a9e1d58f1c58884d58633d46348364888ed7
Reviewed-on: http://gerrit.cloudera.org:8080/9578
Reviewed-by: Alex Behm <alex.b...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/6d8ce640
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/6d8ce640
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/6d8ce640

Branch: refs/heads/master
Commit: 6d8ce64020ac8a103f03814c2903f6c5835886c0
Parents: 3839826
Author: Grant Henke <ghe...@cloudera.com>
Authored: Fri Mar 9 15:12:43 2018 -0600
Committer: Impala Public Jenkins <impala-public-jenk...@gerrit.cloudera.org>
Committed: Tue Mar 13 20:31:43 2018 +0000

----------------------------------------------------------------------
 .../java/org/apache/impala/planner/KuduScanNode.java |  6 ++++++
 .../queries/PlannerTest/kudu-selectivity.test        | 14 ++++++++++++++
 .../functional-planner/queries/PlannerTest/kudu.test | 15 +++++++++++++++
 3 files changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/6d8ce640/fe/src/main/java/org/apache/impala/planner/KuduScanNode.java
----------------------------------------------------------------------
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 a02b49b..f60d519 100644
--- a/fe/src/main/java/org/apache/impala/planner/KuduScanNode.java
+++ b/fe/src/main/java/org/apache/impala/planner/KuduScanNode.java
@@ -406,6 +406,11 @@ public class KuduScanNode extends ScanNode {
         }
         break;
       }
+      case DECIMAL: {
+        kuduPredicate = KuduPredicate.newComparisonPredicate(column, op,
+            ((NumericLiteral)literal).getValue());
+        break;
+      }
       default: break;
     }
     if (kuduPredicate == null) return false;
@@ -505,6 +510,7 @@ public class KuduScanNode extends ScanNode {
         }
         break;
       }
+      case DECIMAL: return ((NumericLiteral) e).getValue();
       default:
         Preconditions.checkState(false,
             "Unsupported Kudu type considered for predicate: %s", 
e.getType().toSql());

http://git-wip-us.apache.org/repos/asf/impala/blob/6d8ce640/testdata/workloads/functional-planner/queries/PlannerTest/kudu-selectivity.test
----------------------------------------------------------------------
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/kudu-selectivity.test
 
b/testdata/workloads/functional-planner/queries/PlannerTest/kudu-selectivity.test
index e6c8422..cf3014f 100644
--- 
a/testdata/workloads/functional-planner/queries/PlannerTest/kudu-selectivity.test
+++ 
b/testdata/workloads/functional-planner/queries/PlannerTest/kudu-selectivity.test
@@ -121,6 +121,7 @@ Per-Host Resources: mem-estimate=0B mem-reservation=0B
      mem-estimate=0B mem-reservation=0B
      tuple-ids=0 row-size=124B cardinality=3
 ====
+# Test alltypes in-list predicates.
 select * from functional_kudu.alltypes where
 -- predicates that can be pushed
 tinyint_col in (1, 2) and
@@ -156,6 +157,19 @@ Per-Host Resources: mem-estimate=0B mem-reservation=0B
      mem-estimate=0B mem-reservation=0B
      tuple-ids=0 row-size=97B cardinality=5
 ====
+# Test decimal in-list predicates.
+select * from functional_kudu.decimal_tbl where d1 in (1234, 12345);
+---- PLAN
+F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Per-Host Resources: mem-estimate=0B mem-reservation=0B
+  PLAN-ROOT SINK
+  |  mem-estimate=0B mem-reservation=0B
+  |
+  00:SCAN KUDU [functional_kudu.decimal_tbl]
+     kudu predicates: d1 IN (1234, 12345)
+     mem-estimate=0B mem-reservation=0B
+     tuple-ids=0 row-size=56B cardinality=2
+====
 select * from functional_kudu.alltypes where
 tinyint_col is not null and
 smallint_col is null and

http://git-wip-us.apache.org/repos/asf/impala/blob/6d8ce640/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test
----------------------------------------------------------------------
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test 
b/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test
index 354a6fa..57a08dc 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test
@@ -535,3 +535,18 @@ INSERT INTO KUDU [functional_kudu.jointbl]
 00:SCAN HDFS [functional.alltypes]
    partitions=24/24 files=24 size=478.45KB
 ====
+# Decimal predicate.
+select * from functional_kudu.decimal_tbl where d4 = 0.123456789;
+---- PLAN
+PLAN-ROOT SINK
+|
+00:SCAN KUDU [functional_kudu.decimal_tbl]
+   kudu predicates: d4 = 0.123456789
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+01:EXCHANGE [UNPARTITIONED]
+|
+00:SCAN KUDU [functional_kudu.decimal_tbl]
+   kudu predicates: d4 = 0.123456789
+====
\ No newline at end of file

Reply via email to