Skip to content

Allow co-partitioned Partitioning::Range inputs for full hash joins #23454

Closed

Description

@gene-bordegaray

Related:

Is your feature request related to a problem or challenge?

#23184 lets compatible range-partitioned inputs satisfy inner partitioned hash joins without repartitioning. Full partitioned equi joins still use the conservative repartition path even when both inputs are already co-partitioned by the join keys.

Example

HashJoinExec: mode=Partitioned, join_type=Full, on=[(range_key@0, range_key@0)]
  DataSourceExec: output_partitioning=Range([range_key@0 ASC], [(10), (20), (30)], 4)
  DataSourceExec: output_partitioning=Range([range_key@0 ASC], [(10), (20), (30)], 4)

The compatible range inputs are already co-partitioned by partition index. Matched rows, left-only rows, and right-only rows can still be produced partition-locally.

Describe the solution you'd like

Extend InputDistributionRequirements::co_partitioned(...) to Full partitioned equi hash joins where execution remains partition-local.

Acceptance criteria

  • Compatible range/range inputs avoid hash repartitioning for Full joins.
  • Incompatible split points, partition counts, sort options, or key expressions still trigger repartitioning.
  • Tests cover matched rows, left-only unmatched rows, and right-only unmatched rows.
  • Partitioned dynamic filters remain unchanged unless separately addressed by Support dynamic filters for range co-partitioned joins #23376.

Additional context

Activity

  1. mattp5657 commented on Jul 10, 2026

    @mattp5657
    Contributor

    take

  2. added a commit that references this issue on Jul 20, 2026
    0f5790a
  3. added a commit that references this issue on Jul 24, 2026
    ce077f6
  4. added a commit that references this issue on Aug 7, 2026
    7d37d4e
  5. added a commit that references this issue on Aug 12, 2026
    6b47a54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions