Skip to content

Allow co-partitioned Partitioning::Range inputs for right-side hash joins #23453

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. Right-side partitioned equi joins still use the repartition path even when both inputs are already co-partitioned by the join keys.

Example

HashJoinExec: mode=Partitioned, join_type=Right, 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. The optimizer should preserve that layout instead of inserting hash repartitions for the right join.

Describe the solution you'd like

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

Covered join types:

  • Right
  • RightSemi
  • RightAnti
  • RightMark

Acceptance criteria

  • Compatible range/range inputs avoid hash repartitioning for the covered join types.
  • Incompatible split points, partition counts, sort options, or key expressions still trigger repartitioning.
  • Tests cover matched and unmatched rows.
  • RightMark tests cover null-related marker behavior.
  • Partitioned dynamic filters remain unchanged unless separately addressed by Support dynamic filters for range co-partitioned joins #23376.

Additional context

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions