Skip to content

Implement Sort-Merge Join #141

Closed
@alamb

Description

@alamb

Note: migrated from original JIRA: https://issues.apache.org/jira/browse/ARROW-11094

The current hash join works well when one side of the join can be loaded into memory but cannot scale beyond the available RAM.

The advantage of implementing SMJ (Sort-Merge Join) is that we can sort the left and right partitions, and write the intermediate results to disk, and then stream both sides of the join by merging these sorted partitions and we do not need to load one side into memory. At most, we need to load all batches from both sides that contain the current join key values.

In order to reduce memory pressure we will want to limit the concurrency of these sort operations.

We would still want to default to hash join when we know that the build-side can fit into memory since it is more efficient than using a sort-merge join.

[https://en.wikipedia.org/wiki/Sort-merge_join]

Metadata

Metadata

Assignees

No one assigned

    Labels

    datafusionChanges in the datafusion crate

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions