You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flink SQL执行除法时抛出ArithmeticException问题求助

嘿,我之前也碰到过Flink SQL里的这个算术异常问题,来帮你捋清楚怎么解决~

你遇到的ArithmeticException: on-terminating decimal expansion no exact representable decimal result异常,本质是因为Flink在处理decimal类型的除法运算时,结果无法用decimal类型精确表示(比如无限循环小数)。虽然你的语句里是除以100.0(理论上结果都是有限小数),但Flink的类型推断规则可能把运算双方都识别为decimal类型,触发了严格的精确性校验,从而抛出异常。

下面是几个直接有效的解决办法:

  • 方法一:转换为浮点数类型运算
    将计数结果显式转为DOUBLE类型,避开decimal的精确性限制:

    SELECT productId, COUNT(order), CAST(COUNT(order) AS DOUBLE)/100.0 
    FROM product 
    GROUP BY productId
    
  • 方法二:用ROUND函数指定小数位数
    如果需要保留decimal类型的精度,可以通过ROUND函数强制指定结果的小数位数,截断或四舍五入后就能避免无法精确表示的问题:

    SELECT productId, COUNT(order), ROUND(COUNT(order)/100.0, 2) 
    FROM product 
    GROUP BY productId
    
  • 方法三:显式转换除数类型
    把除数100.0转为DOUBLE,让运算以浮点数规则执行:

    SELECT productId, COUNT(order), COUNT(order)/CAST(100 AS DOUBLE) 
    FROM product 
    GROUP BY productId
    

另外,你也可以检查Flink的decimal默认配置(比如table.decimal.default-precision和table.decimal.default-scale),调整全局的精度和小数位数,但前面的方法针对单个SQL语句更灵活。

内容的提问来源于stack exchange,提问作者yinhua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:23:48