Количество запросов Hive для полей, в которых они заполнены

У меня есть огромная таблица Hive, состоящая из десяти полей продукта, полей даты покупок и идентификатора. Поля продукта названы как prod1, prod2,..., prod10 и обратитесь к последним десяти купленным продуктам. Для большинства идентификаторов у нас нет истории покупок вплоть до десяти продуктов.

Я хотел бы построить распределение численности населения для каждого из prod<X> поля, чтобы показать разбивку истории покупок по всему набору данных.

В настоящее время я запускаю сценарий bash, который выполняет десять последовательных запросов к таблице, например:

hive -e "select count(1) from db.tbl where prod<X> != '';"

... и сохранение вывода в файл. Это кажется неуклюжим и неэффективным. Есть ли лучший способ указать количество кустов в диапазоне полей с диапазоном условий поля? Я пытался придумать стратегию с использованием группового или даже отображения диапазона полей, но не могу полностью обдумать, указав != '' условие для каждого поля.

Заранее спасибо за любое направление.

1 ответ

Решение
select id,
sum(case when prod1='' then 0 else 1 end),
sum(case when prod2='' then 0 else 1 end),
sum(case when prod3='' then 0 else 1 end),
sum(case when prod4='' then 0 else 1 end),
sum(case when prod5='' then 0 else 1 end),
sum(case when prod6='' then 0 else 1 end),
sum(case when prod7='' then 0 else 1 end),
sum(case when prod8='' then 0 else 1 end),
sum(case when prod9='' then 0 else 1 end),
sum(case when prod10='' then 0 else 1 end)
from table group by id;
Другие вопросы по тегам