[
https://issues.apache.org/jira/browse/SPARK-59175?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated SPARK-59175:
-----------------------------------
Labels: pull-request-available (was: )
> MISSING_AGGREGATION when a select item combines a window function with the
> GROUP BY expression
> ----------------------------------------------------------------------------------------------
>
> Key: SPARK-59175
> URL: https://issues.apache.org/jira/browse/SPARK-59175
> Project: Spark
> Issue Type: Bug
> Components: SQL
> Affects Versions: 4.0.1
> Reporter: Lino Rosa
> Priority: Major
> Labels: pull-request-available
>
> Reproduce it on a {{{}spark-shell{}}}:
>
>
> {code:java}
> spark.sql("""
> | CREATE OR REPLACE TEMP VIEW events AS
> | SELECT * FROM VALUES ('us'),('US'),('us'),('ca'),('CA'),('mx'),('br')
> | AS t(country)""".stripMargin)
> spark.sql("""
> | WITH ranked AS (
> | SELECT
> | CASE
> | WHEN ROW_NUMBER() OVER (ORDER BY COUNT(1) DESC) <= 2 THEN
> UPPER(country)
> | ELSE 'Other'
> | END AS bucket,
> | COUNT(1) AS events
> | FROM events
> | GROUP BY UPPER(country)
> |)
> |SELECT bucket, SUM(events) AS events
> |FROM ranked
> |GROUP BY bucket""".stripMargin){code}
>
> The query crashes with:
> {code:java}
> [MISSING_AGGREGATION] The non-aggregating expression "country" is based on
> columns which are not participating in the GROUP BY clause.
> Add the columns or the expression to the GROUP BY, aggregate the expression,
> or use "any_value(country)" if you do not care which of the values within a
> group is returned. SQLSTATE: 42803;
> Aggregate [bucket#2], [bucket#2, sum(events#3L) AS events#1L]
> +- SubqueryAlias ranked
> +- SubqueryAlias ranked
> +- Project [bucket#2, events#3L]
> +- Project [events#3L, _w0#9L, country#5, _we0#10, CASE WHEN
> (_we0#10 <= 2) THEN upper(country#5) ELSE Other END AS bucket#2]
> +- Window [row_number() windowspecdefinition(_w0#9L DESC NULLS
> LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$()))
> AS _we0#10], [_w0#9L DESC NULLS LAST]
> +- Aggregate [upper(country#5)], [count(1) AS events#3L,
> count(1) AS _w0#9L, country#5]
> +- SubqueryAlias events
> +- View (`events`, [country#5])
> +- Project [cast(country#4 as string) AS country#5]
> +- Project [country#4]
> +- SubqueryAlias t
> +- LocalRelation [country#4] {code}
> You can see the Aggregate has {{country#5}} on its output list so that the
> Project above it does {{{}upper(country#5){}}}. I believe this is the bug.
> The output list of the aggregate should be {{upper(country#5)}} and the
> Project above it should just reference it.
> In case it helps fixing the issue, if we replace `THEN UPPER(country)` with
> `THEN ANY_VALUE(UPPER(country))`, then the query would work with the same
> semantics. Of course it's just a band-aid solution to circumvent the bug.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]