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