Skip to content

Commit 912f6d5

Browse files
authored
fix(query): fix panic if before_partial shuffle in cluster mode (#18081)
* fix(query): fix panic if before_partial shuffle in cluster mode * fix(query): fix panic if before_partial shuffle in cluster mode
1 parent a4b6b0c commit 912f6d5

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/query/service/src/pipelines/builders/builder_aggregate.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,10 @@ impl PipelineBuilder {
163163
)?))
164164
})?;
165165

166+
let before_partial =
167+
self.settings.get_group_by_shuffle_mode()?.to_lowercase() == "before_partial";
166168
// If cluster mode, spill write will be completed in exchange serialize, because we need scatter the block data first
167-
if !self.is_exchange_neighbor {
169+
if !self.is_exchange_neighbor || before_partial {
168170
let operator = DataOperator::instance().spill_operator();
169171
let location_prefix = self.ctx.query_id_spill_prefix();
170172

tests/sqllogictests/suites/base/03_common/03_0038_spill_aggregator.test

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ create or replace table t2 as select number, max(number) from numbers(10000000)
2424
statement ok
2525
drop table t2
2626

27+
statement ok
28+
set group_by_shuffle_mode = 'before_partial';
29+
30+
onlyif http
31+
query T
32+
SELECT COUNT() FROM (SELECT number::string, count() FROM numbers_mt(100000) group by number::string);
33+
----
34+
100000
35+
36+
statement ok
37+
unset group_by_shuffle_mode;
38+
2739
onlyif http
2840
statement ok
2941
unset max_threads;

0 commit comments

Comments
 (0)