Skip to content

Commit bb11cd3

Browse files
fix
1 parent 20a8f83 commit bb11cd3

2 files changed

Lines changed: 11 additions & 7 deletions

File tree

datafusion/physical-optimizer/src/enforce_distribution.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1331,9 +1331,11 @@ pub fn ensure_distribution(
13311331
let allow_subset_satisfy_partitioning = (current_partitions
13321332
>= subset_satisfaction_threshold
13331333
// `preserve_file_partitions` exposes existing file-group
1334-
// partitioning to the optimizer. Respect it even when the
1335-
// file-group count is below `target_partitions`.
1336-
|| config.optimizer.preserve_file_partitions > 0)
1334+
// partitioning to the optimizer. Respect it when the only
1335+
// reason to repartition would be to increase partition count
1336+
// beyond the preserved file-group count.
1337+
|| (config.optimizer.preserve_file_partitions > 0
1338+
&& current_partitions < target_partitions))
13371339
&& !is_partitioned_join
13381340
&& !requires_grouping_id;
13391341

datafusion/sqllogictest/test_files/preserve_file_partitioning.slt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -681,10 +681,12 @@ logical_plan
681681
06)------SubqueryAlias: d
682682
07)--------TableScan: dimension_table_partitioned projection=[env, d_dkey]
683683
physical_plan
684-
01)AggregateExec: mode=SinglePartitioned, gby=[f_dkey@1 as f_dkey, env@2 as env], aggr=[sum(f.value)]
685-
02)--HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_dkey@1, f_dkey@1)], projection=[value@2, f_dkey@3, env@0]
686-
03)----DataSourceExec: file_groups={3 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/dimension_partitioned/d_dkey=A/data.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/dimension_partitioned/d_dkey=B/data.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/dimension_partitioned/d_dkey=C/data.parquet]]}, projection=[env, d_dkey], file_type=parquet
687-
04)----DataSourceExec: file_groups={3 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/fact/f_dkey=A/data.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/fact/f_dkey=B/data.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/fact/f_dkey=C/data.parquet]]}, projection=[value, f_dkey], file_type=parquet
684+
01)AggregateExec: mode=FinalPartitioned, gby=[f_dkey@0 as f_dkey, env@1 as env], aggr=[sum(f.value)]
685+
02)--RepartitionExec: partitioning=Hash([f_dkey@0, env@1], 3), input_partitions=3
686+
03)----AggregateExec: mode=Partial, gby=[f_dkey@1 as f_dkey, env@2 as env], aggr=[sum(f.value)]
687+
04)------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_dkey@1, f_dkey@1)], projection=[value@2, f_dkey@3, env@0]
688+
05)--------DataSourceExec: file_groups={3 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/dimension_partitioned/d_dkey=A/data.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/dimension_partitioned/d_dkey=B/data.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/dimension_partitioned/d_dkey=C/data.parquet]]}, projection=[env, d_dkey], file_type=parquet
689+
06)--------DataSourceExec: file_groups={3 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/fact/f_dkey=A/data.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/fact/f_dkey=B/data.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/preserve_file_partitioning/fact/f_dkey=C/data.parquet]]}, projection=[value, f_dkey], file_type=parquet
688690

689691
query TTR rowsort
690692
SELECT f.f_dkey, d.env, sum(f.value)

0 commit comments

Comments
 (0)