TRO-Wolf opened a new issue, #25248:
URL: https://github.com/apache/datafusion/issues/25248

   Planning `SELECT CAST(sum(id + i) AS VARCHAR) AS ci …` with N slots over a
   200 k-row, one-column `Int64` MemTable is superlinear in N on a release
   build of DataFusion 54.1.0, on a stock `SessionContext` with no extensions:
   
   | N | parse (s) | `statement_to_plan` (s) | analyzer (s) | optimizer (s) | 
`ctx.sql` (s) |
   |---:|---:|---:|---:|---:|---:|
   | 50 | 0.0004 | 0.0024 | 0.0007 | 0.0049 | 0.0027 |
   | 250 | 0.0015 | 0.0307 | 0.0039 | 0.0235 | 0.0323 |
   | 2500 | 0.0171 | 2.7434 | 0.0901 | 0.2522 | 2.7545 |
   
   `statement_to_plan` alone is 96 % of `sql()` at N = 2500 and fits
   `time ∝ N^1.81` over the three sizes (per-rule timing shows every analyzer
   and optimizer rule near-linear). Three discriminators:
   
   - The same N-expression aggregate built through
     `DataFrame::aggregate(Vec::new(), exprs)` — no SQL — takes **0.012 s** at
     N = 2500, so the logical `Aggregate` node itself is cheap.
   - A bare `sum(id + i)` aggregate **without** any CAST shows the same
     superlinear `statement_to_plan` (2.69 s at 2500), so CAST is not the
     amplifier.
   - A same-width standalone `CAST(id + i)` *projection* plans in 0.038 s —
     the blow-up is specific to the wide `Aggregate` SQL path.
   
   `datafusion.optimizer.max_passes` 0 / 1 / 3 does not move the wall.
   A `py-spy --native` profile of the same `sql()` clusters on
   `foldhash`/`hashbrown` hashing, `TreeNode::apply`, and
   `TypeCoercionRewriter`. Suspected mechanism: an O(N)-per-expression
   TreeNode walk or hash inside `SqlToRel`'s aggregate expression handling
   (qualify/normalize per select item).
   
   Minimal reproduction (Rust, release): register a one-column `Int64`
   `MemTable` named `t` on a stock `SessionContext`, then time
   `state.statement_to_plan(state.sql_to_statement(&sql, "generic").await?)`
   for `SELECT` of N items `CAST(sum(id + i) AS VARCHAR) AS c{i}`.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to