blob: d8fb57c3ccc26ad9a85948a206210f7e2773c8b8 [file] [log] [blame]
# Constant conjunct in WHERE clause turns query block into an empty-set node.
select t1.id, t2.id
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
where false
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# HBase scan turns into empty-set node due to a constant conjunct.
select * from functional_hbase.alltypessmall where false
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# Data source scan turns into empty-set node due to a constant conjunct.
select *
from functional.alltypes_datasource a
inner join functional.alltypestiny b
on a.id = b.id
where length("a") > 7
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# Constant conjunct in ON clause turns query block into an empty-set node.
select *
from functional.alltypestiny t1
inner join functional.alltypes t2
on (t1.id = t2.id and (false or false))
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# Constant conjunct in WHERE clause turns query block into an aggregation
# fed by an empty-set node.
select count(int_col), avg(double_col), count(*)
from functional.alltypes
where null
---- PLAN
PLAN-ROOT SINK
|
01:AGGREGATE [FINALIZE]
| output: count(int_col), avg(double_col), count(*)
| row-size=24B cardinality=1
|
00:EMPTYSET
====
# Constant conjunct in ON clause turns query block into an aggregation
# fed by an empty-sed node.
select count(*)
from functional.alltypestiny t1
inner join functional.alltypes t2
on (t1.id = t2.id and (false or false))
---- PLAN
PLAN-ROOT SINK
|
01:AGGREGATE [FINALIZE]
| output: count(*)
| row-size=8B cardinality=1
|
00:EMPTYSET
====
# Constant conjunct in HAVING clause turns query block into an empty-set node,
# regardless of aggregation.
select t1.int_col, count(*)
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
group by t1.int_col
having ifnull(null, false)
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# Constant conjunct causes empty-set inline view.
select e.id, f.id
from functional.alltypessmall f
inner join
(select t1.id
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
where 1 + 3 > 10) e
on e.id = f.id
---- PLAN
PLAN-ROOT SINK
|
02:HASH JOIN [INNER JOIN]
| hash predicates: f.id = t1.id
| runtime filters: RF000 <- t1.id
| row-size=8B cardinality=0
|
|--01:EMPTYSET
|
00:SCAN HDFS [functional.alltypessmall f]
HDFS partitions=4/4 files=4 size=6.32KB
runtime filters: RF000 -> f.id
row-size=4B cardinality=100
====
# Constant conjunct causes union operand to be dropped.
select * from functional.alltypessmall
union all
select * from functional.alltypes where "abc" = "cde"
union all
select * from functional.alltypestiny
---- PLAN
PLAN-ROOT SINK
|
00:UNION
| pass-through-operands: all
| row-size=89B cardinality=108
|
|--02:SCAN HDFS [functional.alltypestiny]
| HDFS partitions=4/4 files=4 size=460B
| row-size=89B cardinality=8
|
01:SCAN HDFS [functional.alltypessmall]
HDFS partitions=4/4 files=4 size=6.32KB
row-size=89B cardinality=100
====
# Constant conjunct turns union into an empty-set node.
select *
from functional.alltypes a
full outer join
(select * from
(select * from functional.alltypestiny
union all
select * from functional.alltypessmall) t1
where null) t2
on a.id = t2.id
---- PLAN
PLAN-ROOT SINK
|
02:HASH JOIN [FULL OUTER JOIN]
| hash predicates: a.id = id
| row-size=178B cardinality=7.30K
|
|--01:EMPTYSET
|
00:SCAN HDFS [functional.alltypes a]
HDFS partitions=24/24 files=24 size=478.45KB
row-size=89B cardinality=7.30K
====
# Constant conjunct in the ON-clause of an outer join is
# assigned to the join.
select *
from functional.alltypessmall a
left outer join functional.alltypestiny b
on (a.id = b.id and 1 + 1 > 10)
---- PLAN
PLAN-ROOT SINK
|
02:HASH JOIN [LEFT OUTER JOIN]
| hash predicates: a.id = b.id
| other join predicates: FALSE
| row-size=178B cardinality=100
|
|--01:SCAN HDFS [functional.alltypestiny b]
| HDFS partitions=4/4 files=4 size=460B
| row-size=89B cardinality=8
|
00:SCAN HDFS [functional.alltypessmall a]
HDFS partitions=4/4 files=4 size=6.32KB
row-size=89B cardinality=100
====
# Constant conjunct in the ON-clause of an outer join is
# assigned to the join.
select *
from functional.alltypessmall a
right outer join functional.alltypestiny b
on (a.id = b.id and !true)
---- PLAN
PLAN-ROOT SINK
|
02:HASH JOIN [RIGHT OUTER JOIN]
| hash predicates: a.id = b.id
| other join predicates: FALSE
| runtime filters: RF000 <- b.id
| row-size=178B cardinality=9
|
|--01:SCAN HDFS [functional.alltypestiny b]
| HDFS partitions=4/4 files=4 size=460B
| row-size=89B cardinality=8
|
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
====
# Constant conjunct in the ON-clause of an outer join is
# assigned to the join.
select *
from functional.alltypessmall a
full outer join functional.alltypestiny b
on (a.id = b.id and null = "abc")
---- PLAN
PLAN-ROOT SINK
|
02:HASH JOIN [FULL OUTER JOIN]
| hash predicates: a.id = b.id
| other join predicates: NULL
| row-size=178B cardinality=108
|
|--01:SCAN HDFS [functional.alltypestiny b]
| HDFS partitions=4/4 files=4 size=460B
| row-size=89B cardinality=8
|
00:SCAN HDFS [functional.alltypessmall a]
HDFS partitions=4/4 files=4 size=6.32KB
row-size=89B cardinality=100
====
# Limit 0 turns query block into an empty-set node.
select t1.id, t2.id
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
limit 0
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# Limit 0 turns query block into an empty-set node.
select count(int_col), avg(double_col), count(*)
from functional.alltypes
limit 0
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# Limit 0 causes empty-set inline view.
select e.id, f.id
from functional.alltypessmall f
inner join
(select t1.id
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
limit 0) e
on e.id = f.id
---- PLAN
PLAN-ROOT SINK
|
02:HASH JOIN [INNER JOIN]
| hash predicates: f.id = t1.id
| runtime filters: RF000 <- t1.id
| row-size=8B cardinality=0
|
|--01:EMPTYSET
|
00:SCAN HDFS [functional.alltypessmall f]
HDFS partitions=4/4 files=4 size=6.32KB
runtime filters: RF000 -> f.id
row-size=4B cardinality=100
====
# Limit 0 causes union operand to be dropped.
select * from functional.alltypessmall
union all
select * from functional.alltypes limit 0
union all
select * from functional.alltypestiny
---- PLAN
PLAN-ROOT SINK
|
00:UNION
| pass-through-operands: all
| row-size=89B cardinality=108
|
|--02:SCAN HDFS [functional.alltypestiny]
| HDFS partitions=4/4 files=4 size=460B
| row-size=89B cardinality=8
|
01:SCAN HDFS [functional.alltypessmall]
HDFS partitions=4/4 files=4 size=6.32KB
row-size=89B cardinality=100
====
# Limit 0 causes empty-set union.
select * from functional.alltypessmall
union all
select * from functional.alltypes where "abc" = "cde"
union all
(select * from functional.alltypestiny)
limit 0
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# Inline view with a constant select stmt that is guaranteed to be empty.
select count(w1.c1)
from
(select 1 as c1 from functional.alltypessmall)
w1 where w1.c1 is null
union all
select int_col from functional.alltypesagg
---- PLAN
PLAN-ROOT SINK
|
00:UNION
| row-size=8B cardinality=11.00K
|
|--03:SCAN HDFS [functional.alltypesagg]
| HDFS partitions=11/11 files=11 size=814.73KB
| row-size=4B cardinality=11.00K
|
02:AGGREGATE [FINALIZE]
| output: count(1)
| row-size=8B cardinality=1
|
01:EMPTYSET
====
# IMPALA-1234: Analytic with constant empty result set failed precondition check in FE
select MIN(int_col) OVER () FROM functional.alltypes limit 0
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# IMPALA-1860: INSERT/CTAS should evaluate and apply constant predicates.
insert into functional.alltypes partition(year, month)
select * from functional.alltypes where 1 = 0
---- PLAN
WRITE TO HDFS [functional.alltypes, OVERWRITE=false, PARTITION-KEYS=(year,month)]
| partitions=24
|
01:SORT
| order by: year ASC NULLS LAST, month ASC NULLS LAST
| row-size=89B cardinality=0
|
00:EMPTYSET
====
# IMPALA-1860: INSERT/CTAS should evaluate and apply constant predicates.
with t as (select * from functional.alltypes where coalesce(NULL) > 10)
insert into functional.alltypes partition(year, month)
select * from t
---- PLAN
WRITE TO HDFS [functional.alltypes, OVERWRITE=false, PARTITION-KEYS=(year,month)]
| partitions=24
|
01:SORT
| order by: year ASC NULLS LAST, month ASC NULLS LAST
| row-size=89B cardinality=0
|
00:EMPTYSET
====
# IMPALA-1860: INSERT/CTAS should evaluate and apply constant predicates.
create table test_1860 as
select * from (select 1 from functional.alltypes limit 0) v
---- PLAN
WRITE TO HDFS [default.test_1860, OVERWRITE=false]
| partitions=1
|
00:EMPTYSET
====
# IMPALA-1960: Exprs in the aggregation that reference slots from an inline view when
# the select stmt has an empty select-project-join portion.
select sum(T.id), count(T.int_col)
from
(select id, int_col, bigint_col from functional.alltypestiny) T
where false
---- PLAN
PLAN-ROOT SINK
|
01:AGGREGATE [FINALIZE]
| output: sum(id), count(int_col)
| row-size=16B cardinality=1
|
00:EMPTYSET
====
# IMPALA-1960: Exprs in the aggregation that reference slots from an inline view when
# the select stmt has an empty select-project-join portion.
select sum(T1.id + T2.int_col)
from
(select id, bigint_col from functional.alltypestiny) T1 inner join
(select id, int_col from functional.alltypestiny) T2 on (T1.id = T2.id)
where T1.bigint_col < 10 and 1 > 1
---- PLAN
PLAN-ROOT SINK
|
01:AGGREGATE [FINALIZE]
| output: sum(id + int_col)
| row-size=8B cardinality=1
|
00:EMPTYSET
====
# IMPALA-1960: Exprs in the aggregation that reference slots from an inline view when
# the select stmt has an empty select-project-join portion.
select count(distinct T1.int_col)
from
(select id, int_col from functional.alltypestiny) T1 inner join
functional.alltypessmall T2 on T1.id = T2.id
where T2.bigint_col < 10 and false
---- PLAN
PLAN-ROOT SINK
|
02:AGGREGATE [FINALIZE]
| output: count(T1.int_col)
| row-size=8B cardinality=1
|
01:AGGREGATE
| group by: int_col
| row-size=4B cardinality=0
|
00:EMPTYSET
====
# IMPALA-2088: Test empty union operands with analytic functions.
# TODO: Simplify the plan of unions with empty operands using an empty set node.
# TODO: Simplify the plan of unions with only a single non-empty operand to not
# use a union node (this is tricky because a union materializes a new tuple).
select lead(-496, 81) over (order by t1.double_col desc, t1.id asc)
from functional.alltypestiny t1 where 5 = 6
union
select 794.67
from functional.alltypes t1 where 5 = 6
union all
select coalesce(10.4, int_col)
from functional.alltypes where false
---- PLAN
PLAN-ROOT SINK
|
02:UNION
| pass-through-operands: all
| row-size=4B cardinality=0
|
01:AGGREGATE [FINALIZE]
| group by: lead(-496, 81, NULL) OVER(...)
| row-size=4B cardinality=0
|
00:UNION
row-size=4B cardinality=0
====
# IMPALA-2088: Test empty union operands with analytic functions.
select lead(-496, 81) over (order by t1.double_col desc, t1.id asc)
from functional.alltypestiny t1 where 5 = 6
union
select 794.67
from functional.alltypes t1 where 5 = 6
union all
select coalesce(10.4, int_col)
from functional.alltypes where false
union all
select 1
union all select bigint_col
from functional.alltypestiny
---- PLAN
PLAN-ROOT SINK
|
02:UNION
| constant-operands=1
| pass-through-operands: 01
| row-size=16B cardinality=9
|
|--03:SCAN HDFS [functional.alltypestiny]
| HDFS partitions=4/4 files=4 size=460B
| row-size=8B cardinality=8
|
01:AGGREGATE [FINALIZE]
| group by: lead(-496, 81, NULL) OVER(...)
| row-size=16B cardinality=0
|
00:UNION
row-size=16B cardinality=0
====
# IMPALA-2216: Make sure the final output exprs are substituted, even
# if the resulting plan is an EmptySetNode.
select * from (select 10 as i, 2 as j, '2013' as s) as t
where t.i < 10
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# IMPALA-2216: Make sure the final output exprs are substituted, even
# if the table sink is fed by an EmptySetNode.
insert into functional.alltypes (id) partition(year,month)
select * from (select 10 as i, 2 as j, 2013 as s) as t
where t.i < 10
---- PLAN
WRITE TO HDFS [functional.alltypes, OVERWRITE=false, PARTITION-KEYS=(2,2013)]
| partitions=1
|
00:EMPTYSET
====
# IMPALA-2430: Test empty blocks containing relative table refs.
select c_custkey, v1.cnt, v2.o_orderkey, v3.l_linenumber, v4.cnt
from tpch_nested_parquet.customer c
left outer join
(select count(*) cnt from c.c_orders
where false) v1
left outer join
(select o_orderkey from c.c_orders
where 20 < 10) v2
left outer join
(select l_linenumber from c.c_orders.o_lineitems
where "a" in ("b", "c")) v3
left outer join
(select count(*) cnt from c.c_orders o left outer join
(select l_linenumber from o.o_lineitems
where null) nv) v4
where c_custkey < 10
---- PLAN
PLAN-ROOT SINK
|
01:SUBPLAN
| row-size=48B cardinality=15.00K
|
|--16:NESTED LOOP JOIN [LEFT OUTER JOIN]
| | row-size=48B cardinality=1
| |
| |--12:AGGREGATE [FINALIZE]
| | | output: count(*)
| | | row-size=8B cardinality=1
| | |
| | 08:SUBPLAN
| | | row-size=0B cardinality=10
| | |
| | |--11:NESTED LOOP JOIN [RIGHT OUTER JOIN]
| | | | row-size=0B cardinality=1
| | | |
| | | |--09:SINGULAR ROW SRC
| | | | row-size=12B cardinality=1
| | | |
| | | 10:EMPTYSET
| | |
| | 07:UNNEST [c.c_orders o]
| | row-size=0B cardinality=10
| |
| 15:NESTED LOOP JOIN [LEFT OUTER JOIN]
| | row-size=40B cardinality=1
| |
| |--06:EMPTYSET
| |
| 14:NESTED LOOP JOIN [LEFT OUTER JOIN]
| | row-size=36B cardinality=1
| |
| |--05:EMPTYSET
| |
| 13:NESTED LOOP JOIN [RIGHT OUTER JOIN]
| | row-size=28B cardinality=1
| |
| |--02:SINGULAR ROW SRC
| | row-size=56B cardinality=1
| |
| 04:AGGREGATE [FINALIZE]
| | output: count(*)
| | row-size=8B cardinality=1
| |
| 03:EMPTYSET
|
00:SCAN HDFS [tpch_nested_parquet.customer c]
HDFS partitions=1/1 files=4 size=289.01MB
predicates: c_custkey < 10
row-size=56B cardinality=15.00K
====
# IMPALA-2539: Test empty union operands containing relative table refs.
select c_custkey, o_orderkey
from tpch_nested_parquet.customer c,
(select o_orderkey from c.c_orders o1
union distinct
select o_orderkey from c.c_orders o2
where false
union all
select o_orderkey from c.c_orders o3
where false
) v1
where c_custkey = 1
---- PLAN
PLAN-ROOT SINK
|
01:SUBPLAN
| row-size=28B cardinality=10
|
|--07:NESTED LOOP JOIN [CROSS JOIN]
| | row-size=28B cardinality=10
| |
| |--02:SINGULAR ROW SRC
| | row-size=44B cardinality=1
| |
| 06:UNION
| | row-size=8B cardinality=10
| |
| 05:AGGREGATE [FINALIZE]
| | group by: o_orderkey
| | row-size=8B cardinality=10
| |
| 03:UNION
| | row-size=8B cardinality=10
| |
| 04:UNNEST [c.c_orders o1]
| row-size=8B cardinality=10
|
00:SCAN HDFS [tpch_nested_parquet.customer c]
HDFS partitions=1/1 files=4 size=289.01MB
predicates: c_custkey = 1
row-size=44B cardinality=1
====
# IMPALA-2215: Having clause without aggregation.
select 1 from (select 1) v having 1 > 1
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# IMPALA-5562: Relative table ref and limit 0.
select * from tpch_nested_parquet.customer c, c.c_orders limit 0
---- PLAN
PLAN-ROOT SINK
|
00:EMPTYSET
====
# IMPALA-5812: Test that a cross join with a constant select that returns an empty result
# set translates into an EMPTYSET in the final plan
select count(*) from functional.alltypes x cross join (select 1 as j) y where j is null
---- PLAN
PLAN-ROOT SINK
|
03:AGGREGATE [FINALIZE]
| output: count(*)
| row-size=8B cardinality=1
|
02:NESTED LOOP JOIN [CROSS JOIN]
| row-size=1B cardinality=0
|
|--01:EMPTYSET
|
00:SCAN HDFS [functional.alltypes x]
HDFS partitions=24/24 files=24 size=478.45KB
row-size=0B cardinality=7.30K
====