blob: a6322e6a5f15e1328adb7027390db87b1250c2fb [file] [log] [blame]
# Basic test with a view.
select int_col, string_col from functional.alltypes_view
---- PLAN
PLAN-ROOT SINK
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
01:EXCHANGE [UNPARTITIONED]
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
====
# Basic test with a complex view.
select * from functional.complex_view
---- PLAN
PLAN-ROOT SINK
|
04:TOP-N [LIMIT=100]
| order by: b.string_col ASC
|
03:AGGREGATE [FINALIZE]
| output: count(a.bigint_col)
| group by: b.string_col
| having: count(a.bigint_col) > 1
|
02:HASH JOIN [INNER JOIN]
| hash predicates: a.id = b.id
| runtime filters: RF000 <- b.id
|
|--01:SCAN HDFS [functional.alltypestiny b]
| partitions=4/4 files=4 size=460B
|
00:SCAN HDFS [functional.alltypesagg a]
partitions=11/11 files=11 size=814.73KB
predicates: a.bigint_col < 50
runtime filters: RF000 -> a.id
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
08:MERGING-EXCHANGE [UNPARTITIONED]
| order by: b.string_col ASC
| limit: 100
|
04:TOP-N [LIMIT=100]
| order by: b.string_col ASC
|
07:AGGREGATE [FINALIZE]
| output: count:merge(a.bigint_col)
| group by: b.string_col
| having: count(a.bigint_col) > 1
|
06:EXCHANGE [HASH(b.string_col)]
|
03:AGGREGATE [STREAMING]
| output: count(a.bigint_col)
| group by: b.string_col
|
02:HASH JOIN [INNER JOIN, BROADCAST]
| hash predicates: a.id = b.id
| runtime filters: RF000 <- b.id
|
|--05:EXCHANGE [BROADCAST]
| |
| 01:SCAN HDFS [functional.alltypestiny b]
| partitions=4/4 files=4 size=460B
|
00:SCAN HDFS [functional.alltypesagg a]
partitions=11/11 files=11 size=814.73KB
predicates: a.bigint_col < 50
runtime filters: RF000 -> a.id
====
# Basic test with a view on a view
select int_col, string_col from functional.view_view
---- PLAN
PLAN-ROOT SINK
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
01:EXCHANGE [UNPARTITIONED]
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
====
# view used in a union.
select * from functional.alltypes_view union all
select * from functional.alltypes_view where id < 10
---- PLAN
PLAN-ROOT SINK
|
00:UNION
|
|--02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| predicates: functional.alltypes.id < 10
|
01:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
03:EXCHANGE [UNPARTITIONED]
|
00:UNION
|
|--02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| predicates: functional.alltypes.id < 10
|
01:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
====
# view used in an inline view.
select t.id from (select id from functional.alltypes_view) t
where t.id < 10
---- PLAN
PLAN-ROOT SINK
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
predicates: functional.alltypes.id < 10
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
01:EXCHANGE [UNPARTITIONED]
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
predicates: functional.alltypes.id < 10
====
# Multiple views used in a join.
select * from functional.alltypes_view t1, functional.alltypes_view_sub t2,
functional.complex_view t3 where t1.id = t2.x and t2.x = t3.abc
---- PLAN
PLAN-ROOT SINK
|
08:HASH JOIN [INNER JOIN]
| hash predicates: int_col = count(a.bigint_col)
| runtime filters: RF000 <- count(a.bigint_col)
|
|--06:TOP-N [LIMIT=100]
| | order by: b.string_col ASC
| |
| 05:AGGREGATE [FINALIZE]
| | output: count(a.bigint_col)
| | group by: b.string_col
| | having: count(a.bigint_col) > 1
| |
| 04:HASH JOIN [INNER JOIN]
| | hash predicates: a.id = b.id
| | runtime filters: RF002 <- b.id
| |
| |--03:SCAN HDFS [functional.alltypestiny b]
| | partitions=4/4 files=4 size=460B
| |
| 02:SCAN HDFS [functional.alltypesagg a]
| partitions=11/11 files=11 size=814.73KB
| predicates: a.bigint_col < 50
| runtime filters: RF002 -> a.id
|
07:HASH JOIN [INNER JOIN]
| hash predicates: functional.alltypes.id = int_col
| runtime filters: RF001 <- int_col
|
|--01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| predicates: functional.alltypes.int_col > 1
| runtime filters: RF000 -> int_col
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
predicates: functional.alltypes.id > 1
runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.id
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
16:EXCHANGE [UNPARTITIONED]
|
08:HASH JOIN [INNER JOIN, BROADCAST]
| hash predicates: int_col = count(a.bigint_col)
| runtime filters: RF000 <- count(a.bigint_col)
|
|--15:EXCHANGE [BROADCAST]
| |
| 14:MERGING-EXCHANGE [UNPARTITIONED]
| | order by: b.string_col ASC
| | limit: 100
| |
| 06:TOP-N [LIMIT=100]
| | order by: b.string_col ASC
| |
| 13:AGGREGATE [FINALIZE]
| | output: count:merge(a.bigint_col)
| | group by: b.string_col
| | having: count(a.bigint_col) > 1
| |
| 12:EXCHANGE [HASH(b.string_col)]
| |
| 05:AGGREGATE [STREAMING]
| | output: count(a.bigint_col)
| | group by: b.string_col
| |
| 04:HASH JOIN [INNER JOIN, BROADCAST]
| | hash predicates: a.id = b.id
| | runtime filters: RF002 <- b.id
| |
| |--11:EXCHANGE [BROADCAST]
| | |
| | 03:SCAN HDFS [functional.alltypestiny b]
| | partitions=4/4 files=4 size=460B
| |
| 02:SCAN HDFS [functional.alltypesagg a]
| partitions=11/11 files=11 size=814.73KB
| predicates: a.bigint_col < 50
| runtime filters: RF002 -> a.id
|
07:HASH JOIN [INNER JOIN, PARTITIONED]
| hash predicates: functional.alltypes.id = int_col
| runtime filters: RF001 <- int_col
|
|--10:EXCHANGE [HASH(int_col)]
| |
| 01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| predicates: functional.alltypes.int_col > 1
| runtime filters: RF000 -> int_col
|
09:EXCHANGE [HASH(functional.alltypes.id)]
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
predicates: functional.alltypes.id > 1
runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.id
====
# Self-join of view to make sure the on clause is properly set
# in the cloned view instances.
select * from functional.alltypes_view t1
inner join functional.alltypes_view t2 on (t1.id = t2.id)
inner join functional.alltypes_view t3 on (t2.id = t3.id)
---- PLAN
PLAN-ROOT SINK
|
04:HASH JOIN [INNER JOIN]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF000 <- functional.alltypes.id
|
|--02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
03:HASH JOIN [INNER JOIN]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF001 <- functional.alltypes.id
|
|--01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| runtime filters: RF000 -> functional.alltypes.id
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.id
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
08:EXCHANGE [UNPARTITIONED]
|
04:HASH JOIN [INNER JOIN, PARTITIONED]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF000 <- functional.alltypes.id
|
|--07:EXCHANGE [HASH(functional.alltypes.id)]
| |
| 02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
03:HASH JOIN [INNER JOIN, PARTITIONED]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF001 <- functional.alltypes.id
|
|--06:EXCHANGE [HASH(functional.alltypes.id)]
| |
| 01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| runtime filters: RF000 -> functional.alltypes.id
|
05:EXCHANGE [HASH(functional.alltypes.id)]
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.id
====
# Self-join views to make sure the using clause is properly set
# in the cloned view instances.
select * from functional.alltypes_view t1
inner join functional.alltypes_view t2 using(id)
inner join functional.alltypes_view t3 using(id)
---- PLAN
PLAN-ROOT SINK
|
04:HASH JOIN [INNER JOIN]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF000 <- functional.alltypes.id
|
|--02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
03:HASH JOIN [INNER JOIN]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF001 <- functional.alltypes.id
|
|--01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| runtime filters: RF000 -> functional.alltypes.id
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.id
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
08:EXCHANGE [UNPARTITIONED]
|
04:HASH JOIN [INNER JOIN, PARTITIONED]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF000 <- functional.alltypes.id
|
|--07:EXCHANGE [HASH(functional.alltypes.id)]
| |
| 02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
03:HASH JOIN [INNER JOIN, PARTITIONED]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF001 <- functional.alltypes.id
|
|--06:EXCHANGE [HASH(functional.alltypes.id)]
| |
| 01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| runtime filters: RF000 -> functional.alltypes.id
|
05:EXCHANGE [HASH(functional.alltypes.id)]
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.id
====
# Self-join of view to make sure the join op is properly set
# in the cloned view instances.
select * from functional.alltypes_view t1
left outer join functional.alltypes_view t2 using(id)
full outer join functional.alltypes_view t3 using(id)
---- PLAN
PLAN-ROOT SINK
|
04:HASH JOIN [FULL OUTER JOIN]
| hash predicates: functional.alltypes.id = functional.alltypes.id
|
|--02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
03:HASH JOIN [LEFT OUTER JOIN]
| hash predicates: functional.alltypes.id = functional.alltypes.id
|
|--01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
08:EXCHANGE [UNPARTITIONED]
|
04:HASH JOIN [FULL OUTER JOIN, PARTITIONED]
| hash predicates: functional.alltypes.id = functional.alltypes.id
|
|--07:EXCHANGE [HASH(functional.alltypes.id)]
| |
| 02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
03:HASH JOIN [LEFT OUTER JOIN, PARTITIONED]
| hash predicates: functional.alltypes.id = functional.alltypes.id
|
|--06:EXCHANGE [HASH(functional.alltypes.id)]
| |
| 01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
05:EXCHANGE [HASH(functional.alltypes.id)]
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
====
# Self-join of view to make sure join hints are properly set
# in the cloned view instances.
# Note that in the plan above without hints the first join uses shuffle
# and the second broadcast.
select * from functional.alltypes_view t1
inner join [broadcast] functional.alltypes_view t2 using(id)
inner join [shuffle] functional.alltypes_view t3 using(id)
---- PLAN
PLAN-ROOT SINK
|
04:HASH JOIN [INNER JOIN]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF000 <- functional.alltypes.id
|
|--02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
03:HASH JOIN [INNER JOIN]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF001 <- functional.alltypes.id
|
|--01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| runtime filters: RF000 -> functional.alltypes.id
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.id
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
08:EXCHANGE [UNPARTITIONED]
|
04:HASH JOIN [INNER JOIN, PARTITIONED]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF000 <- functional.alltypes.id
|
|--07:EXCHANGE [HASH(functional.alltypes.id)]
| |
| 02:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
|
06:EXCHANGE [HASH(functional.alltypes.id)]
|
03:HASH JOIN [INNER JOIN, BROADCAST]
| hash predicates: functional.alltypes.id = functional.alltypes.id
| runtime filters: RF001 <- functional.alltypes.id
|
|--05:EXCHANGE [BROADCAST]
| |
| 01:SCAN HDFS [functional.alltypes]
| partitions=24/24 files=24 size=478.45KB
| runtime filters: RF000 -> functional.alltypes.id
|
00:SCAN HDFS [functional.alltypes]
partitions=24/24 files=24 size=478.45KB
runtime filters: RF000 -> functional.alltypes.id, RF001 -> functional.alltypes.id
====
# Tests that parentheses are preserved when creating a view
# enabling proper partition pruning for this particular view.
select * from functional.alltypes_parens
---- PLAN
PLAN-ROOT SINK
|
00:SCAN HDFS [functional.alltypes]
partitions=1/24 files=1 size=19.95KB
predicates: (int_col < 100 OR bool_col = FALSE)
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
01:EXCHANGE [UNPARTITIONED]
|
00:SCAN HDFS [functional.alltypes]
partitions=1/24 files=1 size=19.95KB
predicates: (int_col < 100 OR bool_col = FALSE)
====
# Tests that slotrefs are correctly marked as assigned inside an inline view where
# possible (see IMPALA-923)
select bool_col FROM ( SELECT bool_col FROM functional.alltypes t ) t WHERE t.bool_col
---- PLAN
PLAN-ROOT SINK
|
00:SCAN HDFS [functional.alltypes t]
partitions=24/24 files=24 size=478.45KB
predicates: bool_col
---- DISTRIBUTEDPLAN
PLAN-ROOT SINK
|
01:EXCHANGE [UNPARTITIONED]
|
00:SCAN HDFS [functional.alltypes t]
partitions=24/24 files=24 size=478.45KB
predicates: bool_col
====