Skip to content

Commit d72ceae

Browse files
committed
feat: window RANGE calculation optimization
1 parent 8fe926d commit d72ceae

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
@@ -92,6 +92,20 @@ fn criterion_benchmark(c: &mut Criterion) {
9292
})
9393
});
9494

95+
c.bench_function("window order by and range offsets, aggregate functions", |b| {
96+
b.iter(|| {
97+
query(
98+
ctx.clone(),
99+
&rt,
100+
"SELECT \
101+
MAX(f64) OVER (ORDER BY u64_narrow RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
102+
MIN(f32) OVER (ORDER BY u64_narrow DESC RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
103+
SUM(u64_narrow) OVER (ORDER BY u64_narrow ASC RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) \
104+
FROM t",
105+
)
106+
})
107+
});
108+
95109
c.bench_function("window order by, built-in functions", |b| {
96110
b.iter(|| {
97111
query(
@@ -182,6 +196,23 @@ fn criterion_benchmark(c: &mut Criterion) {
182196
},
183197
);
184198

199+
c.bench_function(
200+
"window partition and order by and range offsets, u64_wide, aggregate functions",
201+
|b| {
202+
b.iter(|| {
203+
query(
204+
ctx.clone(),
205+
&rt,
206+
"SELECT \
207+
MAX(f64) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
208+
MIN(f32) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
209+
SUM(u64_narrow) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) \
210+
FROM t",
211+
)
212+
})
213+
},
214+
);
215+
185216
c.bench_function(
186217
"window partition and order by, u64_narrow, aggregate functions",
187218
|b| {
@@ -199,6 +230,23 @@ fn criterion_benchmark(c: &mut Criterion) {
199230
},
200231
);
201232

233+
c.bench_function(
234+
"window partition and order by and range offsets, u64_narrow, aggregate functions",
235+
|b| {
236+
b.iter(|| {
237+
query(
238+
ctx.clone(),
239+
&rt,
240+
"SELECT \
241+
MAX(f64) OVER (PARTITION BY u64_narrow ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
242+
MIN(f32) OVER (PARTITION BY u64_narrow ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
243+
SUM(u64_narrow) OVER (PARTITION BY u64_narrow ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) \
244+
FROM t",
245+
)
246+
})
247+
},
248+
);
249+
202250
c.bench_function(
203251
"window partition and order by, u64_wide, built-in functions",
204252
|b| {
@@ -232,6 +280,23 @@ fn criterion_benchmark(c: &mut Criterion) {
232280
})
233281
},
234282
);
283+
284+
c.bench_function(
285+
"window partition and order by and range offsets, u64_wide, aggregate functions",
286+
|b| {
287+
b.iter(|| {
288+
query(
289+
ctx.clone(),
290+
&rt,
291+
"SELECT \
292+
MAX(f64) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
293+
MIN(f32) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING), \
294+
SUM(u64_narrow) OVER (PARTITION BY u64_wide ORDER by f64 RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) \
295+
FROM t",
296+
)
297+
})
298+
},
299+
);
235300
}
236301

237302
criterion_group!(benches, criterion_benchmark);

0 commit comments

Comments
 (0)