Skip to content

Commit 7df3337

Browse files
authored
Optimized and MapJoin friendly Q2 (#3950)
1 parent 077f00d commit 7df3337

File tree

2 files changed

+197
-65
lines changed

2 files changed

+197
-65
lines changed

ydb/library/benchmarks/queries/tpch/ydb/q2.sql

Lines changed: 98 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,133 @@
11
-- TPC-H/TPC-R Minimum Cost Supplier Query (Q2)
22
-- using 1680793381 as a seed to the RNG
33

4-
$r = (select r_regionkey from
4+
$r = (
5+
select
6+
r_regionkey
7+
from
58
`{path}region`
6-
where r_name='AMERICA');
7-
8-
$j1 = (select n_name,n_nationkey
9-
from `{path}nation` as n
10-
join $r as r on
11-
n.n_regionkey = r.r_regionkey);
9+
where
10+
r_name='AMERICA'
11+
);
1212

13-
$j2 = (select s_acctbal,s_name,s_address,s_phone,s_comment,n_name,s_suppkey
14-
from `{path}supplier` as s
15-
join $j1 as j on
16-
s.s_nationkey = j.n_nationkey
13+
$n = (
14+
select
15+
n_name,
16+
n_nationkey
17+
from
18+
`{path}nation` as n
19+
left semi join
20+
$r as r
21+
on
22+
n.n_regionkey = r.r_regionkey
1723
);
1824

19-
$j3 = (select ps_partkey,ps_supplycost,s_acctbal,s_name,s_address,s_phone,s_comment,n_name
20-
from `{path}partsupp` as ps
21-
join $j2 as j on
22-
ps.ps_suppkey = j.s_suppkey
25+
$s1 = (
26+
select
27+
s_suppkey
28+
from
29+
`{path}supplier` as s
30+
left semi join
31+
$n as n
32+
on
33+
s.s_nationkey = n.n_nationkey
2334
);
2435

25-
$min_ps_supplycost = (select min(ps_supplycost) as min_ps_supplycost,ps_partkey
26-
from $j3
27-
group by ps_partkey
36+
$min_ps_supplycost = (
37+
select
38+
min(ps_supplycost) as min_ps_supplycost,
39+
ps.ps_partkey as ps_partkey
40+
from
41+
`{path}partsupp` as ps
42+
left semi join
43+
$s1 as s
44+
on
45+
ps.ps_suppkey = s.s_suppkey
46+
group by
47+
ps.ps_partkey
2848
);
2949

30-
$p = (select p_partkey,p_mfgr
31-
from `{path}part`
32-
where
50+
$p = (
51+
select
52+
p_partkey,
53+
p_mfgr
54+
from
55+
`{path}part`
56+
where
3357
p_size = 10
3458
and p_type like '%COPPER'
3559
);
3660

37-
$j4 = (select s_acctbal,
61+
$ps = (
62+
select
63+
ps.ps_partkey as ps_partkey,
64+
p.p_mfgr as p_mfgr,
65+
ps.ps_supplycost as ps_supplycost,
66+
ps.ps_suppkey as ps_suppkey
67+
from
68+
`{path}partsupp` as ps
69+
join
70+
$p as p
71+
on
72+
p.p_partkey = ps.ps_partkey
73+
);
74+
75+
$s2 = (
76+
select
77+
s_acctbal,
3878
s_name,
39-
n_name,
40-
p_partkey,
79+
s_address,
80+
s_phone,
81+
s_comment,
82+
s_suppkey,
83+
n_name
84+
from
85+
`{path}supplier` as s
86+
join
87+
$n as n
88+
on
89+
s.s_nationkey = n.n_nationkey
90+
);
91+
92+
$jp =(
93+
select
94+
ps_partkey,
95+
ps_supplycost,
4196
p_mfgr,
97+
s_acctbal,
98+
s_name,
4299
s_address,
43100
s_phone,
44-
s_comment
45-
from $p as p
46-
join $j3 as j on p.p_partkey = j.ps_partkey
47-
join $min_ps_supplycost as m on p.p_partkey = m.ps_partkey
48-
where min_ps_supplycost=ps_supplycost
101+
s_comment,
102+
n_name
103+
from
104+
$ps as ps
105+
join
106+
$s2 as s
107+
on
108+
ps.ps_suppkey = s.s_suppkey
49109
);
50110

51111
select
52112
s_acctbal,
53113
s_name,
54114
n_name,
55-
p_partkey,
115+
jp.ps_partkey as p_partkey,
56116
p_mfgr,
57117
s_address,
58118
s_phone,
59119
s_comment
60-
from $j4
120+
from
121+
$jp as jp
122+
join
123+
$min_ps_supplycost as m
124+
on
125+
jp.ps_partkey = m.ps_partkey
126+
where
127+
min_ps_supplycost = ps_supplycost
61128
order by
62129
s_acctbal desc,
63130
n_name,
64131
s_name,
65132
p_partkey
66133
limit 100;
67-

ydb/library/benchmarks/queries/tpch/yql/q2.sql

Lines changed: 99 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,133 @@
33
-- TPC-H/TPC-R Minimum Cost Supplier Query (Q2)
44
-- using 1680793381 as a seed to the RNG
55

6-
$r = (select r_regionkey from
6+
$r = (
7+
select
8+
r_regionkey
9+
from
710
{{region}}
8-
where r_name='AMERICA');
9-
10-
$j1 = (select n_name,n_nationkey
11-
from {{nation}} as n
12-
join $r as r on
13-
n.n_regionkey = r.r_regionkey);
11+
where
12+
r_name='AMERICA'
13+
);
1414

15-
$j2 = (select s_acctbal,s_name,s_address,s_phone,s_comment,n_name,s_suppkey
16-
from {{supplier}} as s
17-
join $j1 as j on
18-
s.s_nationkey = j.n_nationkey
15+
$n = (
16+
select
17+
n_name,
18+
n_nationkey
19+
from
20+
{{nation}} as n
21+
left semi join
22+
$r as r
23+
on
24+
n.n_regionkey = r.r_regionkey
1925
);
2026

21-
$j3 = (select ps_partkey,ps_supplycost,s_acctbal,s_name,s_address,s_phone,s_comment,n_name
22-
from {{partsupp}} as ps
23-
join $j2 as j on
24-
ps.ps_suppkey = j.s_suppkey
27+
$s1 = (
28+
select
29+
s_suppkey
30+
from
31+
{{supplier}} as s
32+
left semi join
33+
$n as n
34+
on
35+
s.s_nationkey = n.n_nationkey
2536
);
2637

27-
$min_ps_supplycost = (select min(ps_supplycost) as min_ps_supplycost,ps_partkey
28-
from $j3
29-
group by ps_partkey
38+
$min_ps_supplycost = (
39+
select
40+
min(ps_supplycost) as min_ps_supplycost,
41+
ps.ps_partkey as ps_partkey
42+
from
43+
{{partsupp}} as ps
44+
left semi join
45+
$s1 as s
46+
on
47+
ps.ps_suppkey = s.s_suppkey
48+
group by
49+
ps.ps_partkey
3050
);
3151

32-
$p = (select p_partkey,p_mfgr
33-
from {{part}}
34-
where
52+
$p = (
53+
select
54+
p_partkey,
55+
p_mfgr
56+
from
57+
{{part}}
58+
where
3559
p_size = 10
3660
and p_type like '%COPPER'
3761
);
3862

39-
$j4 = (select s_acctbal,
63+
$ps = (
64+
select
65+
ps.ps_partkey as ps_partkey,
66+
p.p_mfgr as p_mfgr,
67+
ps.ps_supplycost as ps_supplycost,
68+
ps.ps_suppkey as ps_suppkey
69+
from
70+
{{partsupp}} as ps
71+
join
72+
$p as p
73+
on
74+
p.p_partkey = ps.ps_partkey
75+
);
76+
77+
$s2 = (
78+
select
79+
s_acctbal,
4080
s_name,
41-
n_name,
42-
p_partkey,
81+
s_address,
82+
s_phone,
83+
s_comment,
84+
s_suppkey,
85+
n_name
86+
from
87+
{{supplier}} as s
88+
join
89+
$n as n
90+
on
91+
s.s_nationkey = n.n_nationkey
92+
);
93+
94+
$jp =(
95+
select
96+
ps_partkey,
97+
ps_supplycost,
4398
p_mfgr,
99+
s_acctbal,
100+
s_name,
44101
s_address,
45102
s_phone,
46-
s_comment
47-
from $p as p
48-
join $j3 as j on p.p_partkey = j.ps_partkey
49-
join $min_ps_supplycost as m on p.p_partkey = m.ps_partkey
50-
where min_ps_supplycost=ps_supplycost
103+
s_comment,
104+
n_name
105+
from
106+
$ps as ps
107+
join
108+
$s2 as s
109+
on
110+
ps.ps_suppkey = s.s_suppkey
51111
);
52112

53-
select
113+
select
54114
s_acctbal,
55115
s_name,
56116
n_name,
57-
p_partkey,
117+
jp.ps_partkey as p_partkey,
58118
p_mfgr,
59119
s_address,
60120
s_phone,
61121
s_comment
62-
from $j4
122+
from
123+
$jp as jp
124+
join
125+
$min_ps_supplycost as m
126+
on
127+
jp.ps_partkey = m.ps_partkey
128+
where
129+
min_ps_supplycost = ps_supplycost
63130
order by
64131
s_acctbal desc,
65132
n_name,
66133
s_name,
67134
p_partkey
68135
limit 100;
69-

0 commit comments

Comments
 (0)