[
https://issues.apache.org/jira/browse/FLINK-40929?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18124671#comment-18124671
]
Charan Rathore commented on FLINK-40929:
----------------------------------------
For FLINK-40929, should decimal aggregate overflow fail the query rather than
add accumulator state to keep an overflowed result NULL? Should the same
behavior apply to retract SUM, SUM0 and AVG?
> SUM on DECIMAL silently returns a wrong, order-dependent value after an
> overflow
> --------------------------------------------------------------------------------
>
> Key: FLINK-40929
> URL: https://issues.apache.org/jira/browse/FLINK-40929
> Project: Flink
> Issue Type: Bug
> Components: Table SQL / Runtime
> Affects Versions: 2.3.0
> Reporter: Yaoxuan Wu
> Priority: Major
>
> When a DECIMAL SUM overflows, Flink neither raises an error nor returns NULL.
> It returns a regular, non-NULL value that is the sum of only the rows after
> the overflow, so the result is wrong and depends on the row order.
> {code:java}
> SET 'parallelism.default' = '1';
> SELECT SUM(x) FROM (VALUES
> (CAST('99999999999999999999999999999999999999' AS DECIMAL(38, 0))),
> (CAST(1 AS DECIMAL(38, 0))), (CAST(2 AS DECIMAL(38, 0))), (CAST(3 AS
> DECIMAL(38, 0)))
> ) AS v(x);
> -- returns 5 (= 2 + 3) {code}
> Same values, different order (max = 10^38 - 1):
> ||nput order||SUM||
> |max, 1, 2, 3|5|
> |max, 705, 901|901|
> |705, max, 901|901|
> |705, 901, max|NULL|
>
> With parallelism > 1 the order, and therefore the result, depends on the
> partitioning. By contrast, a row-level {{x + 1}} on the same value raises an
> error.
> Cause: {{SumAggFunction}} accumulates with {{isNull(sum) ? operand : sum +
> operand}} (likewise in {{{}mergeExpressions{}}}). The DECIMAL {{+}} returns
> NULL on overflow, so the overflowed sum is mistaken for "no value yet" and
> the next row restarts it.
> Expected: once the sum overflows, the result should stay NULL (or raise an
> error, as row-level arithmetic does), independent of the row order.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)