Количество запросов 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;