apache / apache/datafusion

Fuse multiple scalar-aggregate subqueries over the same source into a single scan

Offen
#23,213 1 Kommentar 0 Reaktionen 1 zugewiesene Person Beansprucht von @nathanb9 Auf GitHub ansehen
Vorherrschende Sprache
Rust
Sterne
9.3k
Forks
2.4k
Ø Merge
3 T. 11 Std.
Gemergte PRs (30 T.)
360

Beschreibung

**Problem**

When a query computes several uncorrelated scalar-aggregate subqueries over the same table, DataFusion scans that table once per subquery.

**Proposed rewrite**

When 2 or more such subqueries share one source, fuse them into a single scan + aggregate, pushing each subquery's predicate into a `FILTER (WHERE ...)` clause:

```sql
-- Before: two scans of t
SELECT (SELECT count(*) FROM t WHERE a < 10),
(SELECT avg(x) FROM t WHERE a >= 10);

-- After: one scan of t
SELECT count(*) FILTER (WHERE a < 10),
avg(x) FILTER (WHERE a >= 10)
FROM t;
```

The source filter becomes the OR of the branch predicates, and each scalar subquery is replaced by a reference to the merged aggregate.

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.