ParadeDB Operator
In order for ParadeDB to push down an aggregate, a ParadeDB text search operator must be present in the query.WHERE clause.
Join Support
Aggregate pushdown works across joins as well as single tables. When every participating table has a BM25 index and the custom aggregate scan is enabled, ParadeDB computes the result directly from the index’s columnar storage, without scanning the underlying table rows.| Feature | Supported |
|---|---|
| Join types | INNER, LEFT, RIGHT, FULL OUTER |
| Number of tables | Two or more (arbitrary join trees) |
| Aggregate functions | COUNT, COUNT(DISTINCT ...), SUM, SUM(DISTINCT ...), AVG, AVG(DISTINCT ...), MIN, MAX, STDDEV, STDDEV_POP, VARIANCE, VAR_POP, BOOL_AND, BOOL_OR, ARRAY_AGG, STRING_AGG |
GROUP BY | Columns from any table in the join, including JSON sub-fields via metadata->>'key' |
HAVING clause | Comparisons against aggregate results and group columns |
Per-aggregate FILTER (WHERE ...) | Yes |
ORDER BY ... LIMIT K | Pushed down as TopK when there is a single ORDER BY column targeting an aggregate, a group column, or MIN(col) / MAX(col) |
ORDER BY inside STRING_AGG / ARRAY_AGG | Yes (produces deterministic element ordering) |
- One or more tables in the join lacks a BM25 index
- The join has no equality join condition (e.g.
CROSS JOIN) - Join keys,
GROUP BYcolumns, or aggregate arguments are not indexed columns - The query uses window functions (
OVER ...),ROLLUP,CUBE,GROUPING SETS,LATERAL, orDISTINCT ON GROUP BYuses a scalar function likedate_trunc(...)orlower(...)(JSON sub-field access via->>is supported)- The aggregate argument or result is wrapped in an expression such as
COALESCE(SUM(...), 0)or a cast - The query uses
pdb.agg()(use standard SQL aggregate functions instead)
Aggregate pushdown across joins is currently single-threaded. Parallel execution is on the roadmap.
NUMERIC Columns
NUMERIC columns do not support aggregate pushdown. Queries with aggregates on NUMERIC columns will automatically fall back to PostgreSQL for aggregation.
For numeric data that requires aggregate pushdown, use FLOAT or DOUBLE PRECISION instead:
Filter pushdown (equality and range queries) is fully supported for all
NUMERIC columns. Only aggregate pushdown is not supported.