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

Reply via email to