Почему SUM (a + b)! = SUM (a) + SUM (b) в Hive? - PullRequest
0 голосов
/ 18 июня 2019

Я использую Hive 1.1.0 и вижу, что для двух bigint столбцов active_users и inactive_users, SUM(active_users + inactive_users) <<code>SUM(active_users) + SUM(inactive_users).

Почему это так, учитывая, что оно должно быть простым сложением целых чисел?

Ответы [ 2 ]

3 голосов
/ 18 июня 2019

Это тот случай, когда одно, но не оба значения равны 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 значения, а + - нет.

0 голосов
/ 18 июня 2019

Существует 2 возможности:

1) Не обрабатывать значение 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 ошибка округления можетнакапливать.

Дополнительная информация: Среднее несоответствие чисел с плавающей запятой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...