blob: be7e7867bfa062049e0eefd9cab2c33958cc11bc [file] [log] [blame]
set hive.merge.nway.joins=false;
set hive.vectorized.execution.enabled=false;
set hive.auto.convert.join=true;
set hive.auto.convert.anti.join=true;
drop table if exists tt1;
drop table if exists tt2;
drop table if exists tt3;
create table tt1 (ws_order_number bigint, ws_ext_ship_cost decimal(7, 2));
create table tt2 (ws_order_number bigint);
create table tt3 (wr_order_number bigint);
insert into tt1 values (42, 3093.96), (1041, 299.28), (1378, 85.56), (1378, 719.44), (1395, 145.68);
insert into tt2 values (1378), (1395);
insert into tt3 values (42), (1041);
-- The result should be the same regardless of vectorization.
explain
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
explain cbo
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
explain
select * from tt1 where not exists(select * from tt2 where tt1.ws_order_number = tt2.ws_order_number);
explain cbo
select * from tt1 where not exists(select * from tt2 where tt1.ws_order_number = tt2.ws_order_number);
select * from tt1 where not exists(select * from tt2 where tt1.ws_order_number = tt2.ws_order_number);
set hive.vectorized.execution.enabled=true;
explain
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
explain cbo
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
explain
select * from tt1 where not exists(select * from tt2 where tt1.ws_order_number = tt2.ws_order_number);
explain cbo
select * from tt1 where not exists(select * from tt2 where tt1.ws_order_number = tt2.ws_order_number);
select * from tt1 where not exists(select * from tt2 where tt1.ws_order_number = tt2.ws_order_number);
-- Test n-way join which contains AntiJoin
set hive.vectorized.execution.enabled=false;
set hive.merge.nway.joins=true;
explain
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
explain cbo
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
-- Test MergeJoin -> MapJoin pattern
set hive.merge.nway.joins=false;
set hive.vectorized.execution.enabled=false;
set hive.auto.convert.join=true;
set hive.auto.convert.anti.join=true;
alter table tt1 update statistics set ('numRows'='10000000');
alter table tt2 update statistics set ('numRows'='10000000');
alter table tt3 update statistics set ('numRows'='2');
explain
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
explain cbo
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);
select sum(ws_ext_ship_cost) from tt1 ws1, tt2 ws2
where ws1.ws_order_number = ws2.ws_order_number
and not exists(select * from tt3 wr1 where ws1.ws_order_number = wr1.wr_order_number);