IMPALA-3644 Make predicate order deterministic This adds a tie-break to make sure that we sort predicates in a deterministic order on Java 7 and 8. This was suggested by Alex in IMPALA-3644.
There are still three broken tests when run in Java 8, but it seems best to address them in a subsequent change. Change-Id: Id11010bfeaff368869e6d430eeb4773ddf41faff Reviewed-on: http://gerrit.cloudera.org:8080/4671 Reviewed-by: Jim Apple <jbap...@cloudera.com> Reviewed-by: Matthew Jacobs <m...@cloudera.com> Tested-by: Internal Jenkins Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/1a5c43ef Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/1a5c43ef Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/1a5c43ef Branch: refs/heads/hadoop-next Commit: 1a5c43ef5e1f66a3b64fe2e2c382605337aaaab9 Parents: db5de41 Author: Lars Volker <l...@cloudera.com> Authored: Wed Oct 5 10:39:00 2016 -0700 Committer: Internal Jenkins <cloudera-hud...@gerrit.cloudera.org> Committed: Fri Oct 14 22:04:30 2016 +0000 ---------------------------------------------------------------------- .../org/apache/impala/planner/PlanNode.java | 6 + .../queries/PlannerTest/analytic-fns.test | 8 +- .../queries/PlannerTest/conjunct-ordering.test | 2 +- .../queries/PlannerTest/data-source-tables.test | 6 +- .../queries/PlannerTest/hbase.test | 8 +- .../queries/PlannerTest/inline-view-limit.test | 10 +- .../queries/PlannerTest/inline-view.test | 4 +- .../queries/PlannerTest/join-order.test | 28 +-- .../queries/PlannerTest/joins.test | 60 +++---- .../queries/PlannerTest/kudu-update.test | 4 +- .../queries/PlannerTest/kudu.test | 10 +- .../queries/PlannerTest/lineage.test | 2 +- .../queries/PlannerTest/nested-collections.test | 4 +- .../queries/PlannerTest/outer-joins.test | 10 +- .../PlannerTest/predicate-propagation.test | 160 ++++++++--------- .../PlannerTest/runtime-filter-propagation.test | 42 ++--- .../queries/PlannerTest/subquery-rewrite.test | 38 ++-- .../queries/PlannerTest/tpcds-all.test | 60 +++---- .../queries/PlannerTest/tpch-all.test | 172 +++++++++---------- .../queries/PlannerTest/tpch-kudu.test | 28 +-- .../queries/PlannerTest/tpch-nested.test | 64 +++---- .../queries/PlannerTest/tpch-views.test | 52 +++--- .../queries/PlannerTest/union.test | 4 +- 23 files changed, 394 insertions(+), 388 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/fe/src/main/java/org/apache/impala/planner/PlanNode.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/org/apache/impala/planner/PlanNode.java b/fe/src/main/java/org/apache/impala/planner/PlanNode.java index 3350364..4686e2c 100644 --- a/fe/src/main/java/org/apache/impala/planner/PlanNode.java +++ b/fe/src/main/java/org/apache/impala/planner/PlanNode.java @@ -702,6 +702,12 @@ abstract public class PlanNode extends TreeNode<PlanNode> { if (cost < smallestCost) { smallestCost = cost; bestConjunct = e; + } else if (cost == smallestCost) { + // Break ties based on toSql() to get a consistent display in explain plans. + if (e.toSql().compareTo(bestConjunct.toSql()) < 0) { + smallestCost = cost; + bestConjunct = e; + } } } http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test b/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test index a62e21d..0ef95b0 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test @@ -1248,7 +1248,7 @@ where v.b != v.c ---- PLAN 07:SELECT -| predicates: bigint_col > 10, min(int_col) < 1, max(int_col) < 2, count(int_col) < 3, sum(int_col) < 4, avg(int_col) < 5, min(int_col) != count(int_col), min(int_col) != avg(int_col), max(int_col) != count(int_col), count(int_col) < bigint_col + 3, sum(int_col) < bigint_col + 4, min(int_col) < bigint_col + 1, max(int_col) < bigint_col + 2, avg(int_col) < bigint_col + 5 +| predicates: min(int_col) < 1, max(int_col) < 2, bigint_col > 10, count(int_col) < 3, sum(int_col) < 4, avg(int_col) < 5, min(int_col) != count(int_col), min(int_col) != avg(int_col), max(int_col) != count(int_col), count(int_col) < bigint_col + 3, sum(int_col) < bigint_col + 4, min(int_col) < bigint_col + 1, max(int_col) < bigint_col + 2, avg(int_col) < bigint_col + 5 | 06:ANALYTIC | functions: min(int_col) @@ -1277,10 +1277,10 @@ where | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB - predicates: int_col >= 5, int_col <= 10 + predicates: int_col <= 10, int_col >= 5 ---- DISTRIBUTEDPLAN 07:SELECT -| predicates: bigint_col > 10, min(int_col) < 1, max(int_col) < 2, count(int_col) < 3, sum(int_col) < 4, avg(int_col) < 5, min(int_col) != count(int_col), min(int_col) != avg(int_col), max(int_col) != count(int_col), count(int_col) < bigint_col + 3, sum(int_col) < bigint_col + 4, min(int_col) < bigint_col + 1, max(int_col) < bigint_col + 2, avg(int_col) < bigint_col + 5 +| predicates: min(int_col) < 1, max(int_col) < 2, bigint_col > 10, count(int_col) < 3, sum(int_col) < 4, avg(int_col) < 5, min(int_col) != count(int_col), min(int_col) != avg(int_col), max(int_col) != count(int_col), count(int_col) < bigint_col + 3, sum(int_col) < bigint_col + 4, min(int_col) < bigint_col + 1, max(int_col) < bigint_col + 2, avg(int_col) < bigint_col + 5 | 06:ANALYTIC | functions: min(int_col) @@ -1315,7 +1315,7 @@ where | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB - predicates: int_col >= 5, int_col <= 10 + predicates: int_col <= 10, int_col >= 5 ==== # test predicate propagation onto and through analytic nodes # TODO: allow AnalyticEvalNode to apply a < 20 http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test b/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test index 1dc6a3e..29e1864 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test @@ -45,7 +45,7 @@ where a.int_col = a.tinyint_col and ---- PLAN 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB - predicates: a.int_col = a.tinyint_col, (CASE a.tinyint_col WHEN 0 THEN TRUE WHEN 1 THEN TRUE WHEN 2 THEN TRUE ELSE FALSE END), (CASE a.int_col WHEN 0 THEN TRUE WHEN 1 THEN TRUE WHEN 2 THEN TRUE ELSE FALSE END) + predicates: a.int_col = a.tinyint_col, (CASE a.int_col WHEN 0 THEN TRUE WHEN 1 THEN TRUE WHEN 2 THEN TRUE ELSE FALSE END), (CASE a.tinyint_col WHEN 0 THEN TRUE WHEN 1 THEN TRUE WHEN 2 THEN TRUE ELSE FALSE END) ==== # Check that a LIKE with only leading/trailing wildcards costs less then LIKE with # non-leading/trailing wildcards. http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/data-source-tables.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/data-source-tables.test b/testdata/workloads/functional-planner/queries/PlannerTest/data-source-tables.test index a7bdf36..5662f5d 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/data-source-tables.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/data-source-tables.test @@ -24,7 +24,7 @@ where 10 > int_col and ---- PLAN 00:SCAN DATA SOURCE [functional.alltypes_datasource] data source predicates: 10 > int_col, string_col != 'Foo' -predicates: 5 > double_col, NOT TRUE = bool_col, NOT 5.0 = double_col, string_col != 'Bar' +predicates: 5 > double_col, NOT 5.0 = double_col, NOT TRUE = bool_col, string_col != 'Bar' ==== # The 3rd predicate is not in a form that can be offered to the data source so # the 4th will be offered and accepted instead. @@ -57,7 +57,7 @@ where a.tinyint_col = a.smallint_col and a.int_col = a.bigint_col |--predicates: b.id = b.int_col, b.id = b.bigint_col | 00:SCAN DATA SOURCE [functional.alltypes_datasource a] -predicates: a.id = a.int_col, a.tinyint_col = a.smallint_col, a.int_col = a.bigint_col, a.id = a.tinyint_col +predicates: a.id = a.int_col, a.id = a.tinyint_col, a.int_col = a.bigint_col, a.tinyint_col = a.smallint_col ==== # Tests that <=>, IS DISTINCT FROM, and IS NOT DISTINCT FROM all can be offered to the # data source. @@ -71,5 +71,5 @@ and bigint_col is not distinct from 5 ---- PLAN 00:SCAN DATA SOURCE [functional.alltypes_datasource] data source predicates: id IS NOT DISTINCT FROM 1, tinyint_col IS DISTINCT FROM 2, int_col IS NOT DISTINCT FROM 4 -predicates: bool_col IS NOT DISTINCT FROM TRUE, smallint_col IS DISTINCT FROM 3, bigint_col IS NOT DISTINCT FROM 5 +predicates: bigint_col IS NOT DISTINCT FROM 5, bool_col IS NOT DISTINCT FROM TRUE, smallint_col IS DISTINCT FROM 3 ==== http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/hbase.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/hbase.test b/testdata/workloads/functional-planner/queries/PlannerTest/hbase.test index a8841be..57b2cce 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/hbase.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/hbase.test @@ -287,19 +287,19 @@ where string_col >= '4' and string_col != '2' and date_string_col = '04/03/09' ---- PLAN 00:SCAN HBASE [functional_hbase.alltypessmall] hbase filters: - d:string_col GREATER_OR_EQUAL '4' d:string_col NOT_EQUAL '2' + d:string_col GREATER_OR_EQUAL '4' d:date_string_col EQUAL '04/03/09' - predicates: string_col >= '4', string_col != '2', date_string_col = '04/03/09' + predicates: string_col != '2', string_col >= '4', date_string_col = '04/03/09' ---- DISTRIBUTEDPLAN 01:EXCHANGE [UNPARTITIONED] | 00:SCAN HBASE [functional_hbase.alltypessmall] hbase filters: - d:string_col GREATER_OR_EQUAL '4' d:string_col NOT_EQUAL '2' + d:string_col GREATER_OR_EQUAL '4' d:date_string_col EQUAL '04/03/09' - predicates: string_col >= '4', string_col != '2', date_string_col = '04/03/09' + predicates: string_col != '2', string_col >= '4', date_string_col = '04/03/09' ==== # mix of predicates and functional_hbase. filters select * from functional_hbase.alltypessmall where string_col = '4' and tinyint_col = 5 http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/inline-view-limit.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/inline-view-limit.test b/testdata/workloads/functional-planner/queries/PlannerTest/inline-view-limit.test index 8d3a816..79f75b6 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/inline-view-limit.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/inline-view-limit.test @@ -530,7 +530,7 @@ where a.id > 10 and b.id > 20 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB - predicates: id != 1, functional.alltypes.id > 10 + predicates: functional.alltypes.id > 10, id != 1 ==== # Test value transfers for outer-joined inline views with a limit. # Value transfer a.id->b.id is legal. @@ -557,7 +557,7 @@ where a.id > 10 and b.id > 20 | 02:SCAN HDFS [functional.alltypessmall] partitions=4/4 files=4 size=6.32KB - predicates: functional.alltypessmall.id != 1, id != 2, functional.alltypessmall.id > 10, functional.alltypessmall.id > 20 + predicates: functional.alltypessmall.id != 1, functional.alltypessmall.id > 10, functional.alltypessmall.id > 20, id != 2 runtime filters: RF000 -> id ==== # Test value transfers for outer-joined inline views with a limit. @@ -577,7 +577,7 @@ where a.id > 10 and b.id > 20 | |--01:SCAN HDFS [functional.alltypessmall] | partitions=4/4 files=4 size=6.32KB -| predicates: id != 2, functional.alltypessmall.id > 20 +| predicates: functional.alltypessmall.id > 20, id != 2 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB @@ -610,7 +610,7 @@ where a.id > 10 and b.id > 20 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB - predicates: id != 1, functional.alltypes.id != 2, functional.alltypes.id > 10, functional.alltypes.id > 20 + predicates: functional.alltypes.id != 2, functional.alltypes.id > 10, functional.alltypes.id > 20, id != 1 runtime filters: RF000 -> id ==== # IMPALA-3450: limits on select nodes are reflected in cardinality estimates. The test for @@ -625,4 +625,4 @@ select * from (select * from functional.alltypes limit 100) v where id < 10 limi 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB limit: 100 -==== \ No newline at end of file +==== http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/inline-view.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/inline-view.test b/testdata/workloads/functional-planner/queries/PlannerTest/inline-view.test index 9eb32d4..fe6ade8 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/inline-view.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/inline-view.test @@ -195,7 +195,7 @@ and b.id + 15 = 27 | |--01:SCAN HDFS [functional.alltypessmall] | partitions=2/4 files=2 size=3.17KB -| predicates: functional.alltypessmall.string_col = '15', functional.alltypessmall.id + 15 = 27 +| predicates: functional.alltypessmall.id + 15 = 27, functional.alltypessmall.string_col = '15' | 00:SCAN HDFS [functional.alltypesagg] partitions=5/11 files=5 size=372.38KB @@ -213,7 +213,7 @@ and b.id + 15 = 27 | | | 01:SCAN HDFS [functional.alltypessmall] | partitions=2/4 files=2 size=3.17KB -| predicates: functional.alltypessmall.string_col = '15', functional.alltypessmall.id + 15 = 27 +| predicates: functional.alltypessmall.id + 15 = 27, functional.alltypessmall.string_col = '15' | 03:EXCHANGE [HASH(id,int_col)] | http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/join-order.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/join-order.test b/testdata/workloads/functional-planner/queries/PlannerTest/join-order.test index 44c2c24..e1951e0 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/join-order.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/join-order.test @@ -243,8 +243,8 @@ limit 100 | runtime filters: RF000 -> n_regionkey | 08:HASH JOIN [INNER JOIN] -| hash predicates: l_suppkey = s_suppkey, c_nationkey = s_nationkey -| runtime filters: RF002 <- s_suppkey, RF003 <- s_nationkey +| hash predicates: c_nationkey = s_nationkey, l_suppkey = s_suppkey +| runtime filters: RF002 <- s_nationkey, RF003 <- s_suppkey | |--03:SCAN HDFS [tpch.supplier s] | partitions=1/1 files=1 size=1.33MB @@ -256,7 +256,7 @@ limit 100 | |--00:SCAN HDFS [tpch.customer] | partitions=1/1 files=1 size=23.08MB -| runtime filters: RF001 -> tpch.customer.c_nationkey, RF003 -> c_nationkey +| runtime filters: RF001 -> tpch.customer.c_nationkey, RF002 -> c_nationkey | 06:HASH JOIN [INNER JOIN] | hash predicates: l_orderkey = o_orderkey @@ -264,12 +264,12 @@ limit 100 | |--01:SCAN HDFS [tpch.orders o] | partitions=1/1 files=1 size=162.56MB -| predicates: o_orderdate >= '1994-01-01', o_orderdate < '1995-01-01' +| predicates: o_orderdate < '1995-01-01', o_orderdate >= '1994-01-01' | runtime filters: RF004 -> o_custkey | 02:SCAN HDFS [tpch.lineitem l] partitions=1/1 files=1 size=718.94MB - runtime filters: RF002 -> l_suppkey, RF005 -> l_orderkey + runtime filters: RF003 -> l_suppkey, RF005 -> l_orderkey ---- DISTRIBUTEDPLAN 20:MERGING-EXCHANGE [UNPARTITIONED] | order by: round(sum(l_extendedprice * (1 - l_discount)), 5) DESC @@ -309,8 +309,8 @@ limit 100 | runtime filters: RF000 -> n_regionkey | 08:HASH JOIN [INNER JOIN, BROADCAST] -| hash predicates: l_suppkey = s_suppkey, c_nationkey = s_nationkey -| runtime filters: RF002 <- s_suppkey, RF003 <- s_nationkey +| hash predicates: c_nationkey = s_nationkey, l_suppkey = s_suppkey +| runtime filters: RF002 <- s_nationkey, RF003 <- s_suppkey | |--15:EXCHANGE [BROADCAST] | | @@ -326,7 +326,7 @@ limit 100 | | | 00:SCAN HDFS [tpch.customer] | partitions=1/1 files=1 size=23.08MB -| runtime filters: RF001 -> tpch.customer.c_nationkey, RF003 -> c_nationkey +| runtime filters: RF001 -> tpch.customer.c_nationkey, RF002 -> c_nationkey | 06:HASH JOIN [INNER JOIN, BROADCAST] | hash predicates: l_orderkey = o_orderkey @@ -336,12 +336,12 @@ limit 100 | | | 01:SCAN HDFS [tpch.orders o] | partitions=1/1 files=1 size=162.56MB -| predicates: o_orderdate >= '1994-01-01', o_orderdate < '1995-01-01' +| predicates: o_orderdate < '1995-01-01', o_orderdate >= '1994-01-01' | runtime filters: RF004 -> o_custkey | 02:SCAN HDFS [tpch.lineitem l] partitions=1/1 files=1 size=718.94MB - runtime filters: RF002 -> l_suppkey, RF005 -> l_orderkey + runtime filters: RF003 -> l_suppkey, RF005 -> l_orderkey ==== # Q2 - Minimum Cost Supplier Query select @@ -482,7 +482,7 @@ limit 10 | |--00:SCAN HDFS [tpch.orders] | partitions=1/1 files=1 size=162.56MB -| predicates: o_orderdate >= '1993-07-01', o_orderdate < '1993-10-01' +| predicates: o_orderdate < '1993-10-01', o_orderdate >= '1993-07-01' | 01:SCAN HDFS [tpch.lineitem] partitions=1/1 files=1 size=718.94MB @@ -514,7 +514,7 @@ limit 10 | | | 00:SCAN HDFS [tpch.orders] | partitions=1/1 files=1 size=162.56MB -| predicates: o_orderdate >= '1993-07-01', o_orderdate < '1993-10-01' +| predicates: o_orderdate < '1993-10-01', o_orderdate >= '1993-07-01' | 05:EXCHANGE [HASH(l_orderkey)] | @@ -1335,7 +1335,7 @@ where a.int_col = b.int_col and b.bigint_col < a.tinyint_col ---- PLAN 04:HASH JOIN [LEFT OUTER JOIN] | hash predicates: c.id = b.id -| other predicates: a.int_col = b.int_col, b.tinyint_col = c.tinyint_col, b.bool_col != c.bool_col, b.bigint_col < a.tinyint_col +| other predicates: a.int_col = b.int_col, b.bool_col != c.bool_col, b.tinyint_col = c.tinyint_col, b.bigint_col < a.tinyint_col | runtime filters: RF000 <- b.tinyint_col | |--03:HASH JOIN [RIGHT OUTER JOIN] @@ -1365,7 +1365,7 @@ where b.tinyint_col = c.tinyint_col and b.bool_col != c.bool_col ---- PLAN 04:HASH JOIN [LEFT OUTER JOIN] | hash predicates: c.id = b.id -| other predicates: b.tinyint_col = c.tinyint_col, b.bool_col != c.bool_col +| other predicates: b.bool_col != c.bool_col, b.tinyint_col = c.tinyint_col | runtime filters: RF000 <- b.tinyint_col | |--03:HASH JOIN [INNER JOIN] http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/joins.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/joins.test b/testdata/workloads/functional-planner/queries/PlannerTest/joins.test index b5b36a0..260ba21 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/joins.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/joins.test @@ -173,7 +173,7 @@ and (b.double_col * c.tinyint_col > 1000 or c.tinyint_col < 1000) ---- PLAN 04:HASH JOIN [LEFT OUTER JOIN] | hash predicates: c.id = a.id, c.string_col = b.string_col -| other predicates: a.tinyint_col = 15, b.string_col = '15', a.day >= 6, b.month > 2, a.tinyint_col + b.tinyint_col < 15, a.float_col - c.double_col < 0, (b.double_col * c.tinyint_col > 1000 OR c.tinyint_col < 1000) +| other predicates: a.tinyint_col = 15, b.string_col = '15', a.day >= 6, b.month > 2, a.float_col - c.double_col < 0, a.tinyint_col + b.tinyint_col < 15, (b.double_col * c.tinyint_col > 1000 OR c.tinyint_col < 1000) | |--03:HASH JOIN [FULL OUTER JOIN] | | hash predicates: a.id = b.id, a.int_col = b.int_col @@ -193,7 +193,7 @@ and (b.double_col * c.tinyint_col > 1000 or c.tinyint_col < 1000) | 04:HASH JOIN [LEFT OUTER JOIN, PARTITIONED] | hash predicates: c.id = a.id, c.string_col = b.string_col -| other predicates: a.tinyint_col = 15, b.string_col = '15', a.day >= 6, b.month > 2, a.tinyint_col + b.tinyint_col < 15, a.float_col - c.double_col < 0, (b.double_col * c.tinyint_col > 1000 OR c.tinyint_col < 1000) +| other predicates: a.tinyint_col = 15, b.string_col = '15', a.day >= 6, b.month > 2, a.float_col - c.double_col < 0, a.tinyint_col + b.tinyint_col < 15, (b.double_col * c.tinyint_col > 1000 OR c.tinyint_col < 1000) | |--08:EXCHANGE [HASH(a.id,b.string_col)] | | @@ -681,8 +681,8 @@ inner join [shuffle] on (a.int_col = b.int_col and b.bool_col = a.bool_col) ---- PLAN 03:HASH JOIN [INNER JOIN] -| hash predicates: a.int_col = int_col, a.bool_col = bool_col -| runtime filters: RF000 <- int_col, RF001 <- bool_col +| hash predicates: a.bool_col = bool_col, a.int_col = int_col +| runtime filters: RF000 <- bool_col, RF001 <- int_col | |--02:AGGREGATE [FINALIZE] | | output: count(*) @@ -693,13 +693,13 @@ on (a.int_col = b.int_col and b.bool_col = a.bool_col) | 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB - runtime filters: RF000 -> a.int_col, RF001 -> a.bool_col + runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col ---- DISTRIBUTEDPLAN 07:EXCHANGE [UNPARTITIONED] | 03:HASH JOIN [INNER JOIN, PARTITIONED] -| hash predicates: a.int_col = int_col, a.bool_col = bool_col -| runtime filters: RF000 <- int_col, RF001 <- bool_col +| hash predicates: a.bool_col = bool_col, a.int_col = int_col +| runtime filters: RF000 <- bool_col, RF001 <- int_col | |--05:AGGREGATE [FINALIZE] | | output: count:merge(*) @@ -718,7 +718,7 @@ on (a.int_col = b.int_col and b.bool_col = a.bool_col) | 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB - runtime filters: RF000 -> a.int_col, RF001 -> a.bool_col + runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col ==== # Tests that the partitioned join between b and c exploits the existing # data partition of its lhs and rhs inputs. @@ -731,12 +731,12 @@ inner join [shuffle] on (b.int_col = c.int_col and c.bool_col = b.bool_col) ---- PLAN 05:HASH JOIN [INNER JOIN] -| hash predicates: b.int_col = a.int_col, b.bool_col = a.bool_col -| runtime filters: RF000 <- a.int_col, RF001 <- a.bool_col +| hash predicates: b.bool_col = a.bool_col, b.int_col = a.int_col +| runtime filters: RF000 <- a.bool_col, RF001 <- a.int_col | |--04:HASH JOIN [INNER JOIN] -| | hash predicates: a.int_col = int_col, a.bool_col = bool_col -| | runtime filters: RF002 <- int_col, RF003 <- bool_col +| | hash predicates: a.bool_col = bool_col, a.int_col = int_col +| | runtime filters: RF002 <- bool_col, RF003 <- int_col | | | |--03:AGGREGATE [FINALIZE] | | | output: count(*) @@ -747,21 +747,21 @@ on (b.int_col = c.int_col and c.bool_col = b.bool_col) | | | 00:SCAN HDFS [functional.alltypes a] | partitions=24/24 files=24 size=478.45KB -| runtime filters: RF002 -> a.int_col, RF003 -> a.bool_col +| runtime filters: RF002 -> a.bool_col, RF003 -> a.int_col | 01:SCAN HDFS [functional.alltypes b] partitions=24/24 files=24 size=478.45KB - runtime filters: RF000 -> b.int_col, RF001 -> b.bool_col + runtime filters: RF000 -> b.bool_col, RF001 -> b.int_col ---- DISTRIBUTEDPLAN 10:EXCHANGE [UNPARTITIONED] | 05:HASH JOIN [INNER JOIN, PARTITIONED] -| hash predicates: b.int_col = a.int_col, b.bool_col = a.bool_col -| runtime filters: RF000 <- a.int_col, RF001 <- a.bool_col +| hash predicates: b.bool_col = a.bool_col, b.int_col = a.int_col +| runtime filters: RF000 <- a.bool_col, RF001 <- a.int_col | |--04:HASH JOIN [INNER JOIN, PARTITIONED] -| | hash predicates: a.int_col = int_col, a.bool_col = bool_col -| | runtime filters: RF002 <- int_col, RF003 <- bool_col +| | hash predicates: a.bool_col = bool_col, a.int_col = int_col +| | runtime filters: RF002 <- bool_col, RF003 <- int_col | | | |--07:AGGREGATE [FINALIZE] | | | output: count:merge(*) @@ -780,13 +780,13 @@ on (b.int_col = c.int_col and c.bool_col = b.bool_col) | | | 00:SCAN HDFS [functional.alltypes a] | partitions=24/24 files=24 size=478.45KB -| runtime filters: RF002 -> a.int_col, RF003 -> a.bool_col +| runtime filters: RF002 -> a.bool_col, RF003 -> a.int_col | 09:EXCHANGE [HASH(b.int_col,b.bool_col)] | 01:SCAN HDFS [functional.alltypes b] partitions=24/24 files=24 size=478.45KB - runtime filters: RF000 -> b.int_col, RF001 -> b.bool_col + runtime filters: RF000 -> b.bool_col, RF001 -> b.int_col ==== # Tests that all predicates from the On-clause are applied (IMPALA-805) # and that slot equivalences are enforced at lowest possible plan node. @@ -807,7 +807,7 @@ where a.tinyint_col = a.smallint_col and a.int_col = a.bigint_col | |--00:SCAN HDFS [functional.alltypes a] | partitions=24/24 files=24 size=478.45KB -| predicates: a.id = a.int_col, a.tinyint_col = a.smallint_col, a.int_col = a.bigint_col, a.id = a.tinyint_col +| predicates: a.id = a.int_col, a.id = a.tinyint_col, a.int_col = a.bigint_col, a.tinyint_col = a.smallint_col | 01:SCAN HDFS [functional.alltypes b] partitions=24/24 files=24 size=478.45KB @@ -827,16 +827,16 @@ and b.string_col = a.string_col and b.date_string_col = a.string_col where a.tinyint_col = a.smallint_col and a.int_col = a.bigint_col ---- PLAN 02:HASH JOIN [RIGHT OUTER JOIN] -| hash predicates: b.id = a.id, b.int_col = a.id, b.id = a.int_col, b.bigint_col = a.id, b.id = a.tinyint_col, b.id = a.smallint_col, b.id = a.bigint_col, b.string_col = a.string_col, b.date_string_col = a.string_col -| runtime filters: RF000 <- a.id, RF001 <- a.id, RF002 <- a.int_col, RF003 <- a.id, RF004 <- a.tinyint_col, RF005 <- a.smallint_col, RF006 <- a.bigint_col, RF007 <- a.string_col, RF008 <- a.string_col +| hash predicates: b.id = a.id, b.int_col = a.id, b.id = a.int_col, b.id = a.bigint_col, b.bigint_col = a.id, b.id = a.smallint_col, b.string_col = a.string_col, b.id = a.tinyint_col, b.date_string_col = a.string_col +| runtime filters: RF000 <- a.id, RF001 <- a.id, RF002 <- a.int_col, RF003 <- a.bigint_col, RF004 <- a.id, RF005 <- a.smallint_col, RF006 <- a.string_col, RF007 <- a.tinyint_col, RF008 <- a.string_col | |--00:SCAN HDFS [functional.alltypes a] | partitions=24/24 files=24 size=478.45KB -| predicates: a.tinyint_col = a.smallint_col, a.int_col = a.bigint_col +| predicates: a.int_col = a.bigint_col, a.tinyint_col = a.smallint_col | 01:SCAN HDFS [functional.alltypes b] partitions=24/24 files=24 size=478.45KB - runtime filters: RF000 -> b.id, RF001 -> b.int_col, RF002 -> b.id, RF003 -> b.bigint_col, RF004 -> b.id, RF005 -> b.id, RF006 -> b.id, RF007 -> b.string_col, RF008 -> b.date_string_col + runtime filters: RF000 -> b.id, RF001 -> b.int_col, RF002 -> b.id, RF003 -> b.id, RF004 -> b.bigint_col, RF005 -> b.id, RF006 -> b.string_col, RF007 -> b.id, RF008 -> b.date_string_col ==== # Tests elimination of redundant join predicates (IMPALA-912). select * from @@ -1099,8 +1099,8 @@ on a.id = b.x and a.id = b.tinyint_col and a.int_col = b.y and a.int_col = b.bigint_col ---- PLAN 04:HASH JOIN [INNER JOIN] -| hash predicates: a.id = x, a.id = tinyint_col, a.int_col = y, a.int_col = bigint_col -| runtime filters: RF000 <- x, RF001 <- tinyint_col, RF002 <- y, RF003 <- bigint_col +| hash predicates: a.id = tinyint_col, a.id = x, a.int_col = bigint_col, a.int_col = y +| runtime filters: RF000 <- tinyint_col, RF001 <- x, RF002 <- bigint_col, RF003 <- y | |--01:UNION | | @@ -1599,7 +1599,7 @@ on (v1.tinyint_col = v2.tinyint_col and | 02:SCAN HDFS [functional.alltypessmall] partitions=4/4 files=4 size=6.32KB - predicates: functional.alltypessmall.tinyint_col = functional.alltypessmall.int_col, functional.alltypessmall.tinyint_col = functional.alltypessmall.bigint_col + predicates: functional.alltypessmall.tinyint_col = functional.alltypessmall.bigint_col, functional.alltypessmall.tinyint_col = functional.alltypessmall.int_col runtime filters: RF000 -> functional.alltypessmall.tinyint_col ==== # Same as above but with a full outer join. @@ -1623,7 +1623,7 @@ on (v1.tinyint_col = v2.tinyint_col and 10:EXCHANGE [UNPARTITIONED] | 04:HASH JOIN [FULL OUTER JOIN, PARTITIONED] -| hash predicates: tinyint_col = tinyint_col, int_col = tinyint_col, bigint_col = tinyint_col +| hash predicates: tinyint_col = tinyint_col, bigint_col = tinyint_col, int_col = tinyint_col | |--09:EXCHANGE [HASH(tinyint_col,tinyint_col,tinyint_col)] | | @@ -2154,7 +2154,7 @@ and (b.double_col * c.tinyint_col > 1000 or c.tinyint_col < 1000) ---- PLAN 04:HASH JOIN [LEFT OUTER JOIN] | hash predicates: c.id = a.id, c.string_col IS NOT DISTINCT FROM b.string_col -| other predicates: a.tinyint_col = 15, b.string_col = '15', a.day >= 6, b.month > 2, a.tinyint_col + b.tinyint_col < 15, a.float_col - c.double_col < 0, (b.double_col * c.tinyint_col > 1000 OR c.tinyint_col < 1000) +| other predicates: a.tinyint_col = 15, b.string_col = '15', a.day >= 6, b.month > 2, a.float_col - c.double_col < 0, a.tinyint_col + b.tinyint_col < 15, (b.double_col * c.tinyint_col > 1000 OR c.tinyint_col < 1000) | |--03:HASH JOIN [FULL OUTER JOIN] | | hash predicates: a.id IS NOT DISTINCT FROM b.id, a.int_col = b.int_col http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/kudu-update.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/kudu-update.test b/testdata/workloads/functional-planner/queries/PlannerTest/kudu-update.test index 80ba800..a26ec40 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/kudu-update.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/kudu-update.test @@ -19,13 +19,13 @@ UPDATE KUDU [functional_kudu.testtbl] | check keys exist: false | 00:SCAN KUDU [functional_kudu.testtbl] - kudu predicates: zip > 94549, id = 5 + kudu predicates: id = 5, zip > 94549 ---- DISTRIBUTEDPLAN UPDATE KUDU [functional_kudu.testtbl] | check keys exist: false | 00:SCAN KUDU [functional_kudu.testtbl] - kudu predicates: zip > 94549, id = 5 + kudu predicates: id = 5, zip > 94549 ==== # Mixing predicate and value assignment update functional_kudu.testtbl set zip = 94546 where zip > 94549 http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/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 4df133a..565f3a3 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/kudu.test @@ -96,7 +96,7 @@ where id >= 10 and zip <= 5 and 20 >= id and 'foo' = name and zip >= 0 and 30 >= and zip > 1 and zip < 50 ---- PLAN 00:SCAN KUDU [functional_kudu.testtbl] - kudu predicates: id >= 10, zip <= 5, id <= 20, zip >= 0, zip <= 30, zip > 1, zip < 50, name = 'foo' + kudu predicates: id <= 20, zip <= 30, id >= 10, zip < 50, zip <= 5, zip > 1, zip >= 0, name = 'foo' ---- SCANRANGELOCATIONS NODE 0: ScanToken{table=testtbl, range-partition: [<start>, (int64 id=1003))} @@ -104,7 +104,7 @@ NODE 0: 01:EXCHANGE [UNPARTITIONED] | 00:SCAN KUDU [functional_kudu.testtbl] - kudu predicates: id >= 10, zip <= 5, id <= 20, zip >= 0, zip <= 30, zip > 1, zip < 50, name = 'foo' + kudu predicates: id <= 20, zip <= 30, id >= 10, zip < 50, zip <= 5, zip > 1, zip >= 0, name = 'foo' ==== # Test constant folding. select * from functional_kudu.testtbl @@ -112,7 +112,7 @@ where id < 10 + 30 and cast(sin(id) as boolean) = true and 20 * 3 >= id and 10 ---- PLAN 00:SCAN KUDU [functional_kudu.testtbl] predicates: CAST(sin(id) AS BOOLEAN) = TRUE - kudu predicates: id < 40, id <= 60, id < 103 + kudu predicates: id <= 60, id < 40, id < 103 ---- SCANRANGELOCATIONS NODE 0: ScanToken{table=testtbl, range-partition: [<start>, (int64 id=1003))} @@ -121,7 +121,7 @@ NODE 0: | 00:SCAN KUDU [functional_kudu.testtbl] predicates: CAST(sin(id) AS BOOLEAN) = TRUE - kudu predicates: id < 40, id <= 60, id < 103 + kudu predicates: id <= 60, id < 40, id < 103 ==== # Some predicates can be pushed down but others can't (predicate on an non-const value). select * from functional_kudu.testtbl @@ -190,5 +190,5 @@ and 1475059765 + 100 < id | output: count(*) | 00:SCAN KUDU [functional_kudu.alltypes] - kudu predicates: id < 1475059775, id > 1475059865 + kudu predicates: id > 1475059865, id < 1475059775 ==== http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/lineage.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/lineage.test b/testdata/workloads/functional-planner/queries/PlannerTest/lineage.test index 20c117e..b18a044 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/lineage.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/lineage.test @@ -4452,4 +4452,4 @@ where not exists (select 1 from functional.alltypes a where v.id = a.id) } ] } -==== \ No newline at end of file +==== http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/nested-collections.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/nested-collections.test b/testdata/workloads/functional-planner/queries/PlannerTest/nested-collections.test index 0a8cd01..6270c11 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/nested-collections.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/nested-collections.test @@ -392,7 +392,7 @@ where b.item % 2 = 0 01:SUBPLAN | |--04:NESTED LOOP JOIN [FULL OUTER JOIN] -| | join predicates: a.id < b.item, a.id < 10 +| | join predicates: a.id < 10, a.id < b.item | | predicates: b.item % 2 = 0 | | | |--02:SINGULAR ROW SRC @@ -1357,7 +1357,7 @@ where a.item between 10 and 20 | 00:SCAN HDFS [functional.allcomplextypes t] partitions=0/0 files=0 size=0B - predicates: t.id < 200, !empty(t.int_array_col), !empty(t.complex_nested_struct_col.f2) + predicates: t.id < 200, !empty(t.complex_nested_struct_col.f2), !empty(t.int_array_col) predicates on a: a.item >= 10, a.item <= 20, a.item % 2 = 0 predicates on m: m.key = 'test', m.value != 30 predicates on c: c.f11 >= 10, c.f11 <= 20, c.f11 % 2 = 0 http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/outer-joins.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/outer-joins.test b/testdata/workloads/functional-planner/queries/PlannerTest/outer-joins.test index 74002e0..c6ccc81 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/outer-joins.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/outer-joins.test @@ -34,7 +34,7 @@ and t1.zip + t2.zip + t3.zip= 20 | |--02:SCAN HDFS [functional.testtbl t3] | partitions=1/1 files=0 size=0B -| predicates: t3.id IS NOT NULL, t3.zip = 94720, t3.id > 0 +| predicates: t3.id IS NOT NULL, t3.id > 0, t3.zip = 94720 | 03:HASH JOIN [LEFT OUTER JOIN] | hash predicates: t1.id - 1 = t2.id + 1 @@ -60,7 +60,7 @@ and t1.zip + t2.zip + t3.zip= 20 | | | 02:SCAN HDFS [functional.testtbl t3] | partitions=1/1 files=0 size=0B -| predicates: t3.id IS NOT NULL, t3.zip = 94720, t3.id > 0 +| predicates: t3.id IS NOT NULL, t3.id > 0, t3.zip = 94720 | 03:HASH JOIN [LEFT OUTER JOIN, BROADCAST] | hash predicates: t1.id - 1 = t2.id + 1 @@ -455,7 +455,7 @@ where a.smallint_col = 100 and a.float_col > b.float_col ---- PLAN 04:HASH JOIN [FULL OUTER JOIN] | hash predicates: c.int_col = a.int_col -| other join predicates: a.tinyint_col < b.tinyint_col, a.bigint_col < 10 +| other join predicates: a.bigint_col < 10, a.tinyint_col < b.tinyint_col | other predicates: a.smallint_col = 100, a.float_col > b.float_col | |--03:HASH JOIN [INNER JOIN] @@ -775,7 +775,7 @@ inner join functional.alltypestiny c ---- PLAN 05:HASH JOIN [INNER JOIN] | hash predicates: b.id = c.id -| other predicates: b.int_col < 0, a.int_col > 10 +| other predicates: a.int_col > 10, b.int_col < 0 | runtime filters: RF000 <- c.id | |--02:SCAN HDFS [functional.alltypestiny c] @@ -809,7 +809,7 @@ full outer join functional.alltypestiny e | hash predicates: e.id = d.id | |--08:NESTED LOOP JOIN [INNER JOIN] -| | predicates: b.int_col < 0, a.int_col > 10 +| | predicates: a.int_col > 10, b.int_col < 0 | | | |--07:HASH JOIN [RIGHT OUTER JOIN] | | | hash predicates: c.id = b.id http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/predicate-propagation.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/predicate-propagation.test b/testdata/workloads/functional-planner/queries/PlannerTest/predicate-propagation.test index 3ffdbd4..605f157 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/predicate-propagation.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/predicate-propagation.test @@ -50,7 +50,7 @@ where month = id and id = int_col and tinyint_col = int_col and int_col < 2 | 00:SCAN HDFS [functional.alltypes] partitions=2/24 files=2 size=40.32KB - predicates: month = id, id = int_col, functional.alltypes.id < 2, int_col < 2, functional.alltypes.tinyint_col < 2, tinyint_col = int_col + predicates: functional.alltypes.id < 2, functional.alltypes.tinyint_col < 2, id = int_col, int_col < 2, month = id, tinyint_col = int_col ==== # all subquery results get materialized correctly; # a.string_col = 'a' needs to be evaluated by the join itself, not the scan @@ -190,26 +190,26 @@ where a.year = 2009 and b.month + 2 <= 4 and b.id = 17 and cast(sin(c.int_col) as boolean) = true ---- PLAN 04:HASH JOIN [INNER JOIN] -| hash predicates: b.id = c.id, b.year = c.year, b.month = c.month, b.smallint_col = c.int_col -| runtime filters: RF000 <- c.id, RF001 <- c.year, RF002 <- c.month, RF003 <- c.int_col +| hash predicates: b.id = c.id, b.month = c.month, b.year = c.year, b.smallint_col = c.int_col +| runtime filters: RF000 <- c.id, RF001 <- c.month, RF002 <- c.year, RF003 <- c.int_col | |--02:SCAN HDFS [functional.alltypestiny c] | partitions=2/4 files=2 size=230B | predicates: c.id = 17, CAST(sin(c.int_col) AS BOOLEAN) = TRUE | 03:HASH JOIN [INNER JOIN] -| hash predicates: a.id = b.id, a.year = b.year, a.month = b.month, a.tinyint_col = b.smallint_col -| runtime filters: RF004 <- b.id, RF005 <- b.year, RF006 <- b.month, RF007 <- b.smallint_col +| hash predicates: a.id = b.id, a.month = b.month, a.year = b.year, a.tinyint_col = b.smallint_col +| runtime filters: RF004 <- b.id, RF005 <- b.month, RF006 <- b.year, RF007 <- b.smallint_col | |--01:SCAN HDFS [functional.alltypessmall b] | partitions=2/4 files=2 size=3.16KB | predicates: b.id = 17, CAST(sin(b.smallint_col) AS BOOLEAN) = TRUE -| runtime filters: RF000 -> b.id, RF001 -> b.year, RF002 -> b.month, RF003 -> b.smallint_col +| runtime filters: RF000 -> b.id, RF001 -> b.month, RF002 -> b.year, RF003 -> b.smallint_col | 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id = 17, CAST(sin(a.tinyint_col) AS BOOLEAN) = TRUE - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col, RF004 -> a.id, RF005 -> a.year, RF006 -> a.month, RF007 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col, RF004 -> a.id, RF005 -> a.month, RF006 -> a.year, RF007 -> a.tinyint_col ---- SCANRANGELOCATIONS NODE 0: HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypes/year=2009/month=1/090101.txt 0:20433 @@ -224,32 +224,32 @@ NODE 2: 08:EXCHANGE [UNPARTITIONED] | 04:HASH JOIN [INNER JOIN, PARTITIONED] -| hash predicates: b.id = c.id, b.year = c.year, b.month = c.month, b.smallint_col = c.int_col -| runtime filters: RF000 <- c.id, RF001 <- c.year, RF002 <- c.month, RF003 <- c.int_col +| hash predicates: b.id = c.id, b.month = c.month, b.year = c.year, b.smallint_col = c.int_col +| runtime filters: RF000 <- c.id, RF001 <- c.month, RF002 <- c.year, RF003 <- c.int_col | -|--07:EXCHANGE [HASH(c.id,c.year,c.month,c.int_col)] +|--07:EXCHANGE [HASH(c.id,c.month,c.year,c.int_col)] | | | 02:SCAN HDFS [functional.alltypestiny c] | partitions=2/4 files=2 size=230B | predicates: c.id = 17, CAST(sin(c.int_col) AS BOOLEAN) = TRUE | 03:HASH JOIN [INNER JOIN, PARTITIONED] -| hash predicates: a.id = b.id, a.year = b.year, a.month = b.month, a.tinyint_col = b.smallint_col -| runtime filters: RF004 <- b.id, RF005 <- b.year, RF006 <- b.month, RF007 <- b.smallint_col +| hash predicates: a.id = b.id, a.month = b.month, a.year = b.year, a.tinyint_col = b.smallint_col +| runtime filters: RF004 <- b.id, RF005 <- b.month, RF006 <- b.year, RF007 <- b.smallint_col | -|--06:EXCHANGE [HASH(b.id,b.year,b.month,b.smallint_col)] +|--06:EXCHANGE [HASH(b.id,b.month,b.year,b.smallint_col)] | | | 01:SCAN HDFS [functional.alltypessmall b] | partitions=2/4 files=2 size=3.16KB | predicates: b.id = 17, CAST(sin(b.smallint_col) AS BOOLEAN) = TRUE -| runtime filters: RF000 -> b.id, RF001 -> b.year, RF002 -> b.month, RF003 -> b.smallint_col +| runtime filters: RF000 -> b.id, RF001 -> b.month, RF002 -> b.year, RF003 -> b.smallint_col | -05:EXCHANGE [HASH(a.id,a.year,a.month,a.tinyint_col)] +05:EXCHANGE [HASH(a.id,a.month,a.year,a.tinyint_col)] | 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id = 17, CAST(sin(a.tinyint_col) AS BOOLEAN) = TRUE - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col, RF004 -> a.id, RF005 -> a.year, RF006 -> a.month, RF007 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col, RF004 -> a.id, RF005 -> a.month, RF006 -> a.year, RF007 -> a.tinyint_col ==== # basic propagation between equivalence classes, with partition pruning; # variation with inline views @@ -263,26 +263,26 @@ where a.year = 2009 and b.month + 2 <= 4 and b.id = 17 and cast(sin(c.int_col) as boolean) = true ---- PLAN 04:HASH JOIN [INNER JOIN] -| hash predicates: functional.alltypessmall.id = functional.alltypestiny.id, functional.alltypessmall.year = functional.alltypestiny.year, functional.alltypessmall.month = functional.alltypestiny.month, functional.alltypessmall.smallint_col = functional.alltypestiny.int_col -| runtime filters: RF000 <- functional.alltypestiny.id, RF001 <- functional.alltypestiny.year, RF002 <- functional.alltypestiny.month, RF003 <- functional.alltypestiny.int_col +| hash predicates: functional.alltypessmall.id = functional.alltypestiny.id, functional.alltypessmall.month = functional.alltypestiny.month, functional.alltypessmall.year = functional.alltypestiny.year, functional.alltypessmall.smallint_col = functional.alltypestiny.int_col +| runtime filters: RF000 <- functional.alltypestiny.id, RF001 <- functional.alltypestiny.month, RF002 <- functional.alltypestiny.year, RF003 <- functional.alltypestiny.int_col | |--02:SCAN HDFS [functional.alltypestiny] | partitions=2/4 files=2 size=230B | predicates: functional.alltypestiny.id = 17, CAST(sin(functional.alltypestiny.int_col) AS BOOLEAN) = TRUE | 03:HASH JOIN [INNER JOIN] -| hash predicates: functional.alltypes.id = functional.alltypessmall.id, functional.alltypes.year = functional.alltypessmall.year, functional.alltypes.month = functional.alltypessmall.month, functional.alltypes.tinyint_col = functional.alltypessmall.smallint_col -| runtime filters: RF004 <- functional.alltypessmall.id, RF005 <- functional.alltypessmall.year, RF006 <- functional.alltypessmall.month, RF007 <- functional.alltypessmall.smallint_col +| hash predicates: functional.alltypes.id = functional.alltypessmall.id, functional.alltypes.month = functional.alltypessmall.month, functional.alltypes.year = functional.alltypessmall.year, functional.alltypes.tinyint_col = functional.alltypessmall.smallint_col +| runtime filters: RF004 <- functional.alltypessmall.id, RF005 <- functional.alltypessmall.month, RF006 <- functional.alltypessmall.year, RF007 <- functional.alltypessmall.smallint_col | |--01:SCAN HDFS [functional.alltypessmall] | partitions=2/4 files=2 size=3.16KB | predicates: functional.alltypessmall.id = 17, CAST(sin(functional.alltypessmall.smallint_col) AS BOOLEAN) = TRUE -| runtime filters: RF000 -> functional.alltypessmall.id, RF001 -> functional.alltypessmall.year, RF002 -> functional.alltypessmall.month, RF003 -> functional.alltypessmall.smallint_col +| runtime filters: RF000 -> functional.alltypessmall.id, RF001 -> functional.alltypessmall.month, RF002 -> functional.alltypessmall.year, RF003 -> functional.alltypessmall.smallint_col | 00:SCAN HDFS [functional.alltypes] partitions=2/24 files=2 size=38.07KB predicates: functional.alltypes.id = 17, CAST(sin(functional.alltypes.tinyint_col) AS BOOLEAN) = TRUE - runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.year, RF002 -> functional.alltypes.month, RF003 -> functional.alltypes.tinyint_col, RF004 -> functional.alltypes.id, RF005 -> functional.alltypes.year, RF006 -> functional.alltypes.month, RF007 -> functional.alltypes.tinyint_col + runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.month, RF002 -> functional.alltypes.year, RF003 -> functional.alltypes.tinyint_col, RF004 -> functional.alltypes.id, RF005 -> functional.alltypes.month, RF006 -> functional.alltypes.year, RF007 -> functional.alltypes.tinyint_col ---- SCANRANGELOCATIONS NODE 0: HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypes/year=2009/month=1/090101.txt 0:20433 @@ -297,32 +297,32 @@ NODE 2: 08:EXCHANGE [UNPARTITIONED] | 04:HASH JOIN [INNER JOIN, PARTITIONED] -| hash predicates: functional.alltypessmall.id = functional.alltypestiny.id, functional.alltypessmall.year = functional.alltypestiny.year, functional.alltypessmall.month = functional.alltypestiny.month, functional.alltypessmall.smallint_col = functional.alltypestiny.int_col -| runtime filters: RF000 <- functional.alltypestiny.id, RF001 <- functional.alltypestiny.year, RF002 <- functional.alltypestiny.month, RF003 <- functional.alltypestiny.int_col +| hash predicates: functional.alltypessmall.id = functional.alltypestiny.id, functional.alltypessmall.month = functional.alltypestiny.month, functional.alltypessmall.year = functional.alltypestiny.year, functional.alltypessmall.smallint_col = functional.alltypestiny.int_col +| runtime filters: RF000 <- functional.alltypestiny.id, RF001 <- functional.alltypestiny.month, RF002 <- functional.alltypestiny.year, RF003 <- functional.alltypestiny.int_col | -|--07:EXCHANGE [HASH(functional.alltypestiny.id,functional.alltypestiny.year,functional.alltypestiny.month,functional.alltypestiny.int_col)] +|--07:EXCHANGE [HASH(functional.alltypestiny.id,functional.alltypestiny.month,functional.alltypestiny.year,functional.alltypestiny.int_col)] | | | 02:SCAN HDFS [functional.alltypestiny] | partitions=2/4 files=2 size=230B | predicates: functional.alltypestiny.id = 17, CAST(sin(functional.alltypestiny.int_col) AS BOOLEAN) = TRUE | 03:HASH JOIN [INNER JOIN, PARTITIONED] -| hash predicates: functional.alltypes.id = functional.alltypessmall.id, functional.alltypes.year = functional.alltypessmall.year, functional.alltypes.month = functional.alltypessmall.month, functional.alltypes.tinyint_col = functional.alltypessmall.smallint_col -| runtime filters: RF004 <- functional.alltypessmall.id, RF005 <- functional.alltypessmall.year, RF006 <- functional.alltypessmall.month, RF007 <- functional.alltypessmall.smallint_col +| hash predicates: functional.alltypes.id = functional.alltypessmall.id, functional.alltypes.month = functional.alltypessmall.month, functional.alltypes.year = functional.alltypessmall.year, functional.alltypes.tinyint_col = functional.alltypessmall.smallint_col +| runtime filters: RF004 <- functional.alltypessmall.id, RF005 <- functional.alltypessmall.month, RF006 <- functional.alltypessmall.year, RF007 <- functional.alltypessmall.smallint_col | -|--06:EXCHANGE [HASH(functional.alltypessmall.id,functional.alltypessmall.year,functional.alltypessmall.month,functional.alltypessmall.smallint_col)] +|--06:EXCHANGE [HASH(functional.alltypessmall.id,functional.alltypessmall.month,functional.alltypessmall.year,functional.alltypessmall.smallint_col)] | | | 01:SCAN HDFS [functional.alltypessmall] | partitions=2/4 files=2 size=3.16KB | predicates: functional.alltypessmall.id = 17, CAST(sin(functional.alltypessmall.smallint_col) AS BOOLEAN) = TRUE -| runtime filters: RF000 -> functional.alltypessmall.id, RF001 -> functional.alltypessmall.year, RF002 -> functional.alltypessmall.month, RF003 -> functional.alltypessmall.smallint_col +| runtime filters: RF000 -> functional.alltypessmall.id, RF001 -> functional.alltypessmall.month, RF002 -> functional.alltypessmall.year, RF003 -> functional.alltypessmall.smallint_col | -05:EXCHANGE [HASH(functional.alltypes.id,functional.alltypes.year,functional.alltypes.month,functional.alltypes.tinyint_col)] +05:EXCHANGE [HASH(functional.alltypes.id,functional.alltypes.month,functional.alltypes.year,functional.alltypes.tinyint_col)] | 00:SCAN HDFS [functional.alltypes] partitions=2/24 files=2 size=38.07KB predicates: functional.alltypes.id = 17, CAST(sin(functional.alltypes.tinyint_col) AS BOOLEAN) = TRUE - runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.year, RF002 -> functional.alltypes.month, RF003 -> functional.alltypes.tinyint_col, RF004 -> functional.alltypes.id, RF005 -> functional.alltypes.year, RF006 -> functional.alltypes.month, RF007 -> functional.alltypes.tinyint_col + runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.month, RF002 -> functional.alltypes.year, RF003 -> functional.alltypes.tinyint_col, RF004 -> functional.alltypes.id, RF005 -> functional.alltypes.month, RF006 -> functional.alltypes.year, RF007 -> functional.alltypes.tinyint_col ==== # propagation between outer-joined tables only goes in one direction: # - predicates on a.year and a.tinyint_col are propagated to b @@ -341,7 +341,7 @@ from functional.alltypes a where a.year = 2009 and a.tinyint_col = 7 and a.id is null and b.id = 17 and b.int_col is null ---- PLAN 02:HASH JOIN [LEFT OUTER JOIN] -| hash predicates: a.tinyint_col = b.tinyint_col, a.id = b.id, a.year = b.year, a.month = b.month +| hash predicates: a.id = b.id, a.month = b.month, a.tinyint_col = b.tinyint_col, a.year = b.year | other predicates: b.int_col IS NULL, b.id = 17 | |--01:SCAN HDFS [functional.alltypessmall b] @@ -371,7 +371,7 @@ NODE 1: 04:EXCHANGE [UNPARTITIONED] | 02:HASH JOIN [LEFT OUTER JOIN, BROADCAST] -| hash predicates: a.tinyint_col = b.tinyint_col, a.id = b.id, a.year = b.year, a.month = b.month +| hash predicates: a.id = b.id, a.month = b.month, a.tinyint_col = b.tinyint_col, a.year = b.year | other predicates: b.int_col IS NULL, b.id = 17 | |--03:EXCHANGE [BROADCAST] @@ -401,9 +401,9 @@ from functional.alltypessmall a where b.year = 2009 and b.tinyint_col = 7 and b.id is null and a.id = 17 and a.int_col is null ---- PLAN 02:HASH JOIN [RIGHT OUTER JOIN] -| hash predicates: a.tinyint_col = b.tinyint_col, a.id = b.id, a.year = b.year, a.month = b.month +| hash predicates: a.id = b.id, a.month = b.month, a.tinyint_col = b.tinyint_col, a.year = b.year | other predicates: a.int_col IS NULL, a.id = 17 -| runtime filters: RF000 <- b.tinyint_col, RF001 <- b.id, RF002 <- b.year, RF003 <- b.month +| runtime filters: RF000 <- b.id, RF001 <- b.month, RF002 <- b.tinyint_col, RF003 <- b.year | |--01:SCAN HDFS [functional.alltypes b] | partitions=12/24 files=12 size=238.68KB @@ -412,27 +412,27 @@ where b.year = 2009 and b.tinyint_col = 7 and b.id is null and a.id = 17 and a.i 00:SCAN HDFS [functional.alltypessmall a] partitions=1/4 files=1 size=1.57KB predicates: a.id = 17, a.tinyint_col = 7 - runtime filters: RF000 -> a.tinyint_col, RF001 -> a.id, RF002 -> a.year, RF003 -> a.month + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.tinyint_col, RF003 -> a.year ---- DISTRIBUTEDPLAN 05:EXCHANGE [UNPARTITIONED] | 02:HASH JOIN [RIGHT OUTER JOIN, PARTITIONED] -| hash predicates: a.tinyint_col = b.tinyint_col, a.id = b.id, a.year = b.year, a.month = b.month +| hash predicates: a.id = b.id, a.month = b.month, a.tinyint_col = b.tinyint_col, a.year = b.year | other predicates: a.int_col IS NULL, a.id = 17 -| runtime filters: RF000 <- b.tinyint_col, RF001 <- b.id, RF002 <- b.year, RF003 <- b.month +| runtime filters: RF000 <- b.id, RF001 <- b.month, RF002 <- b.tinyint_col, RF003 <- b.year | -|--04:EXCHANGE [HASH(b.tinyint_col,b.id,b.year,b.month)] +|--04:EXCHANGE [HASH(b.id,b.month,b.tinyint_col,b.year)] | | | 01:SCAN HDFS [functional.alltypes b] | partitions=12/24 files=12 size=238.68KB | predicates: b.id IS NULL, b.tinyint_col = 7 | -03:EXCHANGE [HASH(a.tinyint_col,a.id,a.year,a.month)] +03:EXCHANGE [HASH(a.id,a.month,a.tinyint_col,a.year)] | 00:SCAN HDFS [functional.alltypessmall a] partitions=1/4 files=1 size=1.57KB predicates: a.id = 17, a.tinyint_col = 7 - runtime filters: RF000 -> a.tinyint_col, RF001 -> a.id, RF002 -> a.year, RF003 -> a.month + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.tinyint_col, RF003 -> a.year ==== # propagation into inline view with aggregation: # - predicates from enclosing scope applied to grouping exprs; with partition pruning @@ -449,8 +449,8 @@ from functional.alltypes a where a.year = 2009 and b.month <= 2 and b.count_col + 1 = 17 and a.tinyint_col != 5 ---- PLAN 03:HASH JOIN [INNER JOIN] -| hash predicates: a.id = id, a.year = year, a.month = month, a.tinyint_col = int_col -| runtime filters: RF000 <- id, RF001 <- year, RF002 <- month, RF003 <- int_col +| hash predicates: a.id = id, a.month = month, a.year = year, a.tinyint_col = int_col +| runtime filters: RF000 <- id, RF001 <- month, RF002 <- year, RF003 <- int_col | |--02:AGGREGATE [FINALIZE] | | output: count(*) @@ -459,12 +459,12 @@ where a.year = 2009 and b.month <= 2 and b.count_col + 1 = 17 and a.tinyint_col | | | 01:SCAN HDFS [functional.alltypessmall] | partitions=2/4 files=2 size=3.16KB -| predicates: id > 11, functional.alltypessmall.int_col != 5 +| predicates: functional.alltypessmall.int_col != 5, id > 11 | 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id > 11, a.tinyint_col != 5 - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col ---- SCANRANGELOCATIONS NODE 0: HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypes/year=2009/month=1/090101.txt 0:20433 @@ -476,8 +476,8 @@ NODE 1: 07:EXCHANGE [UNPARTITIONED] | 03:HASH JOIN [INNER JOIN, BROADCAST] -| hash predicates: a.id = id, a.year = year, a.month = month, a.tinyint_col = int_col -| runtime filters: RF000 <- id, RF001 <- year, RF002 <- month, RF003 <- int_col +| hash predicates: a.id = id, a.month = month, a.year = year, a.tinyint_col = int_col +| runtime filters: RF000 <- id, RF001 <- month, RF002 <- year, RF003 <- int_col | |--06:EXCHANGE [BROADCAST] | | @@ -494,12 +494,12 @@ NODE 1: | | | 01:SCAN HDFS [functional.alltypessmall] | partitions=2/4 files=2 size=3.16KB -| predicates: id > 11, functional.alltypessmall.int_col != 5 +| predicates: functional.alltypessmall.int_col != 5, id > 11 | 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id > 11, a.tinyint_col != 5 - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col ==== # Same as above but with cross join select straight_join a.id, b.id @@ -519,8 +519,8 @@ where a.id = b.id and a.tinyint_col != 5 ---- PLAN 03:HASH JOIN [INNER JOIN] -| hash predicates: a.id = id, a.year = year, a.month = month, a.tinyint_col = int_col -| runtime filters: RF000 <- id, RF001 <- year, RF002 <- month, RF003 <- int_col +| hash predicates: a.id = id, a.month = month, a.year = year, a.tinyint_col = int_col +| runtime filters: RF000 <- id, RF001 <- month, RF002 <- year, RF003 <- int_col | |--02:AGGREGATE [FINALIZE] | | output: count(*) @@ -529,18 +529,18 @@ where a.id = b.id and | | | 01:SCAN HDFS [functional.alltypessmall] | partitions=2/4 files=2 size=3.16KB -| predicates: id > 11, functional.alltypessmall.int_col != 5 +| predicates: functional.alltypessmall.int_col != 5, id > 11 | 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id > 11, a.tinyint_col != 5 - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col ---- DISTRIBUTEDPLAN 07:EXCHANGE [UNPARTITIONED] | 03:HASH JOIN [INNER JOIN, BROADCAST] -| hash predicates: a.id = id, a.year = year, a.month = month, a.tinyint_col = int_col -| runtime filters: RF000 <- id, RF001 <- year, RF002 <- month, RF003 <- int_col +| hash predicates: a.id = id, a.month = month, a.year = year, a.tinyint_col = int_col +| runtime filters: RF000 <- id, RF001 <- month, RF002 <- year, RF003 <- int_col | |--06:EXCHANGE [BROADCAST] | | @@ -557,12 +557,12 @@ where a.id = b.id and | | | 01:SCAN HDFS [functional.alltypessmall] | partitions=2/4 files=2 size=3.16KB -| predicates: id > 11, functional.alltypessmall.int_col != 5 +| predicates: functional.alltypessmall.int_col != 5, id > 11 | 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id > 11, a.tinyint_col != 5 - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col ==== # no propagation into select block with limit; # propagation out of that block is okay; @@ -580,8 +580,8 @@ from functional.alltypes a where a.year = 2009 and b.month <= 2 and b.count_col + 1 = 17 and a.tinyint_col != 5 ---- PLAN 04:HASH JOIN [INNER JOIN] -| hash predicates: a.id = id, a.year = year, a.month = month, a.tinyint_col = int_col -| runtime filters: RF000 <- id, RF001 <- year, RF002 <- month, RF003 <- int_col +| hash predicates: a.id = id, a.month = month, a.year = year, a.tinyint_col = int_col +| runtime filters: RF000 <- id, RF001 <- month, RF002 <- year, RF003 <- int_col | |--03:SELECT | | predicates: count(*) + 1 = 17 @@ -598,7 +598,7 @@ where a.year = 2009 and b.month <= 2 and b.count_col + 1 = 17 and a.tinyint_col 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id > 11, a.tinyint_col != 5 - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col ---- SCANRANGELOCATIONS NODE 0: HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypes/year=2009/month=1/090101.txt 0:20433 @@ -612,8 +612,8 @@ NODE 1: 09:EXCHANGE [UNPARTITIONED] | 04:HASH JOIN [INNER JOIN, BROADCAST] -| hash predicates: a.id = id, a.year = year, a.month = month, a.tinyint_col = int_col -| runtime filters: RF000 <- id, RF001 <- year, RF002 <- month, RF003 <- int_col +| hash predicates: a.id = id, a.month = month, a.year = year, a.tinyint_col = int_col +| runtime filters: RF000 <- id, RF001 <- month, RF002 <- year, RF003 <- int_col | |--08:EXCHANGE [BROADCAST] | | @@ -641,7 +641,7 @@ NODE 1: 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id > 11, a.tinyint_col != 5 - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col ==== # Similar to the above, converts the cross join to a hash join select straight_join a.id, b.id @@ -662,8 +662,8 @@ where a.year = 2009 and a.month = b.month ---- PLAN 04:HASH JOIN [INNER JOIN] -| hash predicates: a.id = id, a.year = year, a.month = month, a.tinyint_col = int_col -| runtime filters: RF000 <- id, RF001 <- year, RF002 <- month, RF003 <- int_col +| hash predicates: a.id = id, a.month = month, a.year = year, a.tinyint_col = int_col +| runtime filters: RF000 <- id, RF001 <- month, RF002 <- year, RF003 <- int_col | |--03:SELECT | | predicates: count(*) + 1 = 17 @@ -680,13 +680,13 @@ where a.year = 2009 and 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id > 11, a.tinyint_col != 5 - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col ---- DISTRIBUTEDPLAN 09:EXCHANGE [UNPARTITIONED] | 04:HASH JOIN [INNER JOIN, BROADCAST] -| hash predicates: a.id = id, a.year = year, a.month = month, a.tinyint_col = int_col -| runtime filters: RF000 <- id, RF001 <- year, RF002 <- month, RF003 <- int_col +| hash predicates: a.id = id, a.month = month, a.year = year, a.tinyint_col = int_col +| runtime filters: RF000 <- id, RF001 <- month, RF002 <- year, RF003 <- int_col | |--08:EXCHANGE [BROADCAST] | | @@ -714,7 +714,7 @@ where a.year = 2009 and 00:SCAN HDFS [functional.alltypes a] partitions=2/24 files=2 size=38.07KB predicates: a.id > 11, a.tinyint_col != 5 - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.month, RF003 -> a.tinyint_col + runtime filters: RF000 -> a.id, RF001 -> a.month, RF002 -> a.year, RF003 -> a.tinyint_col ==== # propagation of z.month=1 to alltypesagg is prevented select straight_join x.int_col, z.int_col @@ -768,16 +768,16 @@ and x.id + x.b_id = 17 | limit: 10 | 02:HASH JOIN [INNER JOIN] -| hash predicates: a.year = b.year, a.int_col = b.int_col +| hash predicates: a.int_col = b.int_col, a.year = b.year | other predicates: a.id + b.id = 17 -| runtime filters: RF001 <- b.year, RF002 <- b.int_col +| runtime filters: RF001 <- b.int_col, RF002 <- b.year | |--01:SCAN HDFS [functional.alltypessmall b] | partitions=4/4 files=4 size=6.32KB | 00:SCAN HDFS [functional.alltypes a] partitions=12/24 files=12 size=238.68KB - runtime filters: RF000 -> a.id, RF001 -> a.year, RF002 -> a.int_col + runtime filters: RF000 -> a.id, RF001 -> a.int_col, RF002 -> a.year ==== # correct placement of predicates in the presence of aggregation in an inline view select straight_join a.id, b.id @@ -969,13 +969,13 @@ and t2.id + t2.smallint_col + t2.bigint_col > 30 and t2.id + t3.int_col > 40 ---- PLAN 04:HASH JOIN [INNER JOIN] -| hash predicates: t2.id = functional.alltypestiny.id, t2.bigint_col = functional.alltypestiny.bigint_col, t2.smallint_col = functional.alltypestiny.int_col +| hash predicates: t2.bigint_col = functional.alltypestiny.bigint_col, t2.id = functional.alltypestiny.id, t2.smallint_col = functional.alltypestiny.int_col | other predicates: t2.id + functional.alltypestiny.int_col > 40 -| runtime filters: RF000 <- functional.alltypestiny.id, RF001 <- functional.alltypestiny.bigint_col, RF002 <- functional.alltypestiny.int_col +| runtime filters: RF000 <- functional.alltypestiny.bigint_col, RF001 <- functional.alltypestiny.id, RF002 <- functional.alltypestiny.int_col | |--02:SCAN HDFS [functional.alltypestiny] | partitions=4/4 files=4 size=460B -| predicates: functional.alltypestiny.id + functional.alltypestiny.int_col > 10, functional.alltypestiny.id + functional.alltypestiny.bigint_col > 20, functional.alltypestiny.id + functional.alltypestiny.int_col + functional.alltypestiny.bigint_col > 30 +| predicates: functional.alltypestiny.id + functional.alltypestiny.bigint_col > 20, functional.alltypestiny.id + functional.alltypestiny.int_col > 10, functional.alltypestiny.id + functional.alltypestiny.int_col + functional.alltypestiny.bigint_col > 30 | 03:HASH JOIN [INNER JOIN] | hash predicates: t1.id = t2.id, t1.tinyint_col = t2.smallint_col @@ -983,13 +983,13 @@ and t2.id + t3.int_col > 40 | |--01:SCAN HDFS [functional.alltypessmall t2] | partitions=4/4 files=4 size=6.32KB -| predicates: t2.id + t2.smallint_col > 10, t2.id + t2.bigint_col > 20, t2.id + t2.smallint_col + t2.bigint_col > 30 -| runtime filters: RF000 -> t2.id, RF001 -> t2.bigint_col, RF002 -> t2.smallint_col +| predicates: t2.id + t2.bigint_col > 20, t2.id + t2.smallint_col > 10, t2.id + t2.smallint_col + t2.bigint_col > 30 +| runtime filters: RF000 -> t2.bigint_col, RF001 -> t2.id, RF002 -> t2.smallint_col | 00:SCAN HDFS [functional.alltypes t1] partitions=24/24 files=24 size=478.45KB predicates: t1.id + t1.tinyint_col > 10 - runtime filters: RF000 -> t1.id, RF002 -> t1.tinyint_col, RF003 -> t1.id, RF004 -> t1.tinyint_col + runtime filters: RF001 -> t1.id, RF002 -> t1.tinyint_col, RF003 -> t1.id, RF004 -> t1.tinyint_col ==== # basic propagation of multi-slot, single-tuple predicates with aggregates select straight_join 1 from @@ -1162,7 +1162,7 @@ where a.id < 10 | |--01:SCAN HDFS [functional.alltypestiny] | partitions=4/4 files=4 size=460B -| predicates: id > 20, functional.alltypestiny.id < 10 +| predicates: functional.alltypestiny.id < 10, id > 20 | 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB @@ -1185,7 +1185,7 @@ where b.id < 10 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB - predicates: id > 20, functional.alltypes.id < 10 + predicates: functional.alltypes.id < 10, id > 20 ==== # Test proper predicate assignment with predicate propagation when the # generated predicate is bound by an outer joined tuple (IMPALA-2018) http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/runtime-filter-propagation.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/runtime-filter-propagation.test b/testdata/workloads/functional-planner/queries/PlannerTest/runtime-filter-propagation.test index 499910b..f1abd1d 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/runtime-filter-propagation.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/runtime-filter-propagation.test @@ -143,7 +143,7 @@ and t1.int_col = 1 and 1 = t2.bigint_col ---- PLAN 02:HASH JOIN [INNER JOIN] | hash predicates: t1.id = t2.id -| other predicates: t1.year = t1.month + t2.int_col, t1.year + t2.smallint_col = t2.tinyint_col, t1.year + t2.int_col = t1.month + t2.tinyint_col +| other predicates: t1.year + t2.smallint_col = t2.tinyint_col, t1.year = t1.month + t2.int_col, t1.year + t2.int_col = t1.month + t2.tinyint_col | runtime filters: RF000 <- t2.id | |--01:SCAN HDFS [functional.alltypesnopart t2] @@ -262,8 +262,8 @@ where t1.year = v.int_col and t1.year = v.id and t1.month = v.tinyint_col | runtime filters: RF000 <- t2.int_col, RF001 <- t4.tinyint_col | |--05:HASH JOIN [INNER JOIN] -| | hash predicates: t3.int_col = t4.int_col, t2.tinyint_col = t4.tinyint_col -| | runtime filters: RF002 <- t4.int_col, RF003 <- t4.tinyint_col +| | hash predicates: t2.tinyint_col = t4.tinyint_col, t3.int_col = t4.int_col +| | runtime filters: RF002 <- t4.tinyint_col, RF003 <- t4.int_col | | | |--03:SCAN HDFS [functional.alltypesnopart t4] | | partitions=1/1 files=0 size=0B @@ -274,12 +274,12 @@ where t1.year = v.int_col and t1.year = v.id and t1.month = v.tinyint_col | | | |--02:SCAN HDFS [functional.alltypesnopart t3] | | partitions=1/1 files=0 size=0B -| | runtime filters: RF002 -> t3.int_col +| | runtime filters: RF003 -> t3.int_col | | | 01:SCAN HDFS [functional.alltypesnopart t2] | partitions=1/1 files=0 size=0B | predicates: t2.int_col = t2.id -| runtime filters: RF003 -> t2.tinyint_col, RF004 -> t2.id +| runtime filters: RF002 -> t2.tinyint_col, RF004 -> t2.id | 00:SCAN HDFS [functional.alltypesagg t1] partitions=11/11 files=11 size=814.73KB @@ -328,8 +328,8 @@ where t1.year = t2.id and t2.int_col = t3.tinyint_col and t3.month = t4.bigint_c and t4.smallint_col = t5.smallint_col and t5.id = t1.month ---- PLAN 08:HASH JOIN [INNER JOIN] -| hash predicates: t4.smallint_col = t5.smallint_col, t1.month = t5.id -| runtime filters: RF000 <- t5.smallint_col, RF001 <- t5.id +| hash predicates: t1.month = t5.id, t4.smallint_col = t5.smallint_col +| runtime filters: RF000 <- t5.id, RF001 <- t5.smallint_col | |--04:SCAN HDFS [functional.alltypesnopart t5] | partitions=1/1 files=0 size=0B @@ -340,7 +340,7 @@ where t1.year = t2.id and t2.int_col = t3.tinyint_col and t3.month = t4.bigint_c | |--03:SCAN HDFS [functional.alltypesnopart t4] | partitions=1/1 files=0 size=0B -| runtime filters: RF000 -> t4.smallint_col +| runtime filters: RF001 -> t4.smallint_col | 06:HASH JOIN [INNER JOIN] | hash predicates: t2.int_col = t3.tinyint_col @@ -360,7 +360,7 @@ where t1.year = t2.id and t2.int_col = t3.tinyint_col and t3.month = t4.bigint_c | 00:SCAN HDFS [functional.alltypesagg t1] partitions=11/11 files=11 size=814.73KB - runtime filters: RF001 -> t1.month, RF004 -> t1.year + runtime filters: RF000 -> t1.month, RF004 -> t1.year ==== # Two-way left outer join query; no runtime filters should be generated from the # ON-clause equi-join predicate @@ -632,7 +632,7 @@ select straight_join * from where v1.year = t2.id and v1.int_col = t2.int_col and t2.smallint_col = 1 ---- PLAN 03:HASH JOIN [INNER JOIN] -| hash predicates: year = t2.id, int_col = t2.int_col +| hash predicates: int_col = t2.int_col, year = t2.id | |--02:SCAN HDFS [functional.alltypesnopart t2] | partitions=1/1 files=0 size=0B @@ -1213,7 +1213,7 @@ from big_six 36:NESTED LOOP JOIN [CROSS JOIN] | |--28:HASH JOIN [INNER JOIN] -| | hash predicates: a.id = b.id, a.bigint_col = b.bigint_col, a.bool_col = b.bool_col, a.double_col = b.double_col, a.float_col = b.float_col, a.int_col = b.int_col, a.smallint_col = b.smallint_col, a.tinyint_col = b.tinyint_col +| | hash predicates: a.bigint_col = b.bigint_col, a.bool_col = b.bool_col, a.double_col = b.double_col, a.float_col = b.float_col, a.id = b.id, a.int_col = b.int_col, a.smallint_col = b.smallint_col, a.tinyint_col = b.tinyint_col | | | |--27:SCAN HDFS [functional.alltypestiny b] | | partitions=4/4 files=4 size=460B @@ -1224,7 +1224,7 @@ from big_six 35:NESTED LOOP JOIN [CROSS JOIN] | |--25:HASH JOIN [INNER JOIN] -| | hash predicates: a.id = b.id, a.bool_col = b.bool_col, a.tinyint_col = b.tinyint_col +| | hash predicates: a.bool_col = b.bool_col, a.id = b.id, a.tinyint_col = b.tinyint_col | | | |--24:SCAN HDFS [functional.alltypes b] | | partitions=24/24 files=24 size=478.45KB @@ -1235,7 +1235,7 @@ from big_six 34:NESTED LOOP JOIN [CROSS JOIN] | |--22:HASH JOIN [INNER JOIN] -| | hash predicates: a.id = b.id, a.bigint_col = b.bigint_col, a.bool_col = b.bool_col, a.int_col = b.int_col, a.smallint_col = b.smallint_col, a.tinyint_col = b.tinyint_col +| | hash predicates: a.bigint_col = b.bigint_col, a.bool_col = b.bool_col, a.id = b.id, a.int_col = b.int_col, a.smallint_col = b.smallint_col, a.tinyint_col = b.tinyint_col | | | |--21:SCAN HDFS [functional.alltypestiny b] | | partitions=4/4 files=4 size=460B @@ -1273,20 +1273,20 @@ from big_six 31:NESTED LOOP JOIN [CROSS JOIN] | |--11:HASH JOIN [INNER JOIN] -| | hash predicates: a.id = b.id, a.bigint_col = b.bigint_col, a.bool_col = b.bool_col, a.double_col = b.double_col, a.float_col = b.float_col, a.int_col = b.int_col, a.smallint_col = b.smallint_col, a.tinyint_col = b.tinyint_col -| | runtime filters: RF017 <- b.bigint_col, RF016 <- b.id, RF019 <- b.double_col, RF018 <- b.bool_col, RF021 <- b.int_col, RF020 <- b.float_col, RF023 <- b.tinyint_col, RF022 <- b.smallint_col +| | hash predicates: a.bigint_col = b.bigint_col, a.bool_col = b.bool_col, a.double_col = b.double_col, a.float_col = b.float_col, a.id = b.id, a.int_col = b.int_col, a.smallint_col = b.smallint_col, a.tinyint_col = b.tinyint_col +| | runtime filters: RF017 <- b.bool_col, RF016 <- b.bigint_col, RF019 <- b.float_col, RF018 <- b.double_col, RF021 <- b.int_col, RF020 <- b.id, RF023 <- b.tinyint_col, RF022 <- b.smallint_col | | | |--10:SCAN HDFS [functional.alltypestiny b] | | partitions=4/4 files=4 size=460B | | | 09:SCAN HDFS [functional.alltypes a] | partitions=24/24 files=24 size=478.45KB -| runtime filters: RF017 -> a.bigint_col, RF016 -> a.id, RF019 -> a.double_col, RF018 -> a.bool_col, RF021 -> a.int_col, RF020 -> a.float_col, RF023 -> a.tinyint_col, RF022 -> a.smallint_col +| runtime filters: RF017 -> a.bool_col, RF016 -> a.bigint_col, RF019 -> a.float_col, RF018 -> a.double_col, RF021 -> a.int_col, RF020 -> a.id, RF023 -> a.tinyint_col, RF022 -> a.smallint_col | 30:NESTED LOOP JOIN [CROSS JOIN] | |--08:HASH JOIN [INNER JOIN] -| | hash predicates: a.id = b.id, a.bool_col = b.bool_col, a.double_col = b.double_col, a.smallint_col = b.smallint_col, a.timestamp_col = b.timestamp_col, a.tinyint_col = b.tinyint_col, a.string_col = b.string_col, a.date_string_col = b.date_string_col +| | hash predicates: a.bool_col = b.bool_col, a.double_col = b.double_col, a.id = b.id, a.smallint_col = b.smallint_col, a.timestamp_col = b.timestamp_col, a.tinyint_col = b.tinyint_col, a.string_col = b.string_col, a.date_string_col = b.date_string_col | | | |--07:SCAN HDFS [functional.alltypes b] | | partitions=24/24 files=24 size=478.45KB @@ -1297,18 +1297,18 @@ from big_six 29:NESTED LOOP JOIN [CROSS JOIN] | |--05:HASH JOIN [INNER JOIN] -| | hash predicates: a.id = b.id, a.bool_col = b.bool_col -| | runtime filters: RF006 <- b.id, RF007 <- b.bool_col +| | hash predicates: a.bool_col = b.bool_col, a.id = b.id +| | runtime filters: RF006 <- b.bool_col, RF007 <- b.id | | | |--04:SCAN HDFS [functional.alltypestiny b] | | partitions=4/4 files=4 size=460B | | | 03:SCAN HDFS [functional.alltypes a] | partitions=24/24 files=24 size=478.45KB -| runtime filters: RF006 -> a.id, RF007 -> a.bool_col +| runtime filters: RF006 -> a.bool_col, RF007 -> a.id | 02:HASH JOIN [INNER JOIN] -| hash predicates: a.id = b.id, a.bigint_col = b.bigint_col, a.bool_col = b.bool_col, a.int_col = b.int_col, a.smallint_col = b.smallint_col, a.tinyint_col = b.tinyint_col +| hash predicates: a.bigint_col = b.bigint_col, a.bool_col = b.bool_col, a.id = b.id, a.int_col = b.int_col, a.smallint_col = b.smallint_col, a.tinyint_col = b.tinyint_col | |--01:SCAN HDFS [functional.alltypes b] | partitions=24/24 files=24 size=478.45KB http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/1a5c43ef/testdata/workloads/functional-planner/queries/PlannerTest/subquery-rewrite.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/subquery-rewrite.test b/testdata/workloads/functional-planner/queries/PlannerTest/subquery-rewrite.test index a04f723..21776ba 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/subquery-rewrite.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/subquery-rewrite.test @@ -41,7 +41,7 @@ and a.int_col < 100 ---- PLAN 02:HASH JOIN [NULL AWARE LEFT ANTI JOIN] | hash predicates: a.int_col = int_col -| other join predicates: g.bigint_col < a.bigint_col, a.id = g.id +| other join predicates: a.id = g.id, g.bigint_col < a.bigint_col | |--01:SCAN HDFS [functional.alltypesagg g] | partitions=11/11 files=11 size=814.73KB @@ -77,8 +77,8 @@ and bool_col = false | output: count(*) | 02:HASH JOIN [LEFT SEMI JOIN] -| hash predicates: int_col = int_col, a.id = g.id -| runtime filters: RF000 <- int_col, RF001 <- g.id +| hash predicates: a.id = g.id, int_col = int_col +| runtime filters: RF000 <- g.id, RF001 <- int_col | |--01:SCAN HDFS [functional.alltypesagg g] | partitions=11/11 files=11 size=814.73KB @@ -87,7 +87,7 @@ and bool_col = false 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: bool_col = FALSE - runtime filters: RF000 -> int_col, RF001 -> a.id + runtime filters: RF000 -> a.id, RF001 -> int_col ==== # Complex expression in the IN predicate select * @@ -174,8 +174,8 @@ and a.int_col < 10 | output: count(*) | 04:HASH JOIN [LEFT SEMI JOIN] -| hash predicates: a.id = s.id, a.bool_col = s.bool_col -| runtime filters: RF000 <- s.id, RF001 <- s.bool_col +| hash predicates: a.bool_col = s.bool_col, a.id = s.id +| runtime filters: RF000 <- s.bool_col, RF001 <- s.id | |--03:HASH JOIN [INNER JOIN] | | hash predicates: s.int_col = t.int_col @@ -191,7 +191,7 @@ and a.int_col < 10 00:SCAN HDFS [functional.alltypesagg a] partitions=11/11 files=11 size=814.73KB predicates: a.int_col < 10 - runtime filters: RF000 -> a.id, RF001 -> a.bool_col + runtime filters: RF000 -> a.bool_col, RF001 -> a.id ==== # Outer join between the tables in the outer query block select count(*) @@ -451,15 +451,15 @@ where id in | runtime filters: RF000 <- id, RF001 <- a.int_col | |--03:HASH JOIN [LEFT SEMI JOIN] -| | hash predicates: a.tinyint_col = tinyint_col, a.bigint_col = s.bigint_col -| | runtime filters: RF002 <- tinyint_col, RF003 <- s.bigint_col +| | hash predicates: a.bigint_col = s.bigint_col, a.tinyint_col = tinyint_col +| | runtime filters: RF002 <- s.bigint_col, RF003 <- tinyint_col | | | |--02:SCAN HDFS [functional.alltypestiny s] | | partitions=4/4 files=4 size=460B | | | 01:SCAN HDFS [functional.alltypesagg a] | partitions=11/11 files=11 size=814.73KB -| runtime filters: RF002 -> a.tinyint_col, RF003 -> a.bigint_col +| runtime filters: RF002 -> a.bigint_col, RF003 -> a.tinyint_col | 00:SCAN HDFS [functional.alltypes t] partitions=24/24 files=24 size=478.45KB @@ -477,15 +477,15 @@ where id in | runtime filters: RF000 <- id | |--03:HASH JOIN [LEFT SEMI JOIN] -| | hash predicates: a.int_col = int_col, a.bigint_col = s.bigint_col -| | runtime filters: RF001 <- int_col, RF002 <- s.bigint_col +| | hash predicates: a.bigint_col = s.bigint_col, a.int_col = int_col +| | runtime filters: RF001 <- s.bigint_col, RF002 <- int_col | | | |--02:SCAN HDFS [functional.alltypestiny s] | | partitions=4/4 files=4 size=460B | | | 01:SCAN HDFS [functional.alltypesagg a] | partitions=11/11 files=11 size=814.73KB -| runtime filters: RF001 -> a.int_col, RF002 -> a.bigint_col +| runtime filters: RF001 -> a.bigint_col, RF002 -> a.int_col | 00:SCAN HDFS [functional.alltypes t] partitions=24/24 files=24 size=478.45KB @@ -517,8 +517,8 @@ where t.int_col < 10 and t.int_col in (select int_col from functional.alltypessmall s where s.id = t.id) ---- PLAN 04:HASH JOIN [LEFT SEMI JOIN] -| hash predicates: t.int_col = int_col, t.id = s.id -| runtime filters: RF000 <- int_col, RF001 <- s.id +| hash predicates: t.id = s.id, t.int_col = int_col +| runtime filters: RF000 <- s.id, RF001 <- int_col | |--02:SCAN HDFS [functional.alltypessmall s] | partitions=4/4 files=4 size=6.32KB @@ -531,11 +531,11 @@ where t.int_col < 10 and t.int_col in |--01:SCAN HDFS [functional.alltypes t] | partitions=24/24 files=24 size=478.45KB | predicates: t.int_col < 10 -| runtime filters: RF000 -> t.int_col, RF001 -> t.id +| runtime filters: RF000 -> t.id, RF001 -> t.int_col | 00:SCAN HDFS [functional.alltypesagg a] partitions=11/11 files=11 size=814.73KB - runtime filters: RF001 -> a.id, RF002 -> a.id + runtime filters: RF000 -> a.id, RF002 -> a.id ==== # Correlated EXISTS select count(*) @@ -1852,12 +1852,12 @@ select 1 from functional.alltypes t where id in ---- PLAN 02:HASH JOIN [LEFT SEMI JOIN] | hash predicates: id = id -| other join predicates: t.float_col >= a.float_col, a.tinyint_col >= t.tinyint_col, t.float_col <= a.double_col, a.smallint_col <= t.int_col, a.tinyint_col <= t.smallint_col, a.double_col <= CAST(t.string_col AS INT), t.string_col >= a.string_col, a.double_col >= round(acos(t.float_col), 2) +| other join predicates: a.tinyint_col >= t.tinyint_col, t.float_col >= a.float_col, a.smallint_col <= t.int_col, a.tinyint_col <= t.smallint_col, t.float_col <= a.double_col, a.double_col <= CAST(t.string_col AS INT), t.string_col >= a.string_col, a.double_col >= round(acos(t.float_col), 2) | runtime filters: RF000 <- id | |--01:SCAN HDFS [functional.alltypesagg a] | partitions=11/11 files=11 size=814.73KB -| predicates: a.smallint_col >= 10, 20 <= a.int_col +| predicates: 20 <= a.int_col, a.smallint_col >= 10 | 00:SCAN HDFS [functional.alltypes t] partitions=24/24 files=24 size=478.45KB