uros-b opened a new pull request, #57134:
URL: https://github.com/apache/spark/pull/57134

   ### What changes were proposed in this pull request?
   
   Note: this is a 4.2 backport of https://github.com/apache/spark/pull/56891.
   
   Lower the single-empty-grouping-set case to a global `Aggregate` (no 
grouping expressions, no `Expand`) in `GroupingAnalyticsTransformer`, so it 
returns one (grand total) row over empty input, matching the `GROUP BY`-less 
form and the SQL standard. `grouping_id()` folds to the constant `0`, and 
`grouping()`/`grouping_id()` in `HAVING`/`ORDER BY` resolve against that 
constant. The fix lands in both the legacy fixed-point analyzer and the 
single-pass resolver, which share `GroupingAnalyticsTransformer`.
   
   ### Why are the changes needed?
   
   `GROUP BY GROUPING SETS (())` is a grand total, semantically identical to an 
aggregation with no `GROUP BY` clause. It was lowered to a grouped `Aggregate` 
over an `Expand` (grouping by `spark_grouping_id`), so over empty input it 
returned zero rows instead of one. The same defect affected the equivalent 
empty `GROUP BY CUBE()` and `GROUP BY ROLLUP()`, which also lower to a single 
empty grouping set.
   
   ### Does this PR introduce _any_ user-facing change?
   
   Yes, the new (correct) behavior is gated by an internal SQL config,
   `spark.sql.analyzer.lowerEmptyGroupingSetToGlobalAggregate.enabled` (default 
true). When set to false, lowering reverts to the legacy `Expand`-based form 
(zero rows over empty input). The flag gates all three decision points (the 
transformer lowering and the `grouping_id()` resolution in each analyzer) so 
the off state reproduces pre-fix behavior identically in both analyzers.
   
   ### How was this patch tested?
   
   Tested via golden cases in `grouping_set.sql` (empty-input grand total, 
`grouping_id()` in SELECT/HAVING/ORDER BY, `grouping()` rejection, non-empty 
input), flag-off coverage in `grouping_set_grand_total_disabled.sql`, the 
regenerated `group-analytics` golden file, and `ResolveGroupingAnalyticsSuite`.
   
   ### Was this patch authored or co-authored using generative AI tooling?
   
   Generated-by: Opus 4.8
   


-- 
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