为什么是总和(a+b)!=总和(a)+总和(b)在Hive中?

kokeuurv  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(477)

我正在运行Hive1.1.0,看两个小时 bigint 柱, active_users 以及 inactive_users , SUM(active_users + inactive_users) < SUM(active_users) + SUM(inactive_users) .
为什么会这样,因为它应该是一个简单的整数加法?

vx6bjr1n

vx6bjr1n1#

当一个而不是两个值都是 NULL .
因此,请考虑:

a     b
 1     1
 2     NULL
 NULL  3

那么 sum(a) + sum(b) 是以下各项的总和: (1 + 2) 以及 (1 + 3) = 7. 这个 NULL 被忽略。
然而, sum(a + b) 是以下各项的总和:

(1 + 1)
 (2 + NULL)
 (NULL + 3)

其计算结果为:

2
 NULL
 NULL

这个 NULL s被忽略,因此结果是2。
换句话说, SUM() 忽略 NULL 价值观,但是 + 不。

j91ykkif

j91ykkif2#

有两种可能性:
1) 不处理 NULL 值(如果列可为null)

SUM(active_users + inactive_users) 
SUM(active_users) + SUM(inactive_users)

-- should be
SUM(COALESCE(active_users,0) + COALESCE(inactive_users,0)) 
SUM(COALESCE(active_users,0)) + SUM(COALESCE(inactive_users,0))

2) 如果列具有不精确的数据类型,如 FLOAT 舍入误差可能累积。
更多信息:平均浮动不一致

相关问题