Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
044b4dc
fix: sort a native hash join's output when the probe order it reports…
dwsmith1983 Oct 9, 2026
8dc4b90
fix: send a hash join's reported ordering to the native planner
dwsmith1983 Oct 9, 2026
7f67a6d
test: a native sort-merge join below a hash join adds no extra sort
dwsmith1983 Oct 9, 2026
6ed1dca
fix: keep the streamed order of a null-aware anti join and widen the …
dwsmith1983 Oct 9, 2026
ef6623d
test: tighten the hash join ordering tests and correct the NOT IN docs
dwsmith1983 Oct 9, 2026
3f4aabd
Merge remote-tracking branch 'origin/main' into fix/hash-join-probe-o…
dwsmith1983 Oct 9, 2026
d1420dd
test: a null-aware anti join's native output is sorted across build b…
dwsmith1983 Oct 9, 2026
7336bac
docs: say only a NOT IN combined with OR skips the native existence join
dwsmith1983 Oct 9, 2026
8482fc9
Merge remote-tracking branch 'origin/main' into fix/hash-join-probe-o…
dwsmith1983 Oct 9, 2026
93cf760
refactor: share the planner's sort-unless-ordered helper with the sor…
dwsmith1983 Oct 9, 2026
1c9b7e9
test: check the hash join ordering field for every shape that sends one
dwsmith1983 Oct 9, 2026
3e9adee
Merge remote-tracking branch 'origin/main' into fix/hash-join-probe-o…
dwsmith1983 Oct 10, 2026
fc2340a
Merge remote-tracking branch 'origin/main' into fix/hash-join-probe-o…
dwsmith1983 Oct 11, 2026
0e20d4e
Merge remote-tracking branch 'origin/main' into fix/hash-join-probe-o…
dwsmith1983 Oct 11, 2026
6e8af20
Merge remote-tracking branch 'origin/main' into fix/hash-join-probe-o…
dwsmith1983 Oct 11, 2026
44b679e
Merge branch 'main' into fix/hash-join-probe-order
dwsmith1983 Oct 11, 2026
7088411
test: keep the hash join probe order through runtime filter wrappers
dwsmith1983 Oct 11, 2026
dc5e8fc
Merge remote-tracking branch 'origin/main' into fix/hash-join-probe-o…
dwsmith1983 Oct 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/source/user-guide/latest/compatibility/operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,12 @@ rows by the grouping keys only, and Spark and Comet can leave rows with equal ke
orders, so a group with more than one candidate value can return a different value than Spark.
Both results are valid under Spark's semantics for these functions.

## Hash Join

When Spark reports a hash join's output as ordered by its streamed side, Comet keeps that order.
When DataFusion does not keep it, for example when it comes from a cached table or the join is a
`NOT IN`, Comet sorts the native join output to restore it.

## Window Functions

Comet runs `WindowExec` natively and it is enabled by default (`spark.comet.exec.window.enabled`). A broad set of
Expand Down
7 changes: 4 additions & 3 deletions docs/source/user-guide/latest/operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,15 @@ omitted from the tables below and may be reconsidered based on demand:

| Operator | Status | Notes |
| ----------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BroadcastHashJoinExec` | ✅ | |
| `ShuffledHashJoinExec` | ✅ | |
| `BroadcastHashJoinExec` | ✅ | Falls back to Spark when an outer or `NOT IN` join reports an output ordering whose type or expression Comet cannot sort natively. |
| `ShuffledHashJoinExec` | ✅ | Falls back to Spark when an outer join reports an output ordering whose type or expression Comet cannot sort natively. |
| `SortMergeJoinExec` | ✅ | Supports `BINARY` join keys. Nested-type (struct, array, map) and collated-string join keys fall back to Spark. |
| `BroadcastNestedLoopJoinExec` | ✅ | Falls back to Spark when the preserved side is broadcast (for example LEFT OUTER with BROADCAST on the left) ([#4429](https://github.com/apache/datafusion-comet/pull/4429)). |

`ExistenceJoin` (produced when `EXISTS` / `IN` is combined with another predicate via `OR`) runs
natively on `BroadcastHashJoinExec` and `ShuffledHashJoinExec`. Existence sort-merge joins, residual
(non-equi) join conditions, computed (non-column) join keys, and `NOT IN` fall back to Spark.
(non-equi) join conditions, and computed (non-column) join keys fall back to Spark. So does `NOT IN`
combined with `OR`, which Spark plans as an existence `BroadcastNestedLoopJoinExec`.

## Exchanges

Expand Down
Loading