Skip to content

Commit ace5efa

Browse files
committed
feat: window RANGE calculation optimization
1 parent d590824 commit ace5efa

4 files changed

Lines changed: 333 additions & 128 deletions

File tree

datafusion/core/benches/window_query_sql.rs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,20 @@ fn criterion_benchmark(c: &mut Criterion) {
9797
})
9898
});
9999

100+
c.bench_function("window order by and range offsets, aggregate functions", |b| {
101+
b.iter(|| {
102+
query(
103+
ctx.clone(),
104+
&rt,
105+
"SELECT \
106+
MAX(f64) OVER (ORDER BY u64_narrow RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
107+
MIN(f32) OVER (ORDER BY u64_narrow DESC RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
108+
SUM(u64_narrow) OVER (ORDER BY u64_narrow ASC RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) \
109+
FROM t",
110+
)
111+
})
112+
});
113+
100114
c.bench_function("window order by, built-in functions", |b| {
101115
b.iter(|| {
102116
query(
@@ -187,6 +201,23 @@ fn criterion_benchmark(c: &mut Criterion) {
187201
},
188202
);
189203

204+
c.bench_function(
205+
"window partition and order by and range offsets, u64_wide, aggregate functions",
206+
|b| {
207+
b.iter(|| {
208+
query(
209+
ctx.clone(),
210+
&rt,
211+
"SELECT \
212+
MAX(f64) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
213+
MIN(f32) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
214+
SUM(u64_narrow) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) \
215+
FROM t",
216+
)
217+
})
218+
},
219+
);
220+
190221
c.bench_function(
191222
"window partition and order by, u64_narrow, aggregate functions",
192223
|b| {
@@ -204,6 +235,23 @@ fn criterion_benchmark(c: &mut Criterion) {
204235
},
205236
);
206237

238+
c.bench_function(
239+
"window partition and order by and range offsets, u64_narrow, aggregate functions",
240+
|b| {
241+
b.iter(|| {
242+
query(
243+
ctx.clone(),
244+
&rt,
245+
"SELECT \
246+
MAX(f64) OVER (PARTITION BY u64_narrow ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
247+
MIN(f32) OVER (PARTITION BY u64_narrow ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
248+
SUM(u64_narrow) OVER (PARTITION BY u64_narrow ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) \
249+
FROM t",
250+
)
251+
})
252+
},
253+
);
254+
207255
c.bench_function(
208256
"window partition and order by, u64_wide, built-in functions",
209257
|b| {
@@ -237,6 +285,23 @@ fn criterion_benchmark(c: &mut Criterion) {
237285
})
238286
},
239287
);
288+
289+
c.bench_function(
290+
"window partition and order by and range offsets, u64_wide, aggregate functions",
291+
|b| {
292+
b.iter(|| {
293+
query(
294+
ctx.clone(),
295+
&rt,
296+
"SELECT \
297+
MAX(f64) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
298+
MIN(f32) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
299+
SUM(u64_narrow) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) \
300+
FROM t",
301+
)
302+
})
303+
},
304+
);
240305
}
241306

242307
criterion_group!(benches, criterion_benchmark);

0 commit comments

Comments
 (0)