HIVE: заменить пустые результаты на 0 в группе утверждениями - PullRequest
0 голосов
/ 07 мая 2018

Я новый пользователь Hive, и мне нужно собрать сумму для данной таблицы. Рассмотрим упрощенный пример ниже:

SELECT day, sum(amount) FROM tableX WHERE columnA = 'RareValue' GROUP BY day;

Предположим, что не существует записи строки, которая соответствует условию в предложении WHERE для некоторых дат. И поэтому результат запроса будет пропущен в те дни.

Например, вот результат, который я получаю:

date       amount
2018-01-15 230
2018-01-13 210
2018-01-12 140
2018-01-11 222

Но это желаемый результат:

date       amount
2018-01-15 230
2018-01-14 0
2018-01-13 210
2018-01-12 140
2018-01-11 222

Я пытался в этом создать последовательность дат, а затем использовать LEFT JOIN и COALESCE для заполнения пустых дат нулями. Тем не менее, производительность была ужасно медленной. Каков наилучший подход для этого?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Если я правильно вас понял, все необходимые дни представлены в таблице tableX.Итак, я советую сначала выбрать все строки, где columnA не равно 'RareValue', и объединить его с вашим запросом.

SELECT day, 0 FROM tableX WHERE columnA != 'RareValue'
UNION
SELECT day,sum(amount) from tableX WHERE columnA = 'RareValue' GROUP BY day;

, если дни с первого выбора повторяются, вы можете добавить «отличный»

0 голосов
/ 08 мая 2018

Предположим, что вы пытаетесь исключить целый день в случае, если ваше условие «где» истинно, вы можете сделать что-то вроде

select 
day,
if(max(mycondition) = 0, sum(amount), 0) as mysum from 
(
select day, amount, 
if(columnA = 'RareValue', 1, 0) as mycondition
FROM tableX 
) t GROUP BY day;

У меня не было возможности проверить это:)

...