| --! qt:dataset:src |
| --! qt:dataset:part |
| -- following tests test queries in SELECT |
| set hive.mapred.mode=nonstrict; |
| set hive.explain.user=false; |
| |
| -- SORT_QUERY_RESULTS |
| |
| -- IN, non corr |
| explain SELECT p_size, p_size IN ( |
| SELECT MAX(p_size) FROM part) |
| FROM part; |
| |
| SELECT p_size, p_size IN ( |
| SELECT MAX(p_size) FROM part) |
| FROM part ; |
| |
| -- IN, corr |
| EXPLAIN SELECT p_size, p_size IN ( |
| SELECT MAX(p_size) FROM part p where p.p_type = part.p_type) |
| FROM part; |
| |
| SELECT p_size, p_size IN ( |
| SELECT MAX(p_size) FROM part p where p.p_type = part.p_type) |
| FROM part; |
| |
| -- NOT IN, non corr |
| explain SELECT p_size, p_size NOT IN ( |
| SELECT MAX(p_size) FROM part) |
| FROM part; |
| |
| SELECT p_size, p_size NOT IN ( |
| SELECT MAX(p_size) FROM part) |
| FROM part ; |
| |
| -- NOT IN, corr |
| EXPLAIN SELECT p_size, p_size NOT IN ( |
| SELECT MAX(p_size) FROM part p where p.p_type = part.p_type) |
| FROM part; |
| |
| SELECT p_size, p_size NOT IN ( |
| SELECT MAX(p_size) FROM part p where p.p_type = part.p_type) |
| FROM part; |
| |
| -- EXISTS, non corr |
| explain SELECT p_size, EXISTS(SELECT p_size FROM part) |
| FROM part; |
| |
| SELECT p_size, EXISTS(SELECT p_size FROM part) |
| FROM part; |
| |
| -- EXISTS, corr |
| explain SELECT p_size, EXISTS(SELECT p_size FROM part pp where pp.p_type = part.p_type) |
| FROM part; |
| |
| SELECT p_size, EXISTS(SELECT p_size FROM part pp where pp.p_type = part.p_type) |
| FROM part; |
| |
| -- NOT EXISTS, non corr |
| explain SELECT p_size, NOT EXISTS(SELECT p_size FROM part) |
| FROM part; |
| |
| SELECT p_size, NOT EXISTS(SELECT p_size FROM part) |
| FROM part; |
| |
| -- NOT EXISTS, corr |
| explain SELECT p_size, NOT EXISTS(SELECT p_size FROM part pp where pp.p_type = part.p_type) |
| FROM part; |
| |
| SELECT p_size, NOT EXISTS(SELECT p_size FROM part pp where pp.p_type = part.p_type) |
| FROM part; |
| |
| -- scalar with COUNT, since where is always false count should return 0 |
| explain select p_size, (select count(p_name) from part p where p.p_type = part.p_name) from part; |
| select p_size, (select count(p_name) from part p where p.p_type = part.p_name) from part; |
| |
| -- scalar with MAX, since where is always false max should return NULL |
| explain select p_size, (select max(p_name) from part p where p.p_type = part.p_name) from part; |
| select p_size, (select max(p_name) from part p where p.p_type = part.p_name) from part; |
| |
| -- SCALAR, non corr |
| explain SELECT p_size, (SELECT max(p_size) FROM part) |
| FROM part; |
| |
| SELECT p_size, (SELECT max(p_size) FROM part) |
| FROM part; |
| |
| -- IN, corr with scalar |
| explain |
| select * |
| from src b |
| where b.key in |
| (select (select max(key) from src) |
| from src a |
| where b.value = a.value and a.key > '9' |
| ); |
| select * |
| from src b |
| where b.key in |
| (select (select max(key) from src) |
| from src a |
| where b.value = a.value and a.key > '9' |
| ); |
| |
| -- corr within corr..correcionnn.. |
| explain |
| select * |
| from src b |
| where b.key in |
| (select (select max(key) from src sc where sc.value = a.value) |
| from src a |
| where b.value = a.value and a.key > '9' |
| ); |
| |
| select * |
| from src b |
| where b.key in |
| (select (select max(key) from src sc where sc.value = a.value) |
| from src a |
| where b.value = a.value and a.key > '9' ); |
| |
| CREATE table tnull_n3(i int); |
| insert into tnull_n3 values(null); |
| |
| -- IN query returns unknown/NULL instead of true/false |
| explain select p_size, p_size IN (select i from tnull_n3) from part; |
| select p_size, p_size IN (select i from tnull_n3) from part; |
| |
| CREATE TABLE tempty_n3(i int); |
| |
| explain select p_size, (select count(*) from tempty_n3) from part; |
| select p_size, (select count(*) from tempty_n3) from part; |
| |
| explain select p_size, (select max(i) from tempty_n3) from part; |
| select p_size, (select max(i) from tempty_n3) from part; |
| |
| DROP table tempty_n3; |
| DROP table tnull_n3; |
| |
| -- following tests test subquery in all kind of expressions (except UDAF, UDA and UDTF) |
| |
| |
| |
| -- different data types |
| -- string with string |
| -- null with int |
| -- boolean (IN, EXISTS) with AND, OR |
| |
| -- scalar, corr |
| explain SELECT p_size, 1+(SELECT max(p_size) FROM part p |
| WHERE p.p_type = part.p_type) from part; |
| SELECT p_size, 1+(SELECT max(p_size) FROM part p |
| WHERE p.p_type = part.p_type) from part; |
| |
| -- IS NULL |
| explain SELECT p_size, (SELECT count(p_size) FROM part p |
| WHERE p.p_type = part.p_type) IS NULL from part; |
| SELECT p_size, (SELECT count(p_size) FROM part p |
| WHERE p.p_type = part.p_type) IS NULL from part; |
| |
| -- scalar, non-corr, non agg |
| explain select p_type, (select p_size from part order by p_size limit 1) = 1 from part order by p_type; |
| select p_type, (select p_size from part order by p_size limit 1) = 1 from part order by p_type; |
| |
| -- in corr, multiple |
| EXPLAIN SELECT p_size, p_size IN ( |
| SELECT MAX(p_size) FROM part p where p.p_type = part.p_type) AND |
| p_name IN (SELECT min(p_name) from part) |
| FROM part; |
| SELECT p_size, p_size IN ( |
| SELECT MAX(p_size) FROM part p where p.p_type = part.p_type) AND |
| p_name IN (SELECT min(p_name) from part) |
| FROM part; |
| |
| -- exists, corr |
| explain SELECT p_size, NOT EXISTS(SELECT p_size FROM part pp where pp.p_type = part.p_type) |
| FROM part; |
| SELECT p_size, NOT EXISTS(SELECT p_size FROM part pp where pp.p_type = part.p_type) |
| FROM part; |
| |
| -- scalar subquery within IN subquery |
| explain select p_size, (p_size IN |
| (select (select max(p_size) from part) as sb from part order by sb limit 1)) = true |
| from part; |
| select p_size, (p_size IN |
| (select (select max(p_size) from part) as sb from part order by sb limit 1)) = true |
| from part; |
| |
| explain select case when (select count(*) |
| from part |
| where p_size between 1 and 20) > 409437 |
| then (select avg(p_partkey) |
| from part |
| where p_partkey between 1 and 20) |
| else (select max(p_size) |
| from part |
| where p_partkey between 10000 and 20000) end sq |
| from part; |
| |
| select case when (select count(*) |
| from part |
| where p_size between 1 and 20) > 409437 |
| then (select avg(p_partkey) |
| from part |
| where p_partkey between 1 and 20) |
| else (select max(p_size) |
| from part |
| where p_partkey between 10000 and 20000) end sq |
| from part; |
| |
| |
| explain select max(p_size) > ( select count(*)-1 from part) from part; |
| select max(p_size) > ( select count(*)-1 from part) from part; |
| |
| -- corr scalar query in project and scalar query in filter |
| explain select o.p_size, (select count(distinct p_type) from part p where p.p_partkey = o.p_partkey) tmp |
| FROM part o right join (select * from part where p_size > (select avg(p_size) from part)) t on t.p_partkey = o.p_partkey; |
| select o.p_size, (select count(distinct p_type) from part p where p.p_partkey = o.p_partkey) tmp |
| FROM part o right join (select * from part where p_size > (select avg(p_size) from part)) t on t.p_partkey = o.p_partkey; |
| |
| -- multiple scalar queries in project |
| explain select (select max(p_size) from part), (select min(p_size) from part), |
| (select avg(p_size) from part), (select sum(p_size) from part) |
| from part; |
| select (select max(p_size) from part), (select min(p_size) from part), |
| (select avg(p_size) from part), (select sum(p_size) from part) |
| from part; |
| |
| -- scalar subquery with join |
| explain select t1.p_size, |
| (select count(*) from part p, part pp where p.p_size = pp.p_size and p.p_type = pp.p_type) |
| from part t1; |
| select t1.p_size, |
| (select count(*) from part p, part pp where p.p_size = pp.p_size and p.p_type = pp.p_type) |
| from part t1; |
| |
| -- scalar subquery in join and in filter |
| explain select t1.p_size, |
| (select count(*) from part p, part pp where p.p_size = pp.p_size and p.p_type = pp.p_type |
| and (select sum(p_size) from part a1 where a1.p_partkey = p.p_partkey |
| group by a1.p_partkey) > 0) |
| from part t1; |
| select t1.p_size, |
| (select count(*) from part p, part pp where p.p_size = pp.p_size and p.p_type = pp.p_type |
| and (select sum(p_size) from part a1 where a1.p_partkey = p.p_partkey |
| group by a1.p_partkey) > 0) |
| from part t1; |
| |
| -- multiple scalar queries in projecdt with scalar query in filter |
| explain select t1.p_size, |
| (select count(*) from part t2 where t2.p_partkey = t1.p_partkey group by t2.p_partkey), |
| (select count(*) from part p, part pp where p.p_size = pp.p_size and p.p_type = pp.p_type |
| and (select sum(p_size) from part a1 where a1.p_partkey = p.p_partkey |
| group by a1.p_partkey) > 0) |
| from part t1; |
| select t1.p_size, |
| (select count(*) from part t2 where t2.p_partkey = t1.p_partkey group by t2.p_partkey), |
| (select count(*) from part p, part pp where p.p_size = pp.p_size and p.p_type = pp.p_type |
| and (select sum(p_size) from part a1 where a1.p_partkey = p.p_partkey |
| group by a1.p_partkey) > 0) |
| from part t1; |
| |
| -- subquery in UDF |
| explain SELECT p_size, exp((SELECT max(p_size) FROM part p WHERE p.p_type = part.p_type)) from part; |
| SELECT p_size, exp((SELECT max(p_size) FROM part p WHERE p.p_type = part.p_type)) from part; |