apache / apache/datafusion

Window aggregate FILTER evaluates arguments for rejected rows

Open
#24,507 1 comment 0 reactions 1 assignee Claimed by @lyne7-sc View on GitHub
bug
Dominant language
Rust
Stars
9.3k
Forks
2.4k
Avg merge
3d 7h
Merged PRs (30d)
344

Description

### Describe the bug

Window aggregates evaluate their argument expressions before applying the aggregate `FILTER`.

This can cause a query to fail while evaluating rows that should not participate in the window aggregate.

### To Reproduce

```sql
SELECT
id,
SUM(10 / x) FILTER (WHERE x <> 0) OVER (ORDER BY id) AS running_sum
FROM (
VALUES
(1, 2),
(2, 0),
(3, 5)
) AS t(id, x)
ORDER BY id;
```

The query fails even though the row where x = 0 is rejected by the aggregate filter:

```
Arrow error: Divide by zero error
```

### Expected behavior

The aggregate filter should prevent argument evaluation for rejected rows, and the query should return:

```
1 5
2 5
3 7
```

### Additional context

This is the window-aggregate counterpart of #24443.

#24444 addresses the same evaluation-order issue for grouped aggregates, but window aggregates use a separate physical evaluation path and remain affected.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.