try_sum:安全计算总和
速查结论
try_sum(expr) 是 Spark SQL 中用于从一组值中计算总和,溢出时返回 NULL 而非报错的聚合函数。
语法
try_sum(expr)
参数说明
| 参数 | 说明 |
|---|---|
expr | 需要计算总和的表达式,可以是数值列或数值表达式 |
功能说明
try_sum(expr) 与 sum 函数类似,从一组值中计算总和。区别在于:当计算结果发生溢出时,try_sum 返回 NULL 而不会抛出异常。
示例
> SELECT try_sum(col) FROM VALUES (5), (10), (15) AS tab(col);
30
> SELECT try_sum(col) FROM VALUES (NULL), (10), (15) AS tab(col);
25
> SELECT try_sum(col) FROM VALUES (NULL), (NULL) AS tab(col);
NULL
> SELECT try_sum(col) FROM VALUES (9223372036854775807L), (1L) AS tab(col);
NULL
常见报错与避坑指南
- 大数值溢出:当求和结果超过 BIGINT 最大值(9223372036854775807)时,
try_sum返回 NULL。对于特大数值场景,可考虑使用try_sum配合 DECIMAL 类型避免溢出。 - 全 NULL 返回 NULL:当所有输入值均为 NULL 时,
try_sum返回 NULL,与sum行为一致。 - 与 sum 的区别:仅在溢出行为上有差异。普通业务场景使用
sum即可,处理超大数值或不信任数据时使用try_sum。
Since: 3.3.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
