Skip to content

Commit 851660b

Browse files
kevinyu98cmonkey
authored andcommitted
[SPARK-18871][SQL][TESTS] New test cases for IN/NOT IN subquery 3rd batch
## What changes were proposed in this pull request? This is 3ird batch of test case for IN/NOT IN subquery. In this PR, it has these test files: `in-having.sql` `in-joins.sql` `in-multiple-columns.sql` These are the queries and results from running on DB2. [in-having DB2 version](https://github.com/apache/spark/files/772668/in-having.sql.db2.txt) [output of in-having](https://github.com/apache/spark/files/772670/in-having.sql.db2.out.txt) [in-joins DB2 version](https://github.com/apache/spark/files/772672/in-joins.sql.db2.txt) [output of in-joins](https://github.com/apache/spark/files/772673/in-joins.sql.db2.out.txt) [in-multiple-columns DB2 version](https://github.com/apache/spark/files/772678/in-multiple-columns.sql.db2.txt) [output of in-multiple-columns](https://github.com/apache/spark/files/772680/in-multiple-columns.sql.db2.out.txt) ## How was this patch tested? This pr is adding new test cases. We compare the result from spark with the result from another RDBMS(We used DB2 LUW). If the results are the same, we assume the result is correct. Author: Kevin Yu <[email protected]> Closes apache#16841 from kevinyu98/spark-18871-33.
1 parent 07b31b4 commit 851660b

File tree

6 files changed

+1294
-0
lines changed

6 files changed

+1294
-0
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
-- A test suite for IN HAVING in parent side, subquery, and both predicate subquery
2+
-- It includes correlated cases.
3+
4+
create temporary view t1 as select * from values
5+
("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:00:00.000', date '2014-04-04'),
6+
("val1b", 8S, 16, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04'),
7+
("val1a", 16S, 12, 21L, float(15.0), 20D, 20E2, timestamp '2014-06-04 01:02:00.001', date '2014-06-04'),
8+
("val1a", 16S, 12, 10L, float(15.0), 20D, 20E2, timestamp '2014-07-04 01:01:00.000', date '2014-07-04'),
9+
("val1c", 8S, 16, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:02:00.001', date '2014-05-05'),
10+
("val1d", null, 16, 22L, float(17.0), 25D, 26E2, timestamp '2014-06-04 01:01:00.000', null),
11+
("val1d", null, 16, 19L, float(17.0), 25D, 26E2, timestamp '2014-07-04 01:02:00.001', null),
12+
("val1e", 10S, null, 25L, float(17.0), 25D, 26E2, timestamp '2014-08-04 01:01:00.000', date '2014-08-04'),
13+
("val1e", 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-09-04 01:02:00.001', date '2014-09-04'),
14+
("val1d", 10S, null, 12L, float(17.0), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'),
15+
("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'),
16+
("val1e", 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04')
17+
as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i);
18+
19+
create temporary view t2 as select * from values
20+
("val2a", 6S, 12, 14L, float(15), 20D, 20E2, timestamp '2014-04-04 01:01:00.000', date '2014-04-04'),
21+
("val1b", 10S, 12, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04'),
22+
("val1b", 8S, 16, 119L, float(17), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'),
23+
("val1c", 12S, 16, 219L, float(17), 25D, 26E2, timestamp '2016-05-04 01:01:00.000', date '2016-05-04'),
24+
("val1b", null, 16, 319L, float(17), 25D, 26E2, timestamp '2017-05-04 01:01:00.000', null),
25+
("val2e", 8S, null, 419L, float(17), 25D, 26E2, timestamp '2014-06-04 01:01:00.000', date '2014-06-04'),
26+
("val1f", 19S, null, 519L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04'),
27+
("val1b", 10S, 12, 19L, float(17), 25D, 26E2, timestamp '2014-06-04 01:01:00.000', date '2014-06-04'),
28+
("val1b", 8S, 16, 19L, float(17), 25D, 26E2, timestamp '2014-07-04 01:01:00.000', date '2014-07-04'),
29+
("val1c", 12S, 16, 19L, float(17), 25D, 26E2, timestamp '2014-08-04 01:01:00.000', date '2014-08-05'),
30+
("val1e", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'),
31+
("val1f", 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'),
32+
("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null)
33+
as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i);
34+
35+
create temporary view t3 as select * from values
36+
("val3a", 6S, 12, 110L, float(15), 20D, 20E2, timestamp '2014-04-04 01:02:00.000', date '2014-04-04'),
37+
("val3a", 6S, 12, 10L, float(15), 20D, 20E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'),
38+
("val1b", 10S, 12, 219L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'),
39+
("val1b", 10S, 12, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'),
40+
("val1b", 8S, 16, 319L, float(17), 25D, 26E2, timestamp '2014-06-04 01:02:00.000', date '2014-06-04'),
41+
("val1b", 8S, 16, 19L, float(17), 25D, 26E2, timestamp '2014-07-04 01:02:00.000', date '2014-07-04'),
42+
("val3c", 17S, 16, 519L, float(17), 25D, 26E2, timestamp '2014-08-04 01:02:00.000', date '2014-08-04'),
43+
("val3c", 17S, 16, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:02:00.000', date '2014-09-05'),
44+
("val1b", null, 16, 419L, float(17), 25D, 26E2, timestamp '2014-10-04 01:02:00.000', null),
45+
("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-11-04 01:02:00.000', null),
46+
("val3b", 8S, null, 719L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'),
47+
("val3b", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2015-05-04 01:02:00.000', date '2015-05-04')
48+
as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i);
49+
50+
-- correlated IN subquery
51+
-- HAVING in the subquery
52+
-- TC 01.01
53+
SELECT t1a,
54+
t1b,
55+
t1h
56+
FROM t1
57+
WHERE t1b IN (SELECT t2b
58+
FROM t2
59+
GROUP BY t2b
60+
HAVING t2b < 10);
61+
62+
-- TC 01.02
63+
SELECT t1a,
64+
t1b,
65+
t1c
66+
FROM t1
67+
WHERE t1b IN (SELECT Min(t2b)
68+
FROM t2
69+
WHERE t1a = t2a
70+
GROUP BY t2b
71+
HAVING t2b > 1);
72+
73+
-- HAVING in the parent
74+
-- TC 01.03
75+
SELECT t1a, t1b, t1c
76+
FROM t1
77+
WHERE t1b IN (SELECT t2b
78+
FROM t2
79+
WHERE t1c < t2c)
80+
GROUP BY t1a, t1b, t1c
81+
HAVING t1b < 10;
82+
83+
-- TC 01.04
84+
SELECT t1a, t1b, t1c
85+
FROM t1
86+
WHERE t1b IN (SELECT t2b
87+
FROM t2
88+
WHERE t1c = t2c)
89+
GROUP BY t1a, t1b, t1c
90+
HAVING COUNT (DISTINCT t1b) < 10;
91+
92+
-- BOTH
93+
-- TC 01.05
94+
SELECT Count(DISTINCT( t1a )),
95+
t1b
96+
FROM t1
97+
WHERE t1c IN (SELECT t2c
98+
FROM t2
99+
WHERE t1a = t2a
100+
GROUP BY t2c
101+
HAVING t2c > 10)
102+
GROUP BY t1b
103+
HAVING t1b >= 8;
104+
105+
-- TC 01.06
106+
SELECT t1a,
107+
Max(t1b)
108+
FROM t1
109+
WHERE t1b > 0
110+
GROUP BY t1a
111+
HAVING t1a IN (SELECT t2a
112+
FROM t2
113+
WHERE t2b IN (SELECT t3b
114+
FROM t3
115+
WHERE t2c = t3c)
116+
);
117+
118+
-- HAVING clause with NOT IN
119+
-- TC 01.07
120+
SELECT t1a,
121+
t1c,
122+
Min(t1d)
123+
FROM t1
124+
WHERE t1a NOT IN (SELECT t2a
125+
FROM t2
126+
GROUP BY t2a
127+
HAVING t2a > 'val2a')
128+
GROUP BY t1a, t1c
129+
HAVING Min(t1d) > t1c;
130+
131+
-- TC 01.08
132+
SELECT t1a,
133+
t1b
134+
FROM t1
135+
WHERE t1d NOT IN (SELECT t2d
136+
FROM t2
137+
WHERE t1a = t2a
138+
GROUP BY t2c, t2d
139+
HAVING t2c > 8)
140+
GROUP BY t1a, t1b
141+
HAVING t1b < 10;
142+
143+
-- TC 01.09
144+
SELECT t1a,
145+
Max(t1b)
146+
FROM t1
147+
WHERE t1b > 0
148+
GROUP BY t1a
149+
HAVING t1a NOT IN (SELECT t2a
150+
FROM t2
151+
WHERE t2b > 3);

0 commit comments

Comments
 (0)