| select * |
| from functional.testtbl t1 join functional.testtbl t2 using(id) |
| where t1.zip = 94611 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: t1.id = t2.id |
| | runtime filters: RF000 <- t2.id |
| | row-size=48B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| predicates: t1.zip = 94611 |
| runtime filters: RF000 -> t1.id |
| row-size=24B cardinality=0 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 04:EXCHANGE [UNPARTITIONED] |
| | |
| 02:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: t1.id = t2.id |
| | runtime filters: RF000 <- t2.id |
| | row-size=48B cardinality=0 |
| | |
| |--03:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| predicates: t1.zip = 94611 |
| runtime filters: RF000 -> t1.id |
| row-size=24B cardinality=0 |
| ==== |
| # general exprs on both sides of equi-join predicates |
| select * |
| from functional.testtbl t1 left outer join functional.testtbl t2 |
| on (t1.id - 1 = t2.id + 1) |
| where t1.zip = 94611 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [LEFT OUTER JOIN] |
| | hash predicates: t1.id - 1 = t2.id + 1 |
| | row-size=48B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| predicates: t1.zip = 94611 |
| row-size=24B cardinality=0 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 04:EXCHANGE [UNPARTITIONED] |
| | |
| 02:HASH JOIN [LEFT OUTER JOIN, BROADCAST] |
| | hash predicates: t1.id - 1 = t2.id + 1 |
| | row-size=48B cardinality=0 |
| | |
| |--03:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| predicates: t1.zip = 94611 |
| row-size=24B cardinality=0 |
| ==== |
| # test that on-clause predicates referring to multiple tuple ids |
| # get registered as eq join conjuncts |
| select t1.* |
| from (select * from functional.alltypestiny) t1 |
| join (select * from functional.alltypestiny) t2 on (t1.id = t2.id) |
| join functional.alltypestiny t3 on (coalesce(t1.id, t2.id) = t3.id) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: coalesce(functional.alltypestiny.id, functional.alltypestiny.id) = t3.id |
| | runtime filters: RF000 <- t3.id |
| | row-size=97B cardinality=8 |
| | |
| |--02:SCAN HDFS [functional.alltypestiny t3] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=4B cardinality=8 |
| | |
| 03:HASH JOIN [INNER JOIN] |
| | hash predicates: functional.alltypestiny.id = functional.alltypestiny.id |
| | runtime filters: RF002 <- functional.alltypestiny.id |
| | row-size=93B cardinality=8 |
| | |
| |--01:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | runtime filters: RF000 -> coalesce(functional.alltypestiny.id, functional.alltypestiny.id) |
| | row-size=4B cardinality=8 |
| | |
| 00:SCAN HDFS [functional.alltypestiny] |
| HDFS partitions=4/4 files=4 size=460B |
| runtime filters: RF000 -> coalesce(functional.alltypestiny.id, functional.alltypestiny.id), RF002 -> functional.alltypestiny.id |
| row-size=89B cardinality=8 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 07:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: coalesce(functional.alltypestiny.id, functional.alltypestiny.id) = t3.id |
| | runtime filters: RF000 <- t3.id |
| | row-size=97B cardinality=8 |
| | |
| |--06:EXCHANGE [BROADCAST] |
| | | |
| | 02:SCAN HDFS [functional.alltypestiny t3] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=4B cardinality=8 |
| | |
| 03:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: functional.alltypestiny.id = functional.alltypestiny.id |
| | runtime filters: RF002 <- functional.alltypestiny.id |
| | row-size=93B cardinality=8 |
| | |
| |--05:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | runtime filters: RF000 -> coalesce(functional.alltypestiny.id, functional.alltypestiny.id) |
| | row-size=4B cardinality=8 |
| | |
| 00:SCAN HDFS [functional.alltypestiny] |
| HDFS partitions=4/4 files=4 size=460B |
| runtime filters: RF000 -> coalesce(functional.alltypestiny.id, functional.alltypestiny.id), RF002 -> functional.alltypestiny.id |
| row-size=89B cardinality=8 |
| ==== |
| # multiple join predicates; |
| # scan predicates get propagated correctly; |
| # non-eq join predicates are evaluated as extra conjuncts by the join node |
| select * |
| from functional.alltypesagg a right outer join functional.alltypessmall b using (id, int_col) |
| where a.day >= 6 |
| and b.month > 2 |
| and a.tinyint_col = 15 |
| and b.string_col = '15' |
| and a.tinyint_col + b.tinyint_col < 15 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [RIGHT OUTER JOIN] |
| | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | other predicates: a.tinyint_col = 15, a.`day` >= 6, a.tinyint_col + b.tinyint_col < 15 |
| | runtime filters: RF000 <- b.id, RF001 <- b.int_col |
| | row-size=184B cardinality=5 |
| | |
| |--01:SCAN HDFS [functional.alltypessmall b] |
| | partition predicates: b.`month` > 2 |
| | HDFS partitions=2/4 files=2 size=3.17KB |
| | predicates: b.string_col = '15' |
| | row-size=89B cardinality=5 |
| | |
| 00:SCAN HDFS [functional.alltypesagg a] |
| partition predicates: a.`day` >= 6 |
| HDFS partitions=5/11 files=5 size=372.38KB |
| predicates: a.tinyint_col = 15 |
| runtime filters: RF000 -> a.id, RF001 -> a.int_col |
| row-size=95B cardinality=556 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 05:EXCHANGE [UNPARTITIONED] |
| | |
| 02:HASH JOIN [RIGHT OUTER JOIN, PARTITIONED] |
| | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | other predicates: a.tinyint_col = 15, a.`day` >= 6, a.tinyint_col + b.tinyint_col < 15 |
| | runtime filters: RF000 <- b.id, RF001 <- b.int_col |
| | row-size=184B cardinality=5 |
| | |
| |--04:EXCHANGE [HASH(b.id,b.int_col)] |
| | | |
| | 01:SCAN HDFS [functional.alltypessmall b] |
| | partition predicates: b.`month` > 2 |
| | HDFS partitions=2/4 files=2 size=3.17KB |
| | predicates: b.string_col = '15' |
| | row-size=89B cardinality=5 |
| | |
| 03:EXCHANGE [HASH(a.id,a.int_col)] |
| | |
| 00:SCAN HDFS [functional.alltypesagg a] |
| partition predicates: a.`day` >= 6 |
| HDFS partitions=5/11 files=5 size=372.38KB |
| predicates: a.tinyint_col = 15 |
| runtime filters: RF000 -> a.id, RF001 -> a.int_col |
| row-size=95B cardinality=556 |
| ==== |
| # same as before, with 3 tables; |
| # non-eq join predicates are evaluated at the correct join node |
| select * |
| from functional.alltypesagg a |
| full outer join functional.alltypessmall b using (id, int_col) |
| right join functional.alltypesaggnonulls c on (a.id = c.id and b.string_col = c.string_col) |
| where a.day >= 6 |
| and b.month > 2 |
| and c.day < 3 |
| and a.tinyint_col = 15 |
| and b.string_col = '15' |
| and a.tinyint_col + b.tinyint_col < 15 |
| and a.float_col - c.double_col < 0 |
| and (b.double_col * c.tinyint_col > 1000 or c.tinyint_col < 1000) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 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.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) |
| | row-size=279B cardinality=2.00K |
| | |
| |--03:HASH JOIN [FULL OUTER JOIN] |
| | | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | | row-size=184B cardinality=561 |
| | | |
| | |--01:SCAN HDFS [functional.alltypessmall b] |
| | | partition predicates: b.`month` > 2 |
| | | HDFS partitions=2/4 files=2 size=3.17KB |
| | | predicates: b.string_col = '15' |
| | | row-size=89B cardinality=5 |
| | | |
| | 00:SCAN HDFS [functional.alltypesagg a] |
| | partition predicates: a.`day` >= 6 |
| | HDFS partitions=5/11 files=5 size=372.38KB |
| | predicates: a.tinyint_col = 15 |
| | row-size=95B cardinality=556 |
| | |
| 02:SCAN HDFS [functional.alltypesaggnonulls c] |
| partition predicates: c.`day` < 3 |
| HDFS partitions=2/10 files=2 size=148.10KB |
| row-size=95B cardinality=2.00K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 09:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [RIGHT OUTER JOIN, PARTITIONED] |
| | hash predicates: a.id = c.id, b.string_col = c.string_col |
| | 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) |
| | runtime filters: RF000 <- c.id, RF001 <- c.string_col |
| | row-size=279B cardinality=2.00K |
| | |
| |--08:EXCHANGE [HASH(c.id,c.string_col)] |
| | | |
| | 02:SCAN HDFS [functional.alltypesaggnonulls c] |
| | partition predicates: c.`day` < 3 |
| | HDFS partitions=2/10 files=2 size=148.10KB |
| | row-size=95B cardinality=2.00K |
| | |
| 07:EXCHANGE [HASH(a.id,b.string_col)] |
| | |
| 03:HASH JOIN [FULL OUTER JOIN, PARTITIONED] |
| | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | row-size=184B cardinality=561 |
| | |
| |--06:EXCHANGE [HASH(b.id,b.int_col)] |
| | | |
| | 01:SCAN HDFS [functional.alltypessmall b] |
| | partition predicates: b.`month` > 2 |
| | HDFS partitions=2/4 files=2 size=3.17KB |
| | predicates: b.string_col = '15' |
| | runtime filters: RF001 -> b.string_col |
| | row-size=89B cardinality=5 |
| | |
| 05:EXCHANGE [HASH(a.id,a.int_col)] |
| | |
| 00:SCAN HDFS [functional.alltypesagg a] |
| partition predicates: a.`day` >= 6 |
| HDFS partitions=5/11 files=5 size=372.38KB |
| predicates: a.tinyint_col = 15 |
| runtime filters: RF000 -> a.id |
| row-size=95B cardinality=556 |
| ==== |
| # equi join with constants in the on clause are not supported |
| select a.id, b.id from |
| (select 1 as x, id from functional.alltypessmall) a |
| inner join |
| (select 1 as x, id from functional.alltypessmall) b |
| on a.x = b.x |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: 1 = 1 |
| | row-size=8B cardinality=100 |
| | |
| |--01:SCAN HDFS [functional.alltypessmall] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=4B cardinality=100 |
| | |
| 00:SCAN HDFS [functional.alltypessmall] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| row-size=4B cardinality=100 |
| ==== |
| # join using values() in a subquery |
| select a.int_col, b.x from functional.alltypessmall a inner join |
| (values(1 as int_col, 'a' as x), (1, 'b'), (2, 'c')) b on a.int_col = b.int_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.int_col = int_col |
| | runtime filters: RF000 <- int_col |
| | row-size=17B cardinality=100 |
| | |
| |--01:UNION |
| | constant-operands=3 |
| | row-size=13B cardinality=3 |
| | |
| 00:SCAN HDFS [functional.alltypessmall a] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| runtime filters: RF000 -> a.int_col |
| row-size=4B cardinality=100 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 04:EXCHANGE [UNPARTITIONED] |
| | |
| 02:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: a.int_col = int_col |
| | runtime filters: RF000 <- int_col |
| | row-size=17B cardinality=100 |
| | |
| |--03:EXCHANGE [BROADCAST] |
| | | |
| | 01:UNION |
| | constant-operands=3 |
| | row-size=13B cardinality=3 |
| | |
| 00:SCAN HDFS [functional.alltypessmall a] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| runtime filters: RF000 -> a.int_col |
| row-size=4B cardinality=100 |
| ==== |
| # hbase-hdfs join |
| select * |
| from functional.alltypesagg join functional_hbase.alltypessmall using (id, int_col) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: functional.alltypesagg.id = functional_hbase.alltypessmall.id, functional.alltypesagg.int_col = functional_hbase.alltypessmall.int_col |
| | runtime filters: RF000 <- functional_hbase.alltypessmall.id, RF001 <- functional_hbase.alltypessmall.int_col |
| | row-size=184B cardinality=53 |
| | |
| |--01:SCAN HBASE [functional_hbase.alltypessmall] |
| | row-size=89B cardinality=50 |
| | |
| 00:SCAN HDFS [functional.alltypesagg] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> functional.alltypesagg.id, RF001 -> functional.alltypesagg.int_col |
| row-size=95B cardinality=11.00K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 04:EXCHANGE [UNPARTITIONED] |
| | |
| 02:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: functional.alltypesagg.id = functional_hbase.alltypessmall.id, functional.alltypesagg.int_col = functional_hbase.alltypessmall.int_col |
| | runtime filters: RF000 <- functional_hbase.alltypessmall.id, RF001 <- functional_hbase.alltypessmall.int_col |
| | row-size=184B cardinality=53 |
| | |
| |--03:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HBASE [functional_hbase.alltypessmall] |
| | row-size=89B cardinality=50 |
| | |
| 00:SCAN HDFS [functional.alltypesagg] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> functional.alltypesagg.id, RF001 -> functional.alltypesagg.int_col |
| row-size=95B cardinality=11.00K |
| ==== |
| # hbase-hdfs join with scan filtering |
| select * |
| from functional.alltypesagg a join functional_hbase.stringids b |
| on (a.id = cast(b.id as int) and a.int_col = b.int_col) |
| where a.day >= 6 |
| and a.tinyint_col = 15 |
| and b.id = '5' |
| and b.tinyint_col = 5 |
| and a.tinyint_col + b.tinyint_col < 15 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.int_col = b.int_col, a.id = CAST(b.id AS INT) |
| | other predicates: a.tinyint_col + b.tinyint_col < 15 |
| | runtime filters: RF000 <- b.int_col, RF001 <- CAST(b.id AS INT) |
| | row-size=202B cardinality=11 |
| | |
| |--01:SCAN HBASE [functional_hbase.stringids b] |
| | key predicates: b.id = '5' |
| | start key: 5 |
| | stop key: 5\0 |
| | predicates: b.tinyint_col = 5 |
| | row-size=107B cardinality=1 |
| | |
| 00:SCAN HDFS [functional.alltypesagg a] |
| partition predicates: a.`day` >= 6 |
| HDFS partitions=5/11 files=5 size=372.38KB |
| predicates: a.tinyint_col = 15 |
| runtime filters: RF000 -> a.int_col, RF001 -> a.id |
| row-size=95B cardinality=556 |
| ---- SCANRANGELOCATIONS |
| NODE 0: |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=10/100110.txt 0:76263 |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=6/100106.txt 0:76263 |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=7/100107.txt 0:76263 |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=8/100108.txt 0:76263 |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=9/100109.txt 0:76263 |
| NODE 1: |
| HBASE KEYRANGE 5:5\0 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 04:EXCHANGE [UNPARTITIONED] |
| | |
| 02:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: a.int_col = b.int_col, a.id = CAST(b.id AS INT) |
| | other predicates: a.tinyint_col + b.tinyint_col < 15 |
| | runtime filters: RF000 <- b.int_col, RF001 <- CAST(b.id AS INT) |
| | row-size=202B cardinality=11 |
| | |
| |--03:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HBASE [functional_hbase.stringids b] |
| | key predicates: b.id = '5' |
| | start key: 5 |
| | stop key: 5\0 |
| | predicates: b.tinyint_col = 5 |
| | row-size=107B cardinality=1 |
| | |
| 00:SCAN HDFS [functional.alltypesagg a] |
| partition predicates: a.`day` >= 6 |
| HDFS partitions=5/11 files=5 size=372.38KB |
| predicates: a.tinyint_col = 15 |
| runtime filters: RF000 -> a.int_col, RF001 -> a.id |
| row-size=95B cardinality=556 |
| ==== |
| # hbase-hdfs join with scan filtering (bogus) |
| select * |
| from functional.alltypesagg a join functional_hbase.stringids b |
| on (a.id = cast(b.id as int) and a.int_col = b.int_col) |
| where a.day >= 6 |
| and a.tinyint_col = 15 |
| and b.id = '5' |
| and b.tinyint_col = 5 |
| and b.tinyint_col > 123 |
| and a.tinyint_col + b.tinyint_col < 15 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.int_col = b.int_col, a.id = CAST(b.id AS INT) |
| | other predicates: a.tinyint_col + b.tinyint_col < 15 |
| | runtime filters: RF000 <- b.int_col, RF001 <- CAST(b.id AS INT) |
| | row-size=202B cardinality=0 |
| | |
| |--01:EMPTYSET |
| | |
| 00:SCAN HDFS [functional.alltypesagg a] |
| partition predicates: a.`day` >= 6 |
| HDFS partitions=5/11 files=5 size=372.38KB |
| predicates: a.tinyint_col = 15 |
| runtime filters: RF000 -> a.int_col, RF001 -> a.id |
| row-size=95B cardinality=556 |
| ---- SCANRANGELOCATIONS |
| NODE 0: |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=10/100110.txt 0:76263 |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=6/100106.txt 0:76263 |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=7/100107.txt 0:76263 |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=8/100108.txt 0:76263 |
| HDFS SPLIT hdfs://localhost:20500/test-warehouse/alltypesagg/year=2010/month=1/day=9/100109.txt 0:76263 |
| ==== |
| # left join followed by right join and then aggregate |
| select x.tinyint_col, count(x.day) |
| from ( |
| select a.day day, c.tinyint_col tinyint_col |
| from functional.alltypesagg a |
| join functional.alltypessmall b using (id, int_col) |
| right outer join functional.alltypesnopart c on (b.id = c.id) |
| join functional.alltypesagg d on (a.id = d.id) |
| order by 1,2 |
| limit 10 |
| ) x |
| where x.day >= 6 |
| group by x.tinyint_col |
| order by 2 |
| limit 5 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 10:TOP-N [LIMIT=5] |
| | order by: count(x.`day`) ASC |
| | row-size=9B cardinality=1 |
| | |
| 09:AGGREGATE [FINALIZE] |
| | output: count(day) |
| | group by: tinyint_col |
| | row-size=9B cardinality=1 |
| | |
| 08:SELECT |
| | predicates: day >= 6 |
| | row-size=5B cardinality=1 |
| | |
| 07:TOP-N [LIMIT=10] |
| | order by: day ASC, tinyint_col ASC |
| | row-size=5B cardinality=10 |
| | |
| 06:HASH JOIN [INNER JOIN] |
| | hash predicates: d.id = a.id |
| | runtime filters: RF000 <- a.id |
| | row-size=29B cardinality=113 |
| | |
| |--05:HASH JOIN [RIGHT OUTER JOIN] |
| | | hash predicates: b.id = c.id |
| | | runtime filters: RF002 <- c.id |
| | | row-size=25B cardinality=106 |
| | | |
| | |--02:SCAN HDFS [functional.alltypesnopart c] |
| | | HDFS partitions=1/1 files=0 size=0B |
| | | row-size=5B cardinality=0 |
| | | |
| | 04:HASH JOIN [INNER JOIN] |
| | | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | | runtime filters: RF004 <- b.id, RF005 <- b.int_col |
| | | row-size=20B cardinality=106 |
| | | |
| | |--01:SCAN HDFS [functional.alltypessmall b] |
| | | HDFS partitions=4/4 files=4 size=6.32KB |
| | | runtime filters: RF002 -> b.id |
| | | row-size=8B cardinality=100 |
| | | |
| | 00:SCAN HDFS [functional.alltypesagg a] |
| | HDFS partitions=11/11 files=11 size=814.73KB |
| | runtime filters: RF002 -> a.id, RF004 -> a.id, RF005 -> a.int_col |
| | row-size=12B cardinality=11.00K |
| | |
| 03:SCAN HDFS [functional.alltypesagg d] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> d.id |
| row-size=4B cardinality=11.00K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 10:TOP-N [LIMIT=5] |
| | order by: count(x.`day`) ASC |
| | row-size=9B cardinality=1 |
| | |
| 09:AGGREGATE [FINALIZE] |
| | output: count(day) |
| | group by: tinyint_col |
| | row-size=9B cardinality=1 |
| | |
| 08:SELECT |
| | predicates: day >= 6 |
| | row-size=5B cardinality=1 |
| | |
| 15:MERGING-EXCHANGE [UNPARTITIONED] |
| | order by: day ASC, tinyint_col ASC |
| | limit: 10 |
| | |
| 07:TOP-N [LIMIT=10] |
| | order by: day ASC, tinyint_col ASC |
| | row-size=5B cardinality=10 |
| | |
| 06:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: d.id = a.id |
| | runtime filters: RF000 <- a.id |
| | row-size=29B cardinality=113 |
| | |
| |--14:EXCHANGE [BROADCAST] |
| | | |
| | 05:HASH JOIN [RIGHT OUTER JOIN, PARTITIONED] |
| | | hash predicates: b.id = c.id |
| | | runtime filters: RF002 <- c.id |
| | | row-size=25B cardinality=106 |
| | | |
| | |--13:EXCHANGE [HASH(c.id)] |
| | | | |
| | | 02:SCAN HDFS [functional.alltypesnopart c] |
| | | HDFS partitions=1/1 files=0 size=0B |
| | | row-size=5B cardinality=0 |
| | | |
| | 12:EXCHANGE [HASH(b.id)] |
| | | |
| | 04:HASH JOIN [INNER JOIN, BROADCAST] |
| | | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | | runtime filters: RF004 <- b.id, RF005 <- b.int_col |
| | | row-size=20B cardinality=106 |
| | | |
| | |--11:EXCHANGE [BROADCAST] |
| | | | |
| | | 01:SCAN HDFS [functional.alltypessmall b] |
| | | HDFS partitions=4/4 files=4 size=6.32KB |
| | | runtime filters: RF002 -> b.id |
| | | row-size=8B cardinality=100 |
| | | |
| | 00:SCAN HDFS [functional.alltypesagg a] |
| | HDFS partitions=11/11 files=11 size=814.73KB |
| | runtime filters: RF002 -> a.id, RF004 -> a.id, RF005 -> a.int_col |
| | row-size=12B cardinality=11.00K |
| | |
| 03:SCAN HDFS [functional.alltypesagg d] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> d.id |
| row-size=4B cardinality=11.00K |
| ==== |
| # join without "other join conjuncts" |
| select * from functional.alltypessmall a, functional.alltypessmall b where a.id = b.id limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.id = b.id |
| | runtime filters: RF000 <- b.id |
| | limit: 1 |
| | row-size=178B cardinality=1 |
| | |
| |--01:SCAN HDFS [functional.alltypessmall b] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=89B cardinality=100 |
| | |
| 00:SCAN HDFS [functional.alltypessmall a] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| runtime filters: RF000 -> a.id |
| row-size=89B cardinality=100 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 05:EXCHANGE [UNPARTITIONED] |
| | limit: 1 |
| | |
| 02:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: a.id = b.id |
| | runtime filters: RF000 <- b.id |
| | limit: 1 |
| | row-size=178B cardinality=1 |
| | |
| |--04:EXCHANGE [HASH(b.id)] |
| | | |
| | 01:SCAN HDFS [functional.alltypessmall b] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=89B cardinality=100 |
| | |
| 03:EXCHANGE [HASH(a.id)] |
| | |
| 00:SCAN HDFS [functional.alltypessmall a] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| runtime filters: RF000 -> a.id |
| row-size=89B cardinality=100 |
| ==== |
| # join conjunct is derived from equivalence classes |
| # (no explicit join conjunct between t1 and t2) |
| select * |
| from functional.testtbl t1, functional.testtbl t2, functional.testtbl t3 |
| where t1.id = t3.id and t2.id = t3.id |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: t1.id = t3.id |
| | runtime filters: RF000 <- t3.id |
| | row-size=72B cardinality=0 |
| | |
| |--02:SCAN HDFS [functional.testtbl t3] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 03:HASH JOIN [INNER JOIN] |
| | hash predicates: t1.id = t2.id |
| | runtime filters: RF002 <- t2.id |
| | row-size=48B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | runtime filters: RF000 -> t2.id |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| runtime filters: RF000 -> t1.id, RF002 -> t1.id |
| row-size=24B cardinality=0 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 07:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: t1.id = t3.id |
| | runtime filters: RF000 <- t3.id |
| | row-size=72B cardinality=0 |
| | |
| |--06:EXCHANGE [BROADCAST] |
| | | |
| | 02:SCAN HDFS [functional.testtbl t3] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 03:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: t1.id = t2.id |
| | runtime filters: RF002 <- t2.id |
| | row-size=48B cardinality=0 |
| | |
| |--05:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | runtime filters: RF000 -> t2.id |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| runtime filters: RF000 -> t1.id, RF002 -> t1.id |
| row-size=24B cardinality=0 |
| ==== |
| # join involving a table with no table stats (functional.emptytable) |
| # tests that the default join strategy is broadcast |
| select * from functional.emptytable a inner join |
| functional.alltypes b on a.f2 = b.int_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: b.int_col = a.f2 |
| | runtime filters: RF000 <- a.f2 |
| | row-size=105B cardinality=7.30K |
| | |
| |--00:SCAN HDFS [functional.emptytable a] |
| | partitions=0/0 files=0 size=0B |
| | row-size=16B cardinality=0 |
| | |
| 01:SCAN HDFS [functional.alltypes b] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> b.int_col |
| row-size=89B cardinality=7.30K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 04:EXCHANGE [UNPARTITIONED] |
| | |
| 02:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: b.int_col = a.f2 |
| | runtime filters: RF000 <- a.f2 |
| | row-size=105B cardinality=7.30K |
| | |
| |--03:EXCHANGE [BROADCAST] |
| | | |
| | 00:SCAN HDFS [functional.emptytable a] |
| | partitions=0/0 files=0 size=0B |
| | row-size=16B cardinality=0 |
| | |
| 01:SCAN HDFS [functional.alltypes b] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> b.int_col |
| row-size=89B cardinality=7.30K |
| ==== |
| # cross join |
| select * |
| from functional.testtbl t1 cross join functional.testtbl |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:NESTED LOOP JOIN [CROSS JOIN] |
| | row-size=48B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional.testtbl] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| row-size=24B cardinality=0 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 04:EXCHANGE [UNPARTITIONED] |
| | |
| 02:NESTED LOOP JOIN [CROSS JOIN, BROADCAST] |
| | row-size=48B cardinality=0 |
| | |
| |--03:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.testtbl] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| row-size=24B cardinality=0 |
| ==== |
| # cross join with where clause |
| select * |
| from functional.testtbl t1 cross join functional.testtbl t2 where t1.id < t2.id |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: t1.id < t2.id |
| | row-size=48B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| row-size=24B cardinality=0 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 04:EXCHANGE [UNPARTITIONED] |
| | |
| 02:NESTED LOOP JOIN [INNER JOIN, BROADCAST] |
| | predicates: t1.id < t2.id |
| | row-size=48B cardinality=0 |
| | |
| |--03:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| row-size=24B cardinality=0 |
| ==== |
| # Tests that the partitioned join between b and c exploits the existing |
| # data partition of its lhs input. |
| select * from functional.alltypes a |
| inner join [shuffle] functional.alltypes b |
| on (a.id = b.id and b.int_col = a.int_col) |
| inner join [shuffle] functional.alltypes c |
| on (b.id = c.id and c.int_col = b.int_col) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: b.id = c.id, b.int_col = c.int_col |
| | runtime filters: RF000 <- c.id, RF001 <- c.int_col |
| | row-size=267B cardinality=7.30K |
| | |
| |--02:SCAN HDFS [functional.alltypes c] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=89B cardinality=7.30K |
| | |
| 03:HASH JOIN [INNER JOIN] |
| | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | runtime filters: RF004 <- b.id, RF005 <- b.int_col |
| | row-size=178B cardinality=7.30K |
| | |
| |--01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> b.id, RF001 -> b.int_col |
| | row-size=89B cardinality=7.30K |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.id, RF001 -> a.int_col, RF004 -> a.id, RF005 -> a.int_col |
| row-size=89B cardinality=7.30K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 08:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: b.id = c.id, b.int_col = c.int_col |
| | runtime filters: RF000 <- c.id, RF001 <- c.int_col |
| | row-size=267B cardinality=7.30K |
| | |
| |--07:EXCHANGE [HASH(c.id,c.int_col)] |
| | | |
| | 02:SCAN HDFS [functional.alltypes c] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=89B cardinality=7.30K |
| | |
| 03:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | runtime filters: RF004 <- b.id, RF005 <- b.int_col |
| | row-size=178B cardinality=7.30K |
| | |
| |--06:EXCHANGE [HASH(b.id,b.int_col)] |
| | | |
| | 01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> b.id, RF001 -> b.int_col |
| | row-size=89B cardinality=7.30K |
| | |
| 05:EXCHANGE [HASH(a.id,a.int_col)] |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.id, RF001 -> a.int_col, RF004 -> a.id, RF005 -> a.int_col |
| row-size=89B cardinality=7.30K |
| ==== |
| # Tests that the partitioned join between a and b exploits the existing |
| # data partition of its rhs input. |
| select * from functional.alltypes a |
| inner join [shuffle] |
| (select count(*), int_col, bool_col |
| from functional.alltypes group by int_col, bool_col) b |
| on (a.int_col = b.int_col and b.bool_col = a.bool_col) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 03:HASH JOIN [INNER JOIN] |
| | hash predicates: a.bool_col = bool_col, a.int_col = int_col |
| | runtime filters: RF000 <- bool_col, RF001 <- int_col |
| | row-size=102B cardinality=14.60K |
| | |
| |--02:AGGREGATE [FINALIZE] |
| | | output: count(*) |
| | | group by: int_col, bool_col |
| | | row-size=13B cardinality=20 |
| | | |
| | 01:SCAN HDFS [functional.alltypes] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=5B cardinality=7.30K |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col |
| row-size=89B cardinality=7.30K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 07:EXCHANGE [UNPARTITIONED] |
| | |
| 03:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: a.bool_col = bool_col, a.int_col = int_col |
| | runtime filters: RF000 <- bool_col, RF001 <- int_col |
| | row-size=102B cardinality=14.60K |
| | |
| |--05:AGGREGATE [FINALIZE] |
| | | output: count:merge(*) |
| | | group by: int_col, bool_col |
| | | row-size=13B cardinality=20 |
| | | |
| | 04:EXCHANGE [HASH(int_col,bool_col)] |
| | | |
| | 02:AGGREGATE [STREAMING] |
| | | output: count(*) |
| | | group by: int_col, bool_col |
| | | row-size=13B cardinality=20 |
| | | |
| | 01:SCAN HDFS [functional.alltypes] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=5B cardinality=7.30K |
| | |
| 06:EXCHANGE [HASH(a.int_col,a.bool_col)] |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col |
| row-size=89B cardinality=7.30K |
| ==== |
| # Tests that the partitioned join between b and c exploits the existing |
| # data partition of its lhs and rhs inputs. |
| select * from functional.alltypes a |
| inner join [shuffle] functional.alltypes b |
| on(a.int_col = b.int_col and b.bool_col = a.bool_col) |
| inner join [shuffle] |
| (select count(*), int_col, bool_col |
| from functional.alltypes group by int_col, bool_col) c |
| on (b.int_col = c.int_col and c.bool_col = b.bool_col) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 05:HASH JOIN [INNER JOIN] |
| | hash predicates: a.bool_col = b.bool_col, a.int_col = b.int_col |
| | runtime filters: RF000 <- b.bool_col, RF001 <- b.int_col |
| | row-size=191B cardinality=10.66M |
| | |
| |--01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=89B cardinality=7.30K |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: a.bool_col = bool_col, a.int_col = int_col |
| | runtime filters: RF004 <- bool_col, RF005 <- int_col |
| | row-size=102B cardinality=14.60K |
| | |
| |--03:AGGREGATE [FINALIZE] |
| | | output: count(*) |
| | | group by: int_col, bool_col |
| | | row-size=13B cardinality=20 |
| | | |
| | 02:SCAN HDFS [functional.alltypes] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> functional.alltypes.bool_col, RF001 -> functional.alltypes.int_col |
| | row-size=5B cardinality=7.30K |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col, RF004 -> a.bool_col, RF005 -> a.int_col |
| row-size=89B cardinality=7.30K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 10:EXCHANGE [UNPARTITIONED] |
| | |
| 05:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: a.bool_col = b.bool_col, a.int_col = b.int_col |
| | runtime filters: RF000 <- b.bool_col, RF001 <- b.int_col |
| | row-size=191B cardinality=10.66M |
| | |
| |--09:EXCHANGE [HASH(b.int_col,b.bool_col)] |
| | | |
| | 01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=89B cardinality=7.30K |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: a.bool_col = bool_col, a.int_col = int_col |
| | runtime filters: RF004 <- bool_col, RF005 <- int_col |
| | row-size=102B cardinality=14.60K |
| | |
| |--07:AGGREGATE [FINALIZE] |
| | | output: count:merge(*) |
| | | group by: int_col, bool_col |
| | | row-size=13B cardinality=20 |
| | | |
| | 06:EXCHANGE [HASH(int_col,bool_col)] |
| | | |
| | 03:AGGREGATE [STREAMING] |
| | | output: count(*) |
| | | group by: int_col, bool_col |
| | | row-size=13B cardinality=20 |
| | | |
| | 02:SCAN HDFS [functional.alltypes] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> functional.alltypes.bool_col, RF001 -> functional.alltypes.int_col |
| | row-size=5B cardinality=7.30K |
| | |
| 08:EXCHANGE [HASH(a.int_col,a.bool_col)] |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col, RF004 -> a.bool_col, RF005 -> a.int_col |
| row-size=89B cardinality=7.30K |
| ==== |
| # Tests that all predicates from the On-clause are applied (IMPALA-805) |
| # and that slot equivalences are enforced at lowest possible plan node. |
| select 1 from functional.alltypes a |
| inner join functional.alltypes b |
| # first equivalence class |
| on a.id = b.id and a.id = b.int_col and a.id = b.bigint_col |
| and a.tinyint_col = b.id and a.smallint_col = b.id |
| and a.int_col = b.id and a.bigint_col = b.id |
| # second equivalence class |
| and b.string_col = a.string_col and b.date_string_col = a.string_col |
| # redundant predicates to test minimal spanning tree of equivalent slots at a |
| where a.tinyint_col = a.smallint_col and a.int_col = a.bigint_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: b.id = a.id, b.string_col = a.string_col |
| | runtime filters: RF000 <- a.id, RF001 <- a.string_col |
| | row-size=81B cardinality=73 |
| | |
| |--00:SCAN HDFS [functional.alltypes a] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | predicates: a.id = a.int_col, a.id = a.tinyint_col, a.int_col = a.bigint_col, a.tinyint_col = a.smallint_col |
| | row-size=32B cardinality=730 |
| | |
| 01:SCAN HDFS [functional.alltypes b] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| predicates: b.id = b.int_col, b.id = b.bigint_col, b.string_col = b.date_string_col |
| runtime filters: RF000 -> b.id, RF001 -> b.string_col |
| row-size=49B cardinality=730 |
| ==== |
| # Tests that all predicates from the On-clause are applied (IMPALA-805). |
| select 1 from functional.alltypes a |
| left outer join functional.alltypes b |
| # first equivalence class |
| on a.id = b.id and a.id = b.int_col and a.id = b.bigint_col |
| and a.tinyint_col = b.id and a.smallint_col = b.id |
| and a.int_col = b.id and a.bigint_col = b.id |
| # second equivalence class |
| and b.string_col = a.string_col and b.date_string_col = a.string_col |
| # redundant predicates to test minimal spanning tree of equivalent slots at a |
| where a.tinyint_col = a.smallint_col and a.int_col = a.bigint_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [RIGHT OUTER JOIN] |
| | 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 |
| | row-size=81B cardinality=730 |
| | |
| |--00:SCAN HDFS [functional.alltypes a] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | predicates: a.int_col = a.bigint_col, a.tinyint_col = a.smallint_col |
| | row-size=32B cardinality=730 |
| | |
| 01:SCAN HDFS [functional.alltypes b] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| 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 |
| row-size=49B cardinality=7.30K |
| ==== |
| # Tests elimination of redundant join predicates (IMPALA-912). |
| select * from |
| functional.alltypes a |
| inner join functional.alltypestiny b |
| on (a.id = b.id and a.int_col = b.int_col) |
| inner join functional.alltypessmall c |
| on (b.id = c.id and b.int_col = c.int_col) |
| # redundant join predicates |
| where a.id = c.id and a.int_col = c.int_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: c.id = b.id, c.int_col = b.int_col |
| | runtime filters: RF000 <- b.id, RF001 <- b.int_col |
| | row-size=267B cardinality=8 |
| | |
| |--03:HASH JOIN [INNER JOIN] |
| | | hash predicates: a.id = b.id, a.int_col = b.int_col |
| | | runtime filters: RF004 <- b.id, RF005 <- b.int_col |
| | | row-size=178B cardinality=8 |
| | | |
| | |--01:SCAN HDFS [functional.alltypestiny b] |
| | | HDFS partitions=4/4 files=4 size=460B |
| | | row-size=89B cardinality=8 |
| | | |
| | 00:SCAN HDFS [functional.alltypes a] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF004 -> a.id, RF005 -> a.int_col |
| | row-size=89B cardinality=7.30K |
| | |
| 02:SCAN HDFS [functional.alltypessmall c] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| runtime filters: RF000 -> c.id, RF001 -> c.int_col |
| row-size=89B cardinality=100 |
| ==== |
| # Tests elimination of redundant join predicates (IMPALA-912). |
| # This test relies on the desired join order b,a,c which requires |
| # inference of the predicate 'b.int_col = a.id' which makes one of |
| # the original predicates redundant. |
| select * from |
| functional.alltypestiny a, |
| functional.alltypes b, |
| functional.alltypessmall c |
| where a.id = c.id and b.int_col = c.int_col and b.int_col = c.id |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: a.id = c.id |
| | runtime filters: RF000 <- c.id |
| | row-size=267B cardinality=5.84K |
| | |
| |--02:SCAN HDFS [functional.alltypessmall c] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | predicates: c.id = c.int_col |
| | row-size=89B cardinality=10 |
| | |
| 03:HASH JOIN [INNER JOIN] |
| | hash predicates: b.int_col = a.id |
| | runtime filters: RF002 <- a.id |
| | row-size=178B cardinality=5.84K |
| | |
| |--00:SCAN HDFS [functional.alltypestiny a] |
| | HDFS partitions=4/4 files=4 size=460B |
| | runtime filters: RF000 -> a.id |
| | row-size=89B cardinality=8 |
| | |
| 01:SCAN HDFS [functional.alltypes b] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> b.int_col, RF002 -> b.int_col |
| row-size=89B cardinality=7.30K |
| ==== |
| # Tests elimination of redundant join predicates (IMPALA-912) |
| # and that slot equivalences are enforced at the lowest possible plan node. |
| select a.* from |
| (select int_col, smallint_col, count(*) c from functional.alltypes |
| group by 1, 2) a |
| inner join |
| (select int_col, smallint_col, count(*) c from functional.alltypessmall |
| group by 1, 2) b |
| on a.int_col = b.int_col and a.int_col = b.smallint_col and a.int_col = b.c |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: int_col = int_col |
| | runtime filters: RF000 <- int_col |
| | row-size=28B cardinality=100 |
| | |
| |--03:AGGREGATE [FINALIZE] |
| | | output: count(*) |
| | | group by: int_col, smallint_col |
| | | having: int_col = count(*) |
| | | row-size=14B cardinality=1 |
| | | |
| | 02:SCAN HDFS [functional.alltypessmall] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | predicates: functional.alltypessmall.int_col = functional.alltypessmall.smallint_col |
| | row-size=6B cardinality=10 |
| | |
| 01:AGGREGATE [FINALIZE] |
| | output: count(*) |
| | group by: int_col, smallint_col |
| | row-size=14B cardinality=100 |
| | |
| 00:SCAN HDFS [functional.alltypes] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> functional.alltypes.int_col |
| row-size=6B cardinality=7.30K |
| ==== |
| # Test retainment of join predicates referencing outer-joined tuples |
| # that are otherwise redundant (equivalence class already covered |
| # by another predicate). Regression test for IMPALA-1118. |
| # Force a partitioned join to excercise removal of redundant hash exprs. |
| select t3.int_col, t2.bigint_col |
| from functional.alltypes t1 |
| left outer join [shuffle] functional.alltypesagg t2 |
| on t2.smallint_col = t1.smallint_col |
| inner join [shuffle] functional.alltypestiny t3 |
| on t3.int_col = t1.smallint_col |
| # equivalence class already covered by predicates in scans, plus the join |
| # conditions up to here; still need to retain this predicate to remove |
| # tuples with t2.bigint_col IS NULL |
| and t3.int_col = t2.bigint_col |
| # predicate is redundant because t2.bigint_col IS NOT NULL has |
| # already been established by 't3.int_col = t2.bigint_col' |
| and t3.bigint_col = t2.bigint_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: t1.smallint_col = t3.int_col, t2.bigint_col = t3.int_col |
| | runtime filters: RF000 <- t3.int_col, RF001 <- t3.int_col |
| | row-size=24B cardinality=821 |
| | |
| |--02:SCAN HDFS [functional.alltypestiny t3] |
| | HDFS partitions=4/4 files=4 size=460B |
| | predicates: t3.int_col = t3.bigint_col |
| | row-size=12B cardinality=1 |
| | |
| 03:HASH JOIN [RIGHT OUTER JOIN] |
| | hash predicates: t2.smallint_col = t1.smallint_col |
| | runtime filters: RF004 <- t1.smallint_col |
| | row-size=12B cardinality=827.84K |
| | |
| |--00:SCAN HDFS [functional.alltypes t1] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> t1.smallint_col, RF001 -> t1.smallint_col |
| | row-size=2B cardinality=7.30K |
| | |
| 01:SCAN HDFS [functional.alltypesagg t2] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> t2.smallint_col, RF001 -> t2.bigint_col, RF004 -> t2.smallint_col |
| row-size=10B cardinality=11.00K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 08:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: t1.smallint_col = t3.int_col, t2.bigint_col = t3.int_col |
| | runtime filters: RF000 <- t3.int_col, RF001 <- t3.int_col |
| | row-size=24B cardinality=821 |
| | |
| |--07:EXCHANGE [HASH(t3.int_col)] |
| | | |
| | 02:SCAN HDFS [functional.alltypestiny t3] |
| | HDFS partitions=4/4 files=4 size=460B |
| | predicates: t3.int_col = t3.bigint_col |
| | row-size=12B cardinality=1 |
| | |
| 03:HASH JOIN [RIGHT OUTER JOIN, PARTITIONED] |
| | hash predicates: t2.smallint_col = t1.smallint_col |
| | runtime filters: RF004 <- t1.smallint_col |
| | row-size=12B cardinality=827.84K |
| | |
| |--06:EXCHANGE [HASH(t1.smallint_col)] |
| | | |
| | 00:SCAN HDFS [functional.alltypes t1] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> t1.smallint_col, RF001 -> t1.smallint_col |
| | row-size=2B cardinality=7.30K |
| | |
| 05:EXCHANGE [HASH(t2.smallint_col)] |
| | |
| 01:SCAN HDFS [functional.alltypesagg t2] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> t2.smallint_col, RF001 -> t2.bigint_col, RF004 -> t2.smallint_col |
| row-size=10B cardinality=11.00K |
| ==== |
| # Test correct removal of redundant join predicates (IMPALA-1353): |
| # Equivalences among inline-view slots are enforced. The predicates |
| # are migrated into the inline view plan. |
| select 1 |
| from functional.alltypes a |
| inner join |
| (select id+id as x, tinyint_col, |
| int_col*int_col as y, bigint_col |
| from functional.alltypessmall) b |
| 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 |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.id = id + id, a.int_col = int_col * int_col |
| | runtime filters: RF000 <- id + id, RF001 <- int_col * int_col |
| | row-size=25B cardinality=7.30K |
| | |
| |--01:SCAN HDFS [functional.alltypessmall] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | predicates: int_col * int_col = bigint_col, id + id = tinyint_col |
| | row-size=17B cardinality=10 |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.id, RF001 -> a.int_col |
| row-size=8B cardinality=7.30K |
| ==== |
| # Test correct removal of redundant join predicates (IMPALA-1353): |
| # Equivalences among inline-view slots are enforced. The predicates |
| # are assigned to a SelectNode because the inline view has a limit. |
| select 1 |
| from functional.alltypes a |
| inner join |
| (select id+id as x, tinyint_col, |
| int_col*int_col as y, bigint_col |
| from functional.alltypessmall |
| order by tinyint_col limit 20) b |
| 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 |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: a.id = id + id, a.int_col = int_col * int_col |
| | runtime filters: RF000 <- id + id, RF001 <- int_col * int_col |
| | row-size=25B cardinality=7.30K |
| | |
| |--03:SELECT |
| | | predicates: int_col * int_col = bigint_col, id + id = tinyint_col |
| | | row-size=17B cardinality=2 |
| | | |
| | 02:TOP-N [LIMIT=20] |
| | | order by: tinyint_col ASC |
| | | row-size=17B cardinality=20 |
| | | |
| | 01:SCAN HDFS [functional.alltypessmall] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=17B cardinality=100 |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.id, RF001 -> a.int_col |
| row-size=8B cardinality=7.30K |
| ==== |
| # Test correct removal of redundant join predicates (IMPALA-1353): |
| # Equivalences among inline-view slots are enforced. The predicates |
| # are assigned to a SelectNode because the inline view has analytics. |
| select 1 |
| from functional.alltypes a |
| inner join |
| (select id+id as x, sum(tinyint_col) over() tinyint_col, |
| int_col*int_col as y, count(bigint_col) over() bigint_col |
| from functional.alltypessmall |
| order by tinyint_col limit 20) b |
| 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 |
| PLAN-ROOT SINK |
| | |
| 05:HASH JOIN [INNER JOIN] |
| | hash predicates: a.id = id + id, a.int_col = int_col * int_col |
| | runtime filters: RF000 <- id + id, RF001 <- int_col * int_col |
| | row-size=32B cardinality=7.30K |
| | |
| |--04:SELECT |
| | | predicates: id + id = sum(tinyint_col), int_col * int_col = count(bigint_col) |
| | | row-size=24B cardinality=2 |
| | | |
| | 03:TOP-N [LIMIT=20] |
| | | order by: sum(tinyint_col) ASC |
| | | row-size=24B cardinality=20 |
| | | |
| | 02:ANALYTIC |
| | | functions: sum(tinyint_col), count(bigint_col) |
| | | row-size=33B cardinality=100 |
| | | |
| | 01:SCAN HDFS [functional.alltypessmall] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=17B cardinality=100 |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.id, RF001 -> a.int_col |
| row-size=8B cardinality=7.30K |
| ==== |
| # IMPALA-1353/IMPALA-4916: Test correct removal of redundant join predicates. |
| select 1 |
| from functional.alltypes a |
| inner join |
| (select id+id x, tinyint_col, int_col*int_col y, bigint_col |
| from functional.alltypessmall |
| union all |
| select id-id x, tinyint_col, int_col/int_col y, bigint_col |
| from functional.alltypestiny) b |
| 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 |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: a.id = x, a.int_col = y |
| | runtime filters: RF000 <- x, RF001 <- y |
| | row-size=33B cardinality=7.30K |
| | |
| |--01:UNION |
| | | row-size=25B cardinality=11 |
| | | |
| | |--03:SCAN HDFS [functional.alltypestiny] |
| | | HDFS partitions=4/4 files=4 size=460B |
| | | predicates: id - id = tinyint_col, int_col / int_col = bigint_col |
| | | row-size=17B cardinality=1 |
| | | |
| | 02:SCAN HDFS [functional.alltypessmall] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | predicates: int_col * int_col = bigint_col, id + id = tinyint_col |
| | row-size=17B cardinality=10 |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.id, RF001 -> a.int_col |
| row-size=8B cardinality=7.30K |
| ==== |
| # Test creation of predicates at a join node for constructing the |
| # minimum spanning tree to cover known slot equivalences (IMPALA-1102). |
| select straight_join t1.smallint_col AS smallint_col_1 |
| from functional.alltypesagg t1 |
| inner join functional.alltypestiny t3 |
| on t3.smallint_col = t1.tinyint_col |
| inner join functional.alltypes t2 |
| on t2.string_col = t1.string_col and t3.date_string_col = t2.string_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: t1.string_col = t2.string_col |
| | runtime filters: RF000 <- t2.string_col |
| | row-size=53B cardinality=33.58K |
| | |
| |--02:SCAN HDFS [functional.alltypes t2] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=13B cardinality=7.30K |
| | |
| 03:HASH JOIN [INNER JOIN] |
| | hash predicates: t1.tinyint_col = t3.smallint_col, t1.string_col = t3.date_string_col |
| | runtime filters: RF002 <- t3.smallint_col, RF003 <- t3.date_string_col |
| | row-size=40B cardinality=46 |
| | |
| |--01:SCAN HDFS [functional.alltypestiny t3] |
| | HDFS partitions=4/4 files=4 size=460B |
| | runtime filters: RF000 -> t3.date_string_col |
| | row-size=22B cardinality=8 |
| | |
| 00:SCAN HDFS [functional.alltypesagg t1] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> t1.string_col, RF002 -> t1.tinyint_col, RF003 -> t1.string_col |
| row-size=18B cardinality=11.00K |
| ==== |
| # Regression test for IMPALA-935. |
| select 1 from |
| (select int_col from functional.alltypessmall group by int_col) a |
| full outer join |
| (select distinct bigint_col from functional.alltypestiny) b |
| on (a.int_col = b.bigint_col) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [FULL OUTER JOIN] |
| | hash predicates: int_col = bigint_col |
| | row-size=12B cardinality=20 |
| | |
| |--03:AGGREGATE [FINALIZE] |
| | | group by: bigint_col |
| | | row-size=8B cardinality=2 |
| | | |
| | 02:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=8B cardinality=8 |
| | |
| 01:AGGREGATE [FINALIZE] |
| | group by: int_col |
| | row-size=4B cardinality=10 |
| | |
| 00:SCAN HDFS [functional.alltypessmall] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| row-size=4B cardinality=100 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 09:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [FULL OUTER JOIN, PARTITIONED] |
| | hash predicates: int_col = bigint_col |
| | row-size=12B cardinality=20 |
| | |
| |--08:AGGREGATE [FINALIZE] |
| | | group by: bigint_col |
| | | row-size=8B cardinality=2 |
| | | |
| | 07:EXCHANGE [HASH(bigint_col)] |
| | | |
| | 03:AGGREGATE [STREAMING] |
| | | group by: bigint_col |
| | | row-size=8B cardinality=2 |
| | | |
| | 02:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=8B cardinality=8 |
| | |
| 06:AGGREGATE [FINALIZE] |
| | group by: int_col |
| | row-size=4B cardinality=10 |
| | |
| 05:EXCHANGE [HASH(int_col)] |
| | |
| 01:AGGREGATE [STREAMING] |
| | group by: int_col |
| | row-size=4B cardinality=10 |
| | |
| 00:SCAN HDFS [functional.alltypessmall] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| row-size=4B cardinality=100 |
| ==== |
| # Test joins with union inputs. One side of the join is a union. |
| select a.id, b.id, a.string_col, b.string_col |
| from |
| (select id, string_col from functional.alltypessmall |
| where year = 2009 and month = 1 |
| union all |
| select id, string_col from functional.alltypessmall |
| where year = 2009 and month = 2 |
| union all |
| select 0, '1234') a |
| inner join |
| functional.alltypestiny b |
| on a.id = b.id |
| where b.id < 5 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 07:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: b.id = id |
| | runtime filters: RF000 <- id |
| | row-size=34B cardinality=7 |
| | |
| |--06:EXCHANGE [HASH(id)] |
| | | |
| | 00:UNION |
| | | constant-operands=1 |
| | | row-size=17B cardinality=7 |
| | | |
| | |--02:SCAN HDFS [functional.alltypessmall] |
| | | partition predicates: `year` = 2009, `month` = 2 |
| | | HDFS partitions=1/4 files=1 size=1.58KB |
| | | predicates: functional.alltypessmall.id < 5 |
| | | row-size=17B cardinality=3 |
| | | |
| | 01:SCAN HDFS [functional.alltypessmall] |
| | partition predicates: `year` = 2009, `month` = 1 |
| | HDFS partitions=1/4 files=1 size=1.57KB |
| | predicates: functional.alltypessmall.id < 5 |
| | row-size=17B cardinality=3 |
| | |
| 05:EXCHANGE [HASH(b.id)] |
| | |
| 03:SCAN HDFS [functional.alltypestiny b] |
| HDFS partitions=4/4 files=4 size=460B |
| predicates: b.id < 5 |
| runtime filters: RF000 -> b.id |
| row-size=17B cardinality=1 |
| ==== |
| # Test joins with union inputs. One input is a union. |
| select a.id, b.id, a.string_col, b.string_col |
| from |
| functional.alltypestiny b |
| left outer join |
| (select id, string_col from functional.alltypessmall |
| where year = 2009 and month = 1 |
| union all |
| select id, string_col from functional.alltypessmall |
| where year = 2009 and month = 2 |
| union all |
| select 0, '1234') a |
| on a.id = b.id |
| where b.id < 5 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 07:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [LEFT OUTER JOIN, PARTITIONED] |
| | hash predicates: b.id = id |
| | row-size=34B cardinality=1 |
| | |
| |--06:EXCHANGE [HASH(id)] |
| | | |
| | 01:UNION |
| | | constant-operands=1 |
| | | row-size=17B cardinality=7 |
| | | |
| | |--03:SCAN HDFS [functional.alltypessmall] |
| | | partition predicates: `year` = 2009, `month` = 2 |
| | | HDFS partitions=1/4 files=1 size=1.58KB |
| | | predicates: functional.alltypessmall.id < 5 |
| | | row-size=17B cardinality=3 |
| | | |
| | 02:SCAN HDFS [functional.alltypessmall] |
| | partition predicates: `year` = 2009, `month` = 1 |
| | HDFS partitions=1/4 files=1 size=1.57KB |
| | predicates: functional.alltypessmall.id < 5 |
| | row-size=17B cardinality=3 |
| | |
| 05:EXCHANGE [HASH(b.id)] |
| | |
| 00:SCAN HDFS [functional.alltypestiny b] |
| HDFS partitions=4/4 files=4 size=460B |
| predicates: b.id < 5 |
| row-size=17B cardinality=1 |
| ==== |
| # Test joins with union inputs. Both inputs are a union. |
| select a.id, b.id, a.string_col, b.string_col |
| from |
| (select id, string_col from functional.alltypessmall |
| where year = 2009 and month = 1 |
| union all |
| select id, string_col from functional.alltypessmall |
| where year = 2009 and month = 2 |
| union all |
| select 0, '1234') a |
| full outer join |
| (select id, string_col from functional.alltypessmall |
| where year = 2009 and month = 1 |
| union all |
| select id, string_col from functional.alltypessmall |
| where year = 2009 and month = 2 |
| union all |
| select 0, '5678') b |
| on a.id = b.id |
| where b.id < 5 |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 09:EXCHANGE [UNPARTITIONED] |
| | |
| 06:HASH JOIN [FULL OUTER JOIN, PARTITIONED] |
| | hash predicates: id = id |
| | other predicates: id < 5 |
| | row-size=34B cardinality=58 |
| | |
| |--08:EXCHANGE [HASH(id)] |
| | | |
| | 03:UNION |
| | | constant-operands=1 |
| | | row-size=17B cardinality=7 |
| | | |
| | |--05:SCAN HDFS [functional.alltypessmall] |
| | | partition predicates: `year` = 2009, `month` = 2 |
| | | HDFS partitions=1/4 files=1 size=1.58KB |
| | | predicates: functional.alltypessmall.id < 5 |
| | | row-size=17B cardinality=3 |
| | | |
| | 04:SCAN HDFS [functional.alltypessmall] |
| | partition predicates: `year` = 2009, `month` = 1 |
| | HDFS partitions=1/4 files=1 size=1.57KB |
| | predicates: functional.alltypessmall.id < 5 |
| | row-size=17B cardinality=3 |
| | |
| 07:EXCHANGE [HASH(id)] |
| | |
| 00:UNION |
| | constant-operands=1 |
| | row-size=17B cardinality=51 |
| | |
| |--02:SCAN HDFS [functional.alltypessmall] |
| | partition predicates: `year` = 2009, `month` = 2 |
| | HDFS partitions=1/4 files=1 size=1.58KB |
| | row-size=17B cardinality=25 |
| | |
| 01:SCAN HDFS [functional.alltypessmall] |
| partition predicates: `year` = 2009, `month` = 1 |
| HDFS partitions=1/4 files=1 size=1.57KB |
| row-size=17B cardinality=25 |
| ==== |
| # Test joins with decimals with different precision and scale |
| # Regression test for IMPALA-1121 |
| select straight_join count(*) |
| from functional.decimal_tbl a join functional.decimal_tbl b on a.d1 = b.d5 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 03:AGGREGATE [FINALIZE] |
| | output: count(*) |
| | row-size=8B cardinality=1 |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.d1 = b.d5 |
| | runtime filters: RF000 <- b.d5 |
| | row-size=12B cardinality=unavailable |
| | |
| |--01:SCAN HDFS [functional.decimal_tbl b] |
| | HDFS partitions=1/1 files=1 size=195B |
| | row-size=8B cardinality=unavailable |
| | |
| 00:SCAN HDFS [functional.decimal_tbl a] |
| HDFS partitions=1/1 files=1 size=195B |
| runtime filters: RF000 -> a.d1 |
| row-size=4B cardinality=unavailable |
| ==== |
| # Test left semi join including correct predicate assignment and propagation |
| select j.* from functional.jointbl j left semi join functional.dimtbl d |
| on (j.test_id = d.id and j.test_zip < d.zip and d.name = 'Name2') |
| where j.test_id < 10 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [LEFT SEMI JOIN] |
| | hash predicates: j.test_id = d.id |
| | other join predicates: j.test_zip < d.zip |
| | runtime filters: RF000 <- d.id |
| | row-size=33B cardinality=1 |
| | |
| |--01:SCAN HDFS [functional.dimtbl d] |
| | HDFS partitions=1/1 files=1 size=171B |
| | predicates: d.id < 10, d.name = 'Name2' |
| | row-size=29B cardinality=1 |
| | |
| 00:SCAN HDFS [functional.jointbl j] |
| HDFS partitions=1/1 files=1 size=433B |
| predicates: j.test_id < 10 |
| runtime filters: RF000 -> j.test_id |
| row-size=33B cardinality=2 |
| ==== |
| # Test right semi join including correct predicate assignment and propagation |
| select b.* from functional.alltypes a right semi join functional.alltypestiny b |
| on (a.id = b.id and a.int_col < b.int_col and a.bool_col = false) |
| where b.id < 10 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [RIGHT SEMI JOIN] |
| | hash predicates: a.id = b.id |
| | other join predicates: a.int_col < b.int_col |
| | runtime filters: RF000 <- b.id |
| | row-size=89B cardinality=1 |
| | |
| |--01:SCAN HDFS [functional.alltypestiny b] |
| | HDFS partitions=4/4 files=4 size=460B |
| | predicates: b.id < 10 |
| | row-size=89B cardinality=1 |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| predicates: a.id < 10, a.bool_col = FALSE |
| runtime filters: RF000 -> a.id |
| row-size=9B cardinality=516 |
| ==== |
| # Test left anti join including correct predicate assignment and propagation |
| select j.* from functional.jointbl j left anti join functional.dimtbl d |
| on (j.test_id = d.id and j.test_zip < d.zip and d.name = 'Name2') |
| where j.test_id < 10 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [LEFT ANTI JOIN] |
| | hash predicates: j.test_id = d.id |
| | other join predicates: j.test_zip < d.zip |
| | row-size=33B cardinality=2 |
| | |
| |--01:SCAN HDFS [functional.dimtbl d] |
| | HDFS partitions=1/1 files=1 size=171B |
| | predicates: d.id < 10, d.name = 'Name2' |
| | row-size=29B cardinality=1 |
| | |
| 00:SCAN HDFS [functional.jointbl j] |
| HDFS partitions=1/1 files=1 size=433B |
| predicates: j.test_id < 10 |
| row-size=33B cardinality=2 |
| ==== |
| # Test query with anti join and inner join and predicates |
| select count(*) from functional.JoinTbl j |
| left anti join functional.DimTbl d on j.test_id = d.id |
| inner join functional.JoinTbl k on j.test_id = k.test_id and j.alltypes_id = 5000 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 06:AGGREGATE [FINALIZE] |
| | output: count(*) |
| | row-size=8B cardinality=1 |
| | |
| 05:HASH JOIN [INNER JOIN] |
| | hash predicates: k.test_id = j.test_id |
| | runtime filters: RF000 <- j.test_id |
| | row-size=20B cardinality=27 |
| | |
| |--04:HASH JOIN [LEFT ANTI JOIN] |
| | | hash predicates: j.test_id = d.id |
| | | row-size=12B cardinality=10 |
| | | |
| | |--01:SCAN HDFS [functional.dimtbl d] |
| | | HDFS partitions=1/1 files=1 size=171B |
| | | row-size=8B cardinality=10 |
| | | |
| | 00:SCAN HDFS [functional.jointbl j] |
| | HDFS partitions=1/1 files=1 size=433B |
| | predicates: j.alltypes_id = 5000 |
| | row-size=12B cardinality=10 |
| | |
| 02:SCAN HDFS [functional.jointbl k] |
| HDFS partitions=1/1 files=1 size=433B |
| runtime filters: RF000 -> k.test_id |
| row-size=8B cardinality=19 |
| ==== |
| # Test legacy-style join hints. |
| select straight_join * from functional.alltypestiny a |
| inner join [broadcast] functional.alltypes b on a.id = b.id |
| inner join [shuffle] functional.alltypessmall c on b.id = c.id |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 08:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: b.id = c.id |
| | runtime filters: RF000 <- c.id |
| | row-size=267B cardinality=1 |
| | |
| |--07:EXCHANGE [HASH(c.id)] |
| | | |
| | 02:SCAN HDFS [functional.alltypessmall c] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=89B cardinality=100 |
| | |
| 06:EXCHANGE [HASH(b.id)] |
| | |
| 03:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: a.id = b.id |
| | runtime filters: RF002 <- b.id |
| | row-size=178B cardinality=8 |
| | |
| |--05:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> b.id |
| | row-size=89B cardinality=7.30K |
| | |
| 00:SCAN HDFS [functional.alltypestiny a] |
| HDFS partitions=4/4 files=4 size=460B |
| runtime filters: RF000 -> a.id, RF002 -> a.id |
| row-size=89B cardinality=8 |
| ==== |
| # Test traditional commented join hints. |
| select /* +straight_join */ * from functional.alltypestiny a |
| inner join /* +broadcast */ functional.alltypes b on a.id = b.id |
| inner join /* +shuffle */ functional.alltypessmall c on b.id = c.id |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 08:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: b.id = c.id |
| | runtime filters: RF000 <- c.id |
| | row-size=267B cardinality=1 |
| | |
| |--07:EXCHANGE [HASH(c.id)] |
| | | |
| | 02:SCAN HDFS [functional.alltypessmall c] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=89B cardinality=100 |
| | |
| 06:EXCHANGE [HASH(b.id)] |
| | |
| 03:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: a.id = b.id |
| | runtime filters: RF002 <- b.id |
| | row-size=178B cardinality=8 |
| | |
| |--05:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> b.id |
| | row-size=89B cardinality=7.30K |
| | |
| 00:SCAN HDFS [functional.alltypestiny a] |
| HDFS partitions=4/4 files=4 size=460B |
| runtime filters: RF000 -> a.id, RF002 -> a.id |
| row-size=89B cardinality=8 |
| ==== |
| # Test end-of-line commented join hints. |
| select |
| -- +straight_join |
| * from functional.alltypestiny a |
| inner join |
| -- +broadcast |
| functional.alltypes b on a.id = b.id |
| inner join |
| -- +shuffle |
| functional.alltypessmall c on b.id = c.id |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 08:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: b.id = c.id |
| | runtime filters: RF000 <- c.id |
| | row-size=267B cardinality=1 |
| | |
| |--07:EXCHANGE [HASH(c.id)] |
| | | |
| | 02:SCAN HDFS [functional.alltypessmall c] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=89B cardinality=100 |
| | |
| 06:EXCHANGE [HASH(b.id)] |
| | |
| 03:HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: a.id = b.id |
| | runtime filters: RF002 <- b.id |
| | row-size=178B cardinality=8 |
| | |
| |--05:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF000 -> b.id |
| | row-size=89B cardinality=7.30K |
| | |
| 00:SCAN HDFS [functional.alltypestiny a] |
| HDFS partitions=4/4 files=4 size=460B |
| runtime filters: RF000 -> a.id, RF002 -> a.id |
| row-size=89B cardinality=8 |
| ==== |
| # Regression test for IMPALA-1289. Predicates should be assigned correctly |
| # to inverted joins. |
| select * from functional.alltypestiny a |
| inner join functional.alltypestiny b |
| on (a.id = b.id) |
| # should be inverted |
| cross join functional.alltypes c |
| # assigned to inverted cross join |
| where c.id != b.id |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: c.id != b.id |
| | row-size=267B cardinality=8 |
| | |
| |--03:HASH JOIN [INNER JOIN] |
| | | hash predicates: a.id = b.id |
| | | runtime filters: RF000 <- b.id |
| | | row-size=178B cardinality=8 |
| | | |
| | |--01:SCAN HDFS [functional.alltypestiny b] |
| | | HDFS partitions=4/4 files=4 size=460B |
| | | row-size=89B cardinality=8 |
| | | |
| | 00:SCAN HDFS [functional.alltypestiny a] |
| | HDFS partitions=4/4 files=4 size=460B |
| | runtime filters: RF000 -> a.id |
| | row-size=89B cardinality=8 |
| | |
| 02:SCAN HDFS [functional.alltypes c] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| row-size=89B cardinality=7.30K |
| ==== |
| # Tests the generation of a distributed plan in which the input fragments |
| # of a join node have compatible but not the same number of partitioning exprs with |
| # the corresponding join exprs (IMPALA-1307). |
| # TODO: Instead of adding redundant hash exprs to the new exchange node, we |
| # should remove redundant group by expressions. |
| select * from |
| (select tinyint_col, int_col |
| from functional.alltypestiny |
| group by tinyint_col, int_col) v1 |
| inner join |
| (select tinyint_col, int_col, bigint_col |
| from functional.alltypessmall |
| group by tinyint_col, int_col, bigint_col) v2 |
| on (v1.tinyint_col = v2.tinyint_col and |
| v1.tinyint_col = v2.int_col and |
| v1.tinyint_col = v2.bigint_col) |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 10:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: tinyint_col = tinyint_col |
| | runtime filters: RF000 <- tinyint_col |
| | row-size=18B cardinality=40 |
| | |
| |--09:EXCHANGE [HASH(tinyint_col,tinyint_col,tinyint_col)] |
| | | |
| | 08:AGGREGATE [FINALIZE] |
| | | group by: tinyint_col, int_col |
| | | row-size=5B cardinality=4 |
| | | |
| | 07:EXCHANGE [HASH(tinyint_col,int_col)] |
| | | |
| | 01:AGGREGATE [STREAMING] |
| | | group by: tinyint_col, int_col |
| | | row-size=5B cardinality=4 |
| | | |
| | 00:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=5B cardinality=8 |
| | |
| 06:AGGREGATE [FINALIZE] |
| | group by: tinyint_col, int_col, bigint_col |
| | row-size=13B cardinality=10 |
| | |
| 05:EXCHANGE [HASH(tinyint_col,int_col,bigint_col)] |
| | |
| 03:AGGREGATE [STREAMING] |
| | group by: tinyint_col, int_col, bigint_col |
| | row-size=13B cardinality=10 |
| | |
| 02:SCAN HDFS [functional.alltypessmall] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| predicates: functional.alltypessmall.tinyint_col = functional.alltypessmall.bigint_col, functional.alltypessmall.tinyint_col = functional.alltypessmall.int_col |
| runtime filters: RF000 -> functional.alltypessmall.tinyint_col |
| row-size=13B cardinality=10 |
| ==== |
| # Same as above but with a full outer join. |
| # Tests the generation of a distributed plan in which the input fragments |
| # of a join node have compatible but not the same number of partitioning exprs with |
| # the corresponding join exprs (IMPALA-1307). |
| # TODO: Instead of adding redundant hash exprs to the new exchange node, we |
| # should remove redundant group by expressions. |
| select * from |
| (select tinyint_col, int_col |
| from functional.alltypestiny |
| group by tinyint_col, int_col) v1 |
| full outer join |
| (select tinyint_col, int_col, bigint_col |
| from functional.alltypessmall |
| group by tinyint_col, int_col, bigint_col) v2 |
| on (v1.tinyint_col = v2.tinyint_col and |
| v1.tinyint_col = v2.int_col and |
| v1.tinyint_col = v2.bigint_col) |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 10:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [FULL OUTER JOIN, PARTITIONED] |
| | hash predicates: tinyint_col = tinyint_col, bigint_col = tinyint_col, int_col = tinyint_col |
| | row-size=18B cardinality=104 |
| | |
| |--09:EXCHANGE [HASH(tinyint_col,tinyint_col,tinyint_col)] |
| | | |
| | 08:AGGREGATE [FINALIZE] |
| | | group by: tinyint_col, int_col |
| | | row-size=5B cardinality=4 |
| | | |
| | 07:EXCHANGE [HASH(tinyint_col,int_col)] |
| | | |
| | 01:AGGREGATE [STREAMING] |
| | | group by: tinyint_col, int_col |
| | | row-size=5B cardinality=4 |
| | | |
| | 00:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=5B cardinality=8 |
| | |
| 06:AGGREGATE [FINALIZE] |
| | group by: tinyint_col, int_col, bigint_col |
| | row-size=13B cardinality=100 |
| | |
| 05:EXCHANGE [HASH(tinyint_col,int_col,bigint_col)] |
| | |
| 03:AGGREGATE [STREAMING] |
| | group by: tinyint_col, int_col, bigint_col |
| | row-size=13B cardinality=100 |
| | |
| 02:SCAN HDFS [functional.alltypessmall] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| row-size=13B cardinality=100 |
| ==== |
| # Test conservative treatment of partition-compatible input fragments |
| # to a partitioned hash join. Making the partitions physically compatible |
| # would require changing all senders to the lhs or rhs fragment, so we |
| # do not perform this optimization. It is expected that the join is placed |
| # into the lhs compatible fragment, and the rhs is exchanged by enforcing |
| # physical hash-expr compatibility (IMPALA-1324). |
| select straight_join * from |
| (select bigint_col, string_col |
| from functional.alltypestiny |
| group by bigint_col, string_col) v1 |
| inner join |
| (select string_col, bigint_col |
| from functional.alltypessmall |
| group by string_col, bigint_col) v2 |
| on (v1.string_col = v2.string_col and |
| v1.bigint_col = v2.bigint_col) |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 10:EXCHANGE [UNPARTITIONED] |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: bigint_col = bigint_col, string_col = string_col |
| | runtime filters: RF000 <- bigint_col, RF001 <- string_col |
| | row-size=42B cardinality=4 |
| | |
| |--09:EXCHANGE [HASH(bigint_col,string_col)] |
| | | |
| | 08:AGGREGATE [FINALIZE] |
| | | group by: string_col, bigint_col |
| | | row-size=21B cardinality=100 |
| | | |
| | 07:EXCHANGE [HASH(string_col,bigint_col)] |
| | | |
| | 03:AGGREGATE [STREAMING] |
| | | group by: string_col, bigint_col |
| | | row-size=21B cardinality=100 |
| | | |
| | 02:SCAN HDFS [functional.alltypessmall] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=21B cardinality=100 |
| | |
| 06:AGGREGATE [FINALIZE] |
| | group by: bigint_col, string_col |
| | row-size=21B cardinality=4 |
| | |
| 05:EXCHANGE [HASH(bigint_col,string_col)] |
| | |
| 01:AGGREGATE [STREAMING] |
| | group by: bigint_col, string_col |
| | row-size=21B cardinality=4 |
| | |
| 00:SCAN HDFS [functional.alltypestiny] |
| HDFS partitions=4/4 files=4 size=460B |
| runtime filters: RF000 -> functional.alltypestiny.bigint_col, RF001 -> functional.alltypestiny.string_col |
| row-size=21B cardinality=8 |
| ==== |
| # Test that hash exprs are re-ordered as necessary when placing a join into |
| # a fragment with a compatible data partition (IMPALA-1324) |
| select straight_join * from |
| (select distinct int_col, string_col |
| from functional.alltypestiny) a |
| left semi join functional.alltypes b |
| # predicates are in reverse order of compatible group by exprs |
| on (a.string_col = b.string_col and a.int_col = b.int_col) |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 07:EXCHANGE [UNPARTITIONED] |
| | |
| 03:HASH JOIN [LEFT SEMI JOIN, PARTITIONED] |
| | hash predicates: int_col = b.int_col, string_col = b.string_col |
| | runtime filters: RF000 <- b.int_col, RF001 <- b.string_col |
| | row-size=17B cardinality=4 |
| | |
| |--06:EXCHANGE [HASH(b.int_col,b.string_col)] |
| | | |
| | 02:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=17B cardinality=7.30K |
| | |
| 05:AGGREGATE [FINALIZE] |
| | group by: int_col, string_col |
| | row-size=17B cardinality=4 |
| | |
| 04:EXCHANGE [HASH(int_col,string_col)] |
| | |
| 01:AGGREGATE [STREAMING] |
| | group by: int_col, string_col |
| | row-size=17B cardinality=4 |
| | |
| 00:SCAN HDFS [functional.alltypestiny] |
| HDFS partitions=4/4 files=4 size=460B |
| runtime filters: RF000 -> functional.alltypestiny.int_col, RF001 -> functional.alltypestiny.string_col |
| row-size=17B cardinality=8 |
| ==== |
| # Same as above but with the join inverted. |
| select straight_join * from |
| functional.alltypes a |
| right semi join |
| (select distinct int_col, string_col |
| from functional.alltypestiny) b |
| # predicates are in reverse order of compatible group by exprs |
| on (a.string_col = b.string_col and a.int_col = b.int_col) |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 07:EXCHANGE [UNPARTITIONED] |
| | |
| 03:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED] |
| | hash predicates: a.int_col = int_col, a.string_col = string_col |
| | runtime filters: RF000 <- int_col, RF001 <- string_col |
| | row-size=17B cardinality=4 |
| | |
| |--05:AGGREGATE [FINALIZE] |
| | | group by: int_col, string_col |
| | | row-size=17B cardinality=4 |
| | | |
| | 04:EXCHANGE [HASH(int_col,string_col)] |
| | | |
| | 02:AGGREGATE [STREAMING] |
| | | group by: int_col, string_col |
| | | row-size=17B cardinality=4 |
| | | |
| | 01:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=17B cardinality=8 |
| | |
| 06:EXCHANGE [HASH(a.int_col,a.string_col)] |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.int_col, RF001 -> a.string_col |
| row-size=17B cardinality=7.30K |
| ==== |
| # Complex combined regression test for IMPALA-1307 and IMPALA-1324 |
| select straight_join * from |
| (select distinct string_col, int_col, smallint_col |
| from functional.alltypessmall) a |
| inner join [shuffle] |
| (select distinct tinyint_col, smallint_col, int_col, string_col |
| from functional.alltypestiny) b |
| on (a.int_col = b.int_col and a.smallint_col = b.int_col and |
| a.smallint_col = b.smallint_col and |
| a.string_col = b.string_col) |
| inner join |
| (select distinct string_col, tinyint_col, smallint_col, int_col, bigint_col |
| from functional.alltypes |
| where bigint_col = smallint_col and smallint_col = tinyint_col) c |
| on (b.int_col = c.smallint_col and b.string_col = c.string_col) |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 16:EXCHANGE [UNPARTITIONED] |
| | |
| 07:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: int_col = smallint_col, string_col = string_col |
| | runtime filters: RF000 <- smallint_col, RF001 <- string_col |
| | row-size=67B cardinality=3.65K |
| | |
| |--15:EXCHANGE [HASH(string_col,smallint_col,smallint_col)] |
| | | |
| | 14:AGGREGATE [FINALIZE] |
| | | group by: string_col, tinyint_col, smallint_col, int_col, bigint_col |
| | | row-size=28B cardinality=730 |
| | | |
| | 13:EXCHANGE [HASH(string_col,tinyint_col,smallint_col,int_col,bigint_col)] |
| | | |
| | 05:AGGREGATE [STREAMING] |
| | | group by: string_col, tinyint_col, smallint_col, int_col, bigint_col |
| | | row-size=28B cardinality=730 |
| | | |
| | 04:SCAN HDFS [functional.alltypes] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | predicates: bigint_col = smallint_col, smallint_col = tinyint_col |
| | row-size=28B cardinality=730 |
| | |
| 06:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: int_col = int_col, string_col = string_col |
| | runtime filters: RF004 <- int_col, RF005 <- string_col |
| | row-size=39B cardinality=10 |
| | |
| |--12:EXCHANGE [HASH(string_col,int_col,int_col)] |
| | | |
| | 11:AGGREGATE [FINALIZE] |
| | | group by: tinyint_col, smallint_col, int_col, string_col |
| | | row-size=20B cardinality=1 |
| | | |
| | 10:EXCHANGE [HASH(tinyint_col,smallint_col,int_col,string_col)] |
| | | |
| | 03:AGGREGATE [STREAMING] |
| | | group by: tinyint_col, smallint_col, int_col, string_col |
| | | row-size=20B cardinality=1 |
| | | |
| | 02:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | predicates: functional.alltypestiny.int_col = functional.alltypestiny.smallint_col |
| | runtime filters: RF000 -> functional.alltypestiny.smallint_col, RF001 -> functional.alltypestiny.string_col |
| | row-size=20B cardinality=1 |
| | |
| 09:AGGREGATE [FINALIZE] |
| | group by: string_col, int_col, smallint_col |
| | row-size=19B cardinality=10 |
| | |
| 08:EXCHANGE [HASH(string_col,int_col,smallint_col)] |
| | |
| 01:AGGREGATE [STREAMING] |
| | group by: string_col, int_col, smallint_col |
| | row-size=19B cardinality=10 |
| | |
| 00:SCAN HDFS [functional.alltypessmall] |
| HDFS partitions=4/4 files=4 size=6.32KB |
| predicates: functional.alltypessmall.smallint_col = functional.alltypessmall.int_col |
| runtime filters: RF000 -> functional.alltypessmall.int_col, RF001 -> functional.alltypessmall.string_col, RF004 -> functional.alltypessmall.int_col, RF005 -> functional.alltypessmall.string_col |
| row-size=19B cardinality=10 |
| ==== |
| # Assignment of predicates from the On-clause of an |
| # anti join; inner join followed by anti join (IMPALA-1387) |
| select a.* |
| from functional.alltypes a inner join functional.alltypes b |
| on a.id = b.id |
| where not exists (select * |
| from functional.alltypes c |
| # Predicate on a (visible side of anti join) is assigned to the anti join, predicate on |
| # a and b is also assigned to the anti join |
| where a.id = c.id and a.int_col = b.int_col and a.tinyint_col = 10 |
| # Predicate on c (invisible side of anti join) is assigned to the scan node |
| and c.int_col < 10) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [LEFT ANTI JOIN] |
| | hash predicates: a.id = c.id |
| | other join predicates: a.tinyint_col = 10, a.int_col = b.int_col |
| | row-size=97B cardinality=7.30K |
| | |
| |--02:SCAN HDFS [functional.alltypes c] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | predicates: c.int_col < 10 |
| | row-size=8B cardinality=730 |
| | |
| 03:HASH JOIN [INNER JOIN] |
| | hash predicates: a.id = b.id |
| | runtime filters: RF000 <- b.id |
| | row-size=97B cardinality=7.30K |
| | |
| |--01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=8B cardinality=7.30K |
| | |
| 00:SCAN HDFS [functional.alltypes a] |
| HDFS partitions=24/24 files=24 size=478.45KB |
| runtime filters: RF000 -> a.id |
| row-size=89B cardinality=7.30K |
| ==== |
| # Assignment of predicates from the On-clause of an anti join; |
| # sequence of inner joins interleaved with an anti join. |
| select * |
| from functional.alltypes a inner join functional.alltypes b |
| on (a.id = b.id) |
| left anti join functional.alltypestiny c |
| # Predicate on a and b from the On-clause is assigned to the anti join, |
| # predicate on c is assigned to the scan node |
| on (a.int_col = c.int_col and a.tinyint_col = b.tinyint_col and a.float_col = 2.1 |
| and c.bool_col = false) |
| inner join functional.alltypesagg d |
| on (a.tinyint_col = d.tinyint_col and a.int_col < 10) |
| where a.float_col < b.float_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 08:HASH JOIN [INNER JOIN] |
| | hash predicates: d.tinyint_col = a.tinyint_col |
| | runtime filters: RF000 <- a.tinyint_col |
| | row-size=273B cardinality=892.22K |
| | |
| |--07:HASH JOIN [LEFT ANTI JOIN] |
| | | hash predicates: a.int_col = c.int_col |
| | | other join predicates: a.float_col = 2.1, a.tinyint_col = b.tinyint_col |
| | | row-size=178B cardinality=730 |
| | | |
| | |--02:SCAN HDFS [functional.alltypestiny c] |
| | | HDFS partitions=4/4 files=4 size=460B |
| | | predicates: c.int_col < 10, c.bool_col = FALSE |
| | | row-size=5B cardinality=1 |
| | | |
| | 06:HASH JOIN [INNER JOIN] |
| | | hash predicates: b.id = a.id |
| | | other predicates: a.float_col < b.float_col |
| | | runtime filters: RF002 <- a.id |
| | | row-size=178B cardinality=730 |
| | | |
| | |--00:SCAN HDFS [functional.alltypes a] |
| | | HDFS partitions=24/24 files=24 size=478.45KB |
| | | predicates: a.int_col < 10 |
| | | row-size=89B cardinality=730 |
| | | |
| | 01:SCAN HDFS [functional.alltypes b] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | runtime filters: RF002 -> b.id |
| | row-size=89B cardinality=7.30K |
| | |
| 03:SCAN HDFS [functional.alltypesagg d] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> d.tinyint_col |
| row-size=95B cardinality=11.00K |
| ==== |
| # Inner joins with non-equi join predicates |
| select * |
| from functional.alltypestiny a inner join functional.alltypessmall b |
| on a.id < b.id |
| inner join functional.alltypes c |
| on a.int_col != c.int_col |
| inner join functional.alltypesagg d |
| on b.tinyint_col > d.int_col or b.id != d.id |
| where a.int_col = 10 and c.bigint_col = d.bigint_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 06:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: a.id < b.id, b.tinyint_col > d.int_col OR b.id != d.id |
| | row-size=362B cardinality=79.66K |
| | |
| |--01:SCAN HDFS [functional.alltypessmall b] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=89B cardinality=100 |
| | |
| 05:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: a.int_col != c.int_col |
| | row-size=273B cardinality=79.66K |
| | |
| |--00:SCAN HDFS [functional.alltypestiny a] |
| | HDFS partitions=4/4 files=4 size=460B |
| | predicates: a.int_col = 10 |
| | row-size=89B cardinality=4 |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: d.bigint_col = c.bigint_col |
| | runtime filters: RF000 <- c.bigint_col |
| | row-size=184B cardinality=79.66K |
| | |
| |--02:SCAN HDFS [functional.alltypes c] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=89B cardinality=7.30K |
| | |
| 03:SCAN HDFS [functional.alltypesagg d] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> d.bigint_col |
| row-size=95B cardinality=11.00K |
| ---- DISTRIBUTEDPLAN |
| PLAN-ROOT SINK |
| | |
| 11:EXCHANGE [UNPARTITIONED] |
| | |
| 06:NESTED LOOP JOIN [INNER JOIN, BROADCAST] |
| | predicates: a.id < b.id, b.tinyint_col > d.int_col OR b.id != d.id |
| | row-size=362B cardinality=79.66K |
| | |
| |--10:EXCHANGE [BROADCAST] |
| | | |
| | 01:SCAN HDFS [functional.alltypessmall b] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=89B cardinality=100 |
| | |
| 05:NESTED LOOP JOIN [INNER JOIN, BROADCAST] |
| | predicates: a.int_col != c.int_col |
| | row-size=273B cardinality=79.66K |
| | |
| |--09:EXCHANGE [BROADCAST] |
| | | |
| | 00:SCAN HDFS [functional.alltypestiny a] |
| | HDFS partitions=4/4 files=4 size=460B |
| | predicates: a.int_col = 10 |
| | row-size=89B cardinality=4 |
| | |
| 04:HASH JOIN [INNER JOIN, PARTITIONED] |
| | hash predicates: d.bigint_col = c.bigint_col |
| | runtime filters: RF000 <- c.bigint_col |
| | row-size=184B cardinality=79.66K |
| | |
| |--08:EXCHANGE [HASH(c.bigint_col)] |
| | | |
| | 02:SCAN HDFS [functional.alltypes c] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=89B cardinality=7.30K |
| | |
| 07:EXCHANGE [HASH(d.bigint_col)] |
| | |
| 03:SCAN HDFS [functional.alltypesagg d] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| runtime filters: RF000 -> d.bigint_col |
| row-size=95B cardinality=11.00K |
| ==== |
| # Inner joins between inline views with non-equi join predicates |
| select * |
| from |
| (select a.* |
| from functional.alltypestiny a inner join functional.alltypessmall b |
| on a.id <= b.id) vv1 |
| inner join |
| (select c.* |
| from functional.alltypesagg c inner join functional.alltypes d |
| on c.int_col != d.int_col where c.tinyint_col = 10) vv2 |
| on vv1.bigint_col > vv2.bigint_col |
| where vv1.tinyint_col < 10 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 06:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: a.bigint_col > c.bigint_col |
| | row-size=192B cardinality=1.22K |
| | |
| |--02:NESTED LOOP JOIN [INNER JOIN] |
| | | predicates: a.id <= b.id |
| | | row-size=93B cardinality=100 |
| | | |
| | |--00:SCAN HDFS [functional.alltypestiny a] |
| | | HDFS partitions=4/4 files=4 size=460B |
| | | predicates: a.tinyint_col < 10 |
| | | row-size=89B cardinality=1 |
| | | |
| | 01:SCAN HDFS [functional.alltypessmall b] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=4B cardinality=100 |
| | |
| 05:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: c.int_col != d.int_col |
| | row-size=99B cardinality=1.22K |
| | |
| |--04:SCAN HDFS [functional.alltypes d] |
| | HDFS partitions=24/24 files=24 size=478.45KB |
| | row-size=4B cardinality=7.30K |
| | |
| 03:SCAN HDFS [functional.alltypesagg c] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| predicates: c.tinyint_col = 10 |
| row-size=95B cardinality=1.22K |
| ==== |
| # Inner, left-outer, left-semi and left-anti joins with non-equi join |
| # predicates |
| select * |
| from functional.alltypestiny a inner join functional.alltypessmall b |
| on a.id < b.id |
| left outer join functional.alltypes c |
| on a.int_col != c.int_col or a.tinyint_col > c.tinyint_col |
| left semi join functional.alltypesagg d |
| on b.bigint_col > d.bigint_col |
| left anti join functional.alltypesagg e |
| on c.string_col != e.string_col |
| where a.id < 10 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 08:NESTED LOOP JOIN [RIGHT ANTI JOIN] |
| | join predicates: c.string_col != e.string_col |
| | row-size=267B cardinality=100 |
| | |
| |--07:NESTED LOOP JOIN [RIGHT SEMI JOIN] |
| | | join predicates: b.bigint_col > d.bigint_col |
| | | row-size=267B cardinality=100 |
| | | |
| | |--06:NESTED LOOP JOIN [RIGHT OUTER JOIN] |
| | | | join predicates: a.int_col != c.int_col OR a.tinyint_col > c.tinyint_col |
| | | | row-size=267B cardinality=100 |
| | | | |
| | | |--05:NESTED LOOP JOIN [INNER JOIN] |
| | | | | predicates: a.id < b.id |
| | | | | row-size=178B cardinality=100 |
| | | | | |
| | | | |--00:SCAN HDFS [functional.alltypestiny a] |
| | | | | HDFS partitions=4/4 files=4 size=460B |
| | | | | predicates: a.id < 10 |
| | | | | row-size=89B cardinality=1 |
| | | | | |
| | | | 01:SCAN HDFS [functional.alltypessmall b] |
| | | | HDFS partitions=4/4 files=4 size=6.32KB |
| | | | row-size=89B cardinality=100 |
| | | | |
| | | 02:SCAN HDFS [functional.alltypes c] |
| | | HDFS partitions=24/24 files=24 size=478.45KB |
| | | row-size=89B cardinality=7.30K |
| | | |
| | 03:SCAN HDFS [functional.alltypesagg d] |
| | HDFS partitions=11/11 files=11 size=814.73KB |
| | row-size=8B cardinality=11.00K |
| | |
| 04:SCAN HDFS [functional.alltypesagg e] |
| HDFS partitions=11/11 files=11 size=814.73KB |
| row-size=15B cardinality=11.00K |
| ==== |
| # Regression test for IMPALA-2495: Crash: impala::InPredicate::SetLookupPrepare |
| select count(id) from functional.alltypestiny t1 |
| left join (select coalesce(1, 10) as int_col |
| from functional.alltypessmall) t2 on t1.id = t2.int_col |
| where t2.int_col in (t2.int_col, 10); |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 03:AGGREGATE [FINALIZE] |
| | output: count(id) |
| | row-size=8B cardinality=1 |
| | |
| 02:HASH JOIN [LEFT OUTER JOIN] |
| | hash predicates: t1.id = if(TupleIsNull(1), NULL, 1) |
| | other predicates: if(TupleIsNull(1), NULL, 1) IN (if(TupleIsNull(1), NULL, 1), 10) |
| | row-size=4B cardinality=8 |
| | |
| |--01:SCAN HDFS [functional.alltypessmall] |
| | HDFS partitions=4/4 files=4 size=6.32KB |
| | row-size=0B cardinality=100 |
| | |
| 00:SCAN HDFS [functional.alltypestiny t1] |
| HDFS partitions=4/4 files=4 size=460B |
| row-size=4B cardinality=8 |
| ==== |
| # Test queries that appear earlier in this file, but substitute "<=>" or "IS DISTINCT |
| # FROM" for "=" in the join predicates. |
| select * |
| from functional.testtbl t1 join functional.testtbl t2 |
| where t1.id <=> t2.id and t1.zip = 94611 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: t1.id IS NOT DISTINCT FROM t2.id |
| | runtime filters: RF000 <- t2.id |
| | row-size=48B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| predicates: t1.zip = 94611 |
| runtime filters: RF000 -> t1.id |
| row-size=24B cardinality=0 |
| ==== |
| select * |
| from functional.testtbl t1 join functional.testtbl t2 |
| where t1.id is not distinct from t2.id and t1.zip = 94611 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: t1.id IS NOT DISTINCT FROM t2.id |
| | runtime filters: RF000 <- t2.id |
| | row-size=48B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| predicates: t1.zip = 94611 |
| runtime filters: RF000 -> t1.id |
| row-size=24B cardinality=0 |
| ==== |
| select * |
| from functional.testtbl t1 join functional.testtbl t2 |
| where (t1.id IS DISTINCT FROM t2.id) and t1.zip = 94611 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: (t1.id IS DISTINCT FROM t2.id) |
| | row-size=48B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional.testtbl t2] |
| | HDFS partitions=1/1 files=0 size=0B |
| | row-size=24B cardinality=0 |
| | |
| 00:SCAN HDFS [functional.testtbl t1] |
| HDFS partitions=1/1 files=0 size=0B |
| predicates: t1.zip = 94611 |
| row-size=24B cardinality=0 |
| ==== |
| # Test that "is not distinct from" plans the same as "=" in the same query above. |
| select t1.* |
| from (select * from functional.alltypestiny) t1 |
| join (select * from functional.alltypestiny) t2 on (t1.id is not distinct from t2.id) |
| join functional.alltypestiny t3 on (coalesce(t1.id, t2.id) is not distinct from t3.id) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:HASH JOIN [INNER JOIN] |
| | hash predicates: coalesce(functional.alltypestiny.id, functional.alltypestiny.id) IS NOT DISTINCT FROM t3.id |
| | row-size=97B cardinality=8 |
| | |
| |--02:SCAN HDFS [functional.alltypestiny t3] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=4B cardinality=8 |
| | |
| 03:HASH JOIN [INNER JOIN] |
| | hash predicates: functional.alltypestiny.id IS NOT DISTINCT FROM functional.alltypestiny.id |
| | runtime filters: RF000 <- functional.alltypestiny.id |
| | row-size=93B cardinality=8 |
| | |
| |--01:SCAN HDFS [functional.alltypestiny] |
| | HDFS partitions=4/4 files=4 size=460B |
| | row-size=4B cardinality=8 |
| | |
| 00:SCAN HDFS [functional.alltypestiny] |
| HDFS partitions=4/4 files=4 size=460B |
| runtime filters: RF000 -> functional.alltypestiny.id |
| row-size=89B cardinality=8 |
| ==== |
| select * |
| from functional.alltypesagg a |
| full outer join functional.alltypessmall b on (a.id <=> b.id and a.int_col = b.int_col) |
| right join functional.alltypesaggnonulls c on (a.id = c.id and b.string_col <=> c.string_col) |
| where a.day >= 6 |
| and b.month > 2 |
| and c.day < 3 |
| and a.tinyint_col = 15 |
| and b.string_col = '15' |
| and a.tinyint_col + b.tinyint_col < 15 |
| and a.float_col - c.double_col < 0 |
| and (b.double_col * c.tinyint_col > 1000 or c.tinyint_col < 1000) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 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.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) |
| | row-size=279B cardinality=2.00K |
| | |
| |--03:HASH JOIN [FULL OUTER JOIN] |
| | | hash predicates: a.id IS NOT DISTINCT FROM b.id, a.int_col = b.int_col |
| | | row-size=184B cardinality=561 |
| | | |
| | |--01:SCAN HDFS [functional.alltypessmall b] |
| | | partition predicates: b.`month` > 2 |
| | | HDFS partitions=2/4 files=2 size=3.17KB |
| | | predicates: b.string_col = '15' |
| | | row-size=89B cardinality=5 |
| | | |
| | 00:SCAN HDFS [functional.alltypesagg a] |
| | partition predicates: a.`day` >= 6 |
| | HDFS partitions=5/11 files=5 size=372.38KB |
| | predicates: a.tinyint_col = 15 |
| | row-size=95B cardinality=556 |
| | |
| 02:SCAN HDFS [functional.alltypesaggnonulls c] |
| partition predicates: c.`day` < 3 |
| HDFS partitions=2/10 files=2 size=148.10KB |
| row-size=95B cardinality=2.00K |
| ==== |
| select t1.d, t2.d from functional.nulltable t1, functional.nulltable t2 |
| where not(t1.d IS DISTINCT FROM t2.d) |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: NOT (t1.d IS DISTINCT FROM t2.d) |
| | row-size=8B cardinality=1 |
| | |
| |--01:SCAN HDFS [functional.nulltable t2] |
| | HDFS partitions=1/1 files=1 size=18B |
| | row-size=4B cardinality=1 |
| | |
| 00:SCAN HDFS [functional.nulltable t1] |
| HDFS partitions=1/1 files=1 size=18B |
| row-size=4B cardinality=1 |
| ==== |
| select t1.d, t2.d |
| from functional.nulltable t1, functional.nulltable t2, functional.nulltable t3 |
| where t1.d IS DISTINCT FROM t2.d |
| and t3.a != t2.g |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 04:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: t3.a != t2.g |
| | row-size=34B cardinality=1 |
| | |
| |--02:SCAN HDFS [functional.nulltable t3] |
| | HDFS partitions=1/1 files=1 size=18B |
| | row-size=13B cardinality=1 |
| | |
| 03:NESTED LOOP JOIN [INNER JOIN] |
| | predicates: t1.d IS DISTINCT FROM t2.d |
| | row-size=21B cardinality=1 |
| | |
| |--00:SCAN HDFS [functional.nulltable t1] |
| | HDFS partitions=1/1 files=1 size=18B |
| | row-size=4B cardinality=1 |
| | |
| 01:SCAN HDFS [functional.nulltable t2] |
| HDFS partitions=1/1 files=1 size=18B |
| row-size=17B cardinality=1 |
| ==== |
| # IMPALA-3450: limits on join nodes are reflected in cardinality estimates. The test for |
| # this is embedded in PlannerTestBase.java and is not visible in these plans, as they only |
| # have explain_level=1 |
| select a.c_custkey as c_custkey from tpch.customer a, tpch.customer b limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:NESTED LOOP JOIN [CROSS JOIN] |
| | limit: 1 |
| | row-size=8B cardinality=1 |
| | |
| |--01:SCAN HDFS [tpch.customer b] |
| | HDFS partitions=1/1 files=1 size=23.08MB |
| | row-size=0B cardinality=150.00K |
| | |
| 00:SCAN HDFS [tpch.customer a] |
| HDFS partitions=1/1 files=1 size=23.08MB |
| row-size=8B cardinality=150.00K |
| ==== |
| select a.c_custkey as c_custkey from tpch.customer a left semi join tpch.customer b |
| using (c_custkey) limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [LEFT SEMI JOIN] |
| | hash predicates: a.c_custkey = b.c_custkey |
| | runtime filters: RF000 <- b.c_custkey |
| | limit: 1 |
| | row-size=8B cardinality=1 |
| | |
| |--01:SCAN HDFS [tpch.customer b] |
| | HDFS partitions=1/1 files=1 size=23.08MB |
| | row-size=8B cardinality=150.00K |
| | |
| 00:SCAN HDFS [tpch.customer a] |
| HDFS partitions=1/1 files=1 size=23.08MB |
| runtime filters: RF000 -> a.c_custkey |
| row-size=8B cardinality=150.00K |
| ==== |
| select b.c_custkey as c_custkey from tpch.customer a right semi join tpch.customer b |
| using (c_custkey) limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [RIGHT SEMI JOIN] |
| | hash predicates: a.c_custkey = b.c_custkey |
| | runtime filters: RF000 <- b.c_custkey |
| | limit: 1 |
| | row-size=8B cardinality=1 |
| | |
| |--01:SCAN HDFS [tpch.customer b] |
| | HDFS partitions=1/1 files=1 size=23.08MB |
| | row-size=8B cardinality=150.00K |
| | |
| 00:SCAN HDFS [tpch.customer a] |
| HDFS partitions=1/1 files=1 size=23.08MB |
| runtime filters: RF000 -> a.c_custkey |
| row-size=8B cardinality=150.00K |
| ==== |
| select a.c_custkey as c_custkey from tpch.customer a left outer join tpch.customer b |
| using (c_custkey) limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [LEFT OUTER JOIN] |
| | hash predicates: a.c_custkey = b.c_custkey |
| | limit: 1 |
| | row-size=16B cardinality=1 |
| | |
| |--01:SCAN HDFS [tpch.customer b] |
| | HDFS partitions=1/1 files=1 size=23.08MB |
| | row-size=8B cardinality=150.00K |
| | |
| 00:SCAN HDFS [tpch.customer a] |
| HDFS partitions=1/1 files=1 size=23.08MB |
| row-size=8B cardinality=150.00K |
| ==== |
| select b.c_custkey as c_custkey from tpch.customer a right outer join tpch.customer b |
| using (c_custkey) limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [RIGHT OUTER JOIN] |
| | hash predicates: a.c_custkey = b.c_custkey |
| | runtime filters: RF000 <- b.c_custkey |
| | limit: 1 |
| | row-size=16B cardinality=1 |
| | |
| |--01:SCAN HDFS [tpch.customer b] |
| | HDFS partitions=1/1 files=1 size=23.08MB |
| | row-size=8B cardinality=150.00K |
| | |
| 00:SCAN HDFS [tpch.customer a] |
| HDFS partitions=1/1 files=1 size=23.08MB |
| runtime filters: RF000 -> a.c_custkey |
| row-size=8B cardinality=150.00K |
| ==== |
| select a.c_custkey as c_custkey from tpch.customer a full outer join tpch.customer b |
| using (c_custkey) limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [FULL OUTER JOIN] |
| | hash predicates: a.c_custkey = b.c_custkey |
| | limit: 1 |
| | row-size=16B cardinality=1 |
| | |
| |--01:SCAN HDFS [tpch.customer b] |
| | HDFS partitions=1/1 files=1 size=23.08MB |
| | row-size=8B cardinality=150.00K |
| | |
| 00:SCAN HDFS [tpch.customer a] |
| HDFS partitions=1/1 files=1 size=23.08MB |
| row-size=8B cardinality=150.00K |
| ==== |
| select a.c_custkey as c_custkey from tpch.customer a left anti join tpch.customer b |
| using (c_custkey) limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [LEFT ANTI JOIN] |
| | hash predicates: a.c_custkey = b.c_custkey |
| | limit: 1 |
| | row-size=8B cardinality=1 |
| | |
| |--01:SCAN HDFS [tpch.customer b] |
| | HDFS partitions=1/1 files=1 size=23.08MB |
| | row-size=8B cardinality=150.00K |
| | |
| 00:SCAN HDFS [tpch.customer a] |
| HDFS partitions=1/1 files=1 size=23.08MB |
| row-size=8B cardinality=150.00K |
| ==== |
| select b.c_custkey as c_custkey from tpch.customer a right anti join tpch.customer b |
| using (c_custkey) limit 1 |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [RIGHT ANTI JOIN] |
| | hash predicates: a.c_custkey = b.c_custkey |
| | limit: 1 |
| | row-size=8B cardinality=1 |
| | |
| |--01:SCAN HDFS [tpch.customer b] |
| | HDFS partitions=1/1 files=1 size=23.08MB |
| | row-size=8B cardinality=150.00K |
| | |
| 00:SCAN HDFS [tpch.customer a] |
| HDFS partitions=1/1 files=1 size=23.08MB |
| row-size=8B cardinality=150.00K |
| ==== |
| with |
| t1 as (select cast(0 as decimal(20, 0)) as c1), |
| t2 as (select cast(0 as decimal(19, 19)) as c2) |
| select * from t1 join t2 on (c1 = c2) |
| ---- QUERYOPTIONS |
| decimal_v2=false |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: c1 = c2 |
| | row-size=32B cardinality=1 |
| | |
| |--01:UNION |
| | constant-operands=1 |
| | row-size=16B cardinality=1 |
| | |
| 00:UNION |
| constant-operands=1 |
| row-size=16B cardinality=1 |
| ==== |
| # Cannot create a hash join because decimal types are incompatible due to decimal_v2. |
| with |
| t1 as (select cast(0 as decimal(20, 0)) as c1), |
| t2 as (select cast(0 as decimal(19, 19)) as c2) |
| select * from t1 join t2 on (c1 = c2) |
| ---- QUERYOPTIONS |
| decimal_v2=true |
| ---- PLAN |
| InternalException: Unable create a hash join with equi-join predicate c1 = c2 because the operands cannot be cast without loss of precision. Operand types: DECIMAL(20,0) = DECIMAL(19,19). |
| ==== |
| with |
| t1 as (select cast(0 as decimal(19, 0)) as c1), |
| t2 as (select cast(0 as decimal(19, 19)) as c2) |
| select * from t1 join t2 on (c1 = c2) |
| ---- QUERYOPTIONS |
| decimal_v2=true |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: c1 = c2 |
| | row-size=32B cardinality=1 |
| | |
| |--01:UNION |
| | constant-operands=1 |
| | row-size=16B cardinality=1 |
| | |
| 00:UNION |
| constant-operands=1 |
| row-size=16B cardinality=1 |
| ==== |
| # join involving tables with no table stats |
| # one of the tables (alltypes) is a compressed text file |
| # tests that the default join strategy is broadcast |
| select * from functional_text_gzip.emptytable a inner join |
| functional_text_gzip.alltypes b on a.f2 = b.int_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.f2 = b.int_col |
| | runtime filters: RF000 <- b.int_col |
| | row-size=96B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional_text_gzip.alltypes b] |
| | HDFS partitions=24/24 files=24 size=77.88KB |
| | row-size=80B cardinality=unavailable |
| | |
| 00:SCAN HDFS [functional_text_gzip.emptytable a] |
| partitions=0/0 files=0 size=0B |
| runtime filters: RF000 -> a.f2 |
| row-size=16B cardinality=0 |
| ==== |
| # join involving tables with no table stats |
| # one of the tables (alltypes) is a compressed text file |
| # tests that the default join strategy is broadcast |
| select * from functional_text_bzip.emptytable a inner join |
| functional_text_bzip.alltypes b on a.f2 = b.int_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.f2 = b.int_col |
| | runtime filters: RF000 <- b.int_col |
| | row-size=96B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional_text_bzip.alltypes b] |
| | HDFS partitions=24/24 files=24 size=56.23KB |
| | row-size=80B cardinality=unavailable |
| | |
| 00:SCAN HDFS [functional_text_bzip.emptytable a] |
| partitions=0/0 files=0 size=0B |
| runtime filters: RF000 -> a.f2 |
| row-size=16B cardinality=0 |
| ==== |
| # join involving tables with no table stats |
| # one of the tables (alltypes) is a compressed text file |
| # tests that the default join strategy is broadcast |
| select * from functional_text_lzo.emptytable a inner join |
| functional_text_lzo.alltypes b on a.f2 = b.int_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.f2 = b.int_col |
| | runtime filters: RF000 <- b.int_col |
| | row-size=96B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional_text_lzo.alltypes b] |
| | HDFS partitions=24/24 files=24 size=123.32KB |
| | row-size=80B cardinality=unavailable |
| | |
| 00:SCAN HDFS [functional_text_lzo.emptytable a] |
| partitions=0/0 files=0 size=0B |
| runtime filters: RF000 -> a.f2 |
| row-size=16B cardinality=0 |
| ==== |
| # join involving tables with no table stats |
| # one of the tables (alltypes) is a compressed text file |
| # tests that the default join strategy is broadcast |
| select * from functional_text_snap.emptytable a inner join |
| functional_text_snap.alltypes b on a.f2 = b.int_col |
| ---- PLAN |
| PLAN-ROOT SINK |
| | |
| 02:HASH JOIN [INNER JOIN] |
| | hash predicates: a.f2 = b.int_col |
| | runtime filters: RF000 <- b.int_col |
| | row-size=96B cardinality=0 |
| | |
| |--01:SCAN HDFS [functional_text_snap.alltypes b] |
| | HDFS partitions=24/24 files=24 size=121.15KB |
| | row-size=80B cardinality=unavailable |
| | |
| 00:SCAN HDFS [functional_text_snap.emptytable a] |
| partitions=0/0 files=0 size=0B |
| runtime filters: RF000 -> a.f2 |
| row-size=16B cardinality=0 |
| ==== |