Skip to content

Commit 8e2ad36

Browse files
authored
fix(query): ignore group_by_shuffle_mode in grouping set query (#18508)
* fix(query): exchange group_by_shuffle_mode with 'before_partial' should ignore the _grouping_id column * fix
1 parent 5ed4495 commit 8e2ad36

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

src/query/sql/src/executor/physical_plans/physical_aggregate_final.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,11 @@ impl PhysicalPlanBuilder {
227227
.collect::<Result<_>>()?;
228228

229229
let settings = self.ctx.get_settings();
230-
let group_by_shuffle_mode = settings.get_group_by_shuffle_mode()?;
230+
let mut group_by_shuffle_mode = settings.get_group_by_shuffle_mode()?;
231+
if agg.grouping_sets.is_some() {
232+
group_by_shuffle_mode = "before_merge".to_string();
233+
}
234+
231235
let enable_experimental_aggregate_hashtable =
232236
settings.get_enable_experimental_aggregate_hashtable()?;
233237

src/query/sql/src/planner/plans/aggregate.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,14 @@ impl Operator for Aggregate {
339339
let settings = ctx.get_settings();
340340

341341
// Group aggregation, enforce `Hash` distribution
342-
match settings.get_group_by_shuffle_mode()?.as_str() {
342+
let mut group_by_shuffle_mode = settings.get_group_by_shuffle_mode()?;
343+
344+
// Grouping set must be merged before_merge
345+
if self.grouping_sets.is_some() {
346+
group_by_shuffle_mode = "before_merge".to_string();
347+
}
348+
349+
match group_by_shuffle_mode.as_str() {
343350
"before_partial" => {
344351
children_required.push(vec![RequiredProperty {
345352
distribution: Distribution::Hash(self.get_distribution_keys(true)?),
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
statement ok
2+
set sandbox_tenant = 'test_tenant';
3+
4+
statement ok
5+
use tpcds;
6+
7+
statement ok
8+
set group_by_shuffle_mode = 'before_partial';
9+
10+
include ./Q5
11+
12+
statement ok
13+
UNSET group_by_shuffle_mode;

0 commit comments

Comments
 (0)