| ==== |
| ---- QUERY |
| # Verification that the setup of SEMIJOIN tables was correct. (SemiJoinTblA) |
| SELECT * FROM SemiJoinTblA |
| ---- RESULTS |
| 1,1,1 |
| 1,1,10 |
| 1,2,10 |
| 1,3,10 |
| NULL,NULL,30 |
| 2,4,30 |
| 2,NULL,20 |
| ---- TYPES |
| INT, INT, INT |
| ==== |
| ---- QUERY |
| # Verification that the setup of SEMIJOIN tables was correct. (SemiJoinTblB) |
| SELECT * FROM SemiJoinTblB |
| ---- RESULTS |
| 1,1,1 |
| 1,1,10 |
| 1,2,5 |
| 1,NULL,10 |
| 2,10,NULL |
| 3,NULL,NULL |
| 3,NULL,50 |
| ---- TYPES |
| INT, INT, INT |
| ==== |
| ---- QUERY |
| # Testing left anti join |
| select j.* from functional_parquet.JoinTbl j |
| left anti join functional_parquet.DimTbl d |
| on j.test_id = d.id |
| ---- RESULTS |
| 1106,'Name6',94612,5000 |
| 1106,'Name16',94612,5000 |
| 1106,'Name6',94616,5000 |
| 1106,'Name16',94616,5000 |
| 1106,'Name6',94612,15000 |
| 1106,'Name16',94612,15000 |
| 1106,'Name6',94616,15000 |
| 1106,'Name16',94616,15000 |
| ---- TYPES |
| bigint, string, int, int |
| ==== |
| ---- QUERY |
| # Testing left anti join on string column |
| select j.* from functional_parquet.JoinTbl j |
| left anti join functional_parquet.DimTbl d |
| on j.test_name = d.name |
| ---- RESULTS |
| 1006,'Name16',94612,5000 |
| 1106,'Name16',94612,5000 |
| 1006,'Name16',94616,5000 |
| 1106,'Name16',94616,5000 |
| 1006,'Name16',94612,15000 |
| 1106,'Name16',94612,15000 |
| 1006,'Name16',94616,15000 |
| 1106,'Name16',94616,15000 |
| ---- TYPES |
| bigint, string, int, int |
| ==== |
| ---- QUERY |
| # Testing multi-way joins that include a left anti join |
| select count(*) from functional_parquet.JoinTbl j |
| left anti join functional_parquet.DimTbl d |
| on j.test_id = d.id |
| left outer join functional_parquet.JoinTbl k |
| on j.test_id = k.test_id |
| ---- RESULTS |
| 64 |
| ---- TYPES |
| BIGINT |
| ==== |
| ---- QUERY |
| # Testing multi-way joins that include only left anti joins |
| select count(*) from functional_parquet.JoinTbl j |
| left anti join functional_parquet.DimTbl d |
| on j.test_id = d.id |
| left anti join functional_parquet.JoinTbl k |
| on j.test_id = k.test_id |
| ---- RESULTS |
| 0 |
| ---- TYPES |
| BIGINT |
| ==== |
| ---- QUERY |
| # Regression test for IMPALA-1160. Proper handling of left anti joins with NULLs |
| SELECT a.* FROM SemiJoinTblA a |
| LEFT ANTI JOIN SemiJoinTblB b ON a.b = b.b |
| ---- RESULTS |
| 2,4,30 |
| 1,3,10 |
| 2,NULL,20 |
| NULL,NULL,30 |
| ---- TYPES |
| INT, INT, INT |
| ==== |
| ---- QUERY |
| # Regression test for IMPALA-1175: Anti join query crashes Impala. |
| SELECT * FROM SemiJoinTblA A LEFT ANTI JOIN |
| (SELECT count(*) `$c$2`, B.b `$c$1` FROM SemiJoinTblB B GROUP BY B.b) `$a$1` |
| ON A.a != `$a$1`.`$c$2` AND `$a$1`.`$c$1` = A.b |
| ---- RESULTS |
| 1,2,10 |
| 1,3,10 |
| NULL,NULL,30 |
| 2,4,30 |
| 2,NULL,20 |
| ---- TYPES |
| INT, INT, INT |
| ==== |
| ---- QUERY |
| # Regression tests for IMPALA-1177: Incorrect results in query with ANTI JOIN on tinyint |
| # column with nulls. |
| SELECT COUNT(*) FROM functional_parquet.alltypesagg t1 |
| LEFT ANTI JOIN functional_parquet.alltypes t2 |
| ON t2.tinyint_col = t1.tinyint_col |
| ---- RESULTS |
| 2000 |
| ---- TYPES |
| BIGINT |
| ==== |
| ---- QUERY |
| SELECT COUNT(*) FROM functional_parquet.alltypesagg t1 |
| LEFT ANTI JOIN functional_parquet.alltypes t2 |
| ON t2.tinyint_col = t1.tinyint_col and t1.day = 1 |
| ---- RESULTS |
| 10100 |
| ---- TYPES |
| BIGINT |
| ==== |
| ---- QUERY |
| SELECT COUNT(*) FROM functional_parquet.alltypesagg t1 |
| LEFT ANTI JOIN functional_parquet.alltypes t2 |
| ON t2.tinyint_col = t1.tinyint_col and t2.month = 1 |
| ---- RESULTS |
| 2000 |
| ==== |
| ---- QUERY |
| # Regression test for IMPALA-1204: ANTI JOIN crash running complicated query with right |
| # joins. |
| SELECT 1 FROM functional_parquet.alltypestiny t1 |
| INNER JOIN functional_parquet.alltypestiny t2 |
| ON t2.bigint_col = t1.tinyint_col AND t2.tinyint_col = t1.id |
| LEFT ANTI JOIN |
| (SELECT 1 `$c$2`, tt6.id `$c$1` |
| FROM functional_parquet.alltypes tt5 |
| RIGHT OUTER JOIN functional_parquet.alltypestiny tt6 |
| ON tt6.month = tt5.bigint_col) `$a$1` ON t2.int_col = `$a$1`.`$c$1` |
| ---- RESULTS |
| ---- TYPES |
| TINYINT |
| ==== |
| ---- QUERY |
| # left semi-join on bigint |
| select d.* from functional_parquet.DimTbl d |
| left semi join functional_parquet.JoinTbl j |
| on (d.id = j.test_id) |
| ---- RESULTS |
| 1001,'Name1',94611 |
| 1002,'Name2',94611 |
| 1003,'Name3',94612 |
| 1004,'Name4',94612 |
| 1005,'Name5',94613 |
| 1006,'Name6',94613 |
| ---- TYPES |
| bigint, string, int |
| ==== |
| ---- QUERY |
| # left semi-join on string |
| select d.* from functional_parquet.DimTbl d |
| left semi join functional_parquet.JoinTbl j |
| on (j.test_name = d.name) |
| ---- RESULTS |
| 1001,'Name1',94611 |
| 1002,'Name2',94611 |
| 1003,'Name3',94612 |
| 1004,'Name4',94612 |
| 1005,'Name5',94613 |
| 1006,'Name6',94613 |
| ---- TYPES |
| bigint, string, int |
| ==== |
| ---- QUERY |
| # left semi-join on int |
| select d.* from functional_parquet.DimTbl d |
| left semi join functional_parquet.JoinTbl j |
| on (j.test_zip = d.zip) |
| ---- RESULTS |
| 1001,'Name1',94611 |
| 1002,'Name2',94611 |
| 1003,'Name3',94612 |
| 1004,'Name4',94612 |
| ---- TYPES |
| bigint, string, int |
| ==== |
| ---- QUERY |
| # Regression test for IMPALA-1249. Left anti join on empty build side. |
| SELECT a.* FROM SemiJoinTblA a LEFT ANTI JOIN |
| (SELECT b.* FROM SemiJoinTblB b WHERE b.a > 10) v ON a.b = v.b |
| ---- RESULTS |
| 1,1,1 |
| 1,1,10 |
| 1,2,10 |
| 1,3,10 |
| NULL,NULL,30 |
| 2,4,30 |
| 2,NULL,20 |
| ---- TYPES |
| INT, INT, INT |
| ==== |
| ---- QUERY |
| # Testing right semi join |
| select b.* FROM SemiJoinTblA a |
| right semi join SemiJoinTblB b on a.b = b.b |
| ---- RESULTS |
| 1,1,10 |
| 1,1,1 |
| 1,2,5 |
| ---- TYPES |
| INT, INT, INT |
| ==== |
| ---- QUERY |
| # Testing right semi join with duplicates |
| SELECT b.int_col FROM functional_parquet.tinyinttable a |
| RIGHT SEMI JOIN functional_parquet.tinyinttable b |
| ON a.int_col % 2 = b.int_col % 2 |
| ---- RESULTS |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| ---- TYPES |
| INT |
| ==== |
| ---- QUERY |
| # Testing right semi join with duplicates and other conjuncts |
| SELECT b.int_col FROM functional_parquet.tinyinttable a |
| RIGHT SEMI JOIN functional_parquet.tinyinttable b |
| ON a.int_col % 2 = b.int_col % 2 AND a.int_col + b.int_col > 9 |
| ---- RESULTS |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| ---- TYPES |
| INT |
| ==== |
| ---- QUERY |
| # Testing right anti joins |
| select b.* FROM SemiJoinTblA a |
| right anti join SemiJoinTblB b on a.b = b.b |
| ---- RESULTS |
| 2,10,NULL |
| 1,NULL,10 |
| 3,NULL,50 |
| 3,NULL,NULL |
| ---- TYPES |
| INT, INT, INT |
| ==== |
| ---- QUERY |
| # Testing right anti join with duplicates and other conjuncts |
| SELECT b.int_col FROM functional_parquet.tinyinttable a |
| RIGHT ANTI JOIN functional_parquet.tinyinttable b |
| ON a.int_col % 2 = b.int_col % 2 AND a.int_col + b.int_col > 9 |
| ---- RESULTS |
| 0 |
| ---- TYPES |
| INT |
| ==== |
| ---- QUERY |
| # Anti joins have a uni-directional value transfer (IMPALA-1249). |
| select a.* FROM SemiJoinTblA a |
| left anti join |
| (select * from SemiJoinTblB where b <= 3) b |
| on a.b = b.b |
| ---- RESULTS |
| 1,3,10 |
| 2,4,30 |
| 2,NULL,20 |
| NULL,NULL,30 |
| ---- TYPES |
| INT, INT, INT |
| ==== |
| ---- QUERY |
| # Regression test for IMPALA-1351: PHJ::GetNext() returns -1 in NAAJ w/o error. |
| # NOTE: Commented out because it takes a few hours to run on a single node. |
| # TODO: Casey will try to simplify, also consider moving to semi-joins-exhaustive. |
| #SELECT COUNT(t2.month) AS int_col_1 |
| #FROM alltypesagg t1 CROSS |
| #JOIN alltypesagg t2 FULL |
| #OUTER JOIN alltypestiny t3 ON t3.year = t2.int_col |
| #AND t3.int_col = t2.year |
| #WHERE t1.day NOT IN |
| # (SELECT tt1.year AS int_col_1 |
| # FROM alltypes tt1 |
| # RIGHT JOIN alltypes tt2 ON tt2.month = tt1.year |
| # WHERE t3.tinyint_col = tt2.tinyint_col |
| # AND t3.bigint_col = tt2.bigint_col |
| # AND t3.int_col = tt1.id) |
| #AND t1.day NOT IN |
| # (SELECT ttt1.tinyint_col AS tinyint_col_1 |
| # FROM alltypestiny ttt1 |
| # WHERE t1.tinyint_col = ttt1.month |
| # AND ttt1.month IS NULL |
| # AND ttt1.tinyint_col NOT IN |
| # (SELECT tttt2.int_col AS int_col_1 |
| # FROM alltypesagg tttt1 |
| # RIGHT JOIN alltypes tttt2 ON tttt2.id = tttt1.year) |
| # AND ttt1.month NOT IN |
| # (SELECT MIN(tttt2.year + tttt1.smallint_col * tttt1.int_col - tttt2.bigint_col) + |
| # MAX(tttt2.tinyint_col) AS bigint_col_1 |
| # FROM alltypestiny tttt1 |
| # INNER JOIN alltypestiny tttt2 ON tttt2.month = tttt1.smallint_col) |
| # AND ttt1.month IS NOT NULL |
| # AND t2.smallint_col = ttt1.bigint_col) |
| #---- RESULTS |
| #121000000 |
| #---- TYPES |
| #BIGINT |
| #==== |
| # Testing right anti join with empty probe side. |
| SELECT b.* FROM (SELECT a.* from SemiJoinTblA a where a.a > 10) v |
| RIGHT ANTI JOIN SemiJoinTblB b on v.b = b.b |
| ---- RESULTS |
| 1,1,1 |
| 1,1,10 |
| 1,2,5 |
| 1,NULL,10 |
| 2,10,NULL |
| 3,NULL,NULL |
| 3,NULL,50 |
| ---- TYPES |
| INT, INT, INT |
| ==== |