我有一个巨大的Hive表,包含十个产品字段,购买日期字段和标识符。产品字段的名称类似于prod1
,prod2
,...,prod10
,并参考了最近购买的十种产品。对于大多数ID,我们不会将购买历史记录一直追溯到十个产品。
我想为每个prod<X>
字段构建人口费率分布,以显示整个数据集中购买历史记录的细分。
目前,我正在运行一个针对该表运行十个连续查询的bash脚本,如:
hive -e "select count(1) from db.tbl where prod<X> != '';"
...并将输出保存到文件中。这看起来很笨拙而效率低下。有没有更好的方法来指定具有一系列现场条件的一系列字段上的Hive计数?我尝试使用groupby或甚至映射一系列字段来制定策略,但不能完全围绕为每个字段指定!= ''
条件。
提前感谢任何方向。
答案 0 :(得分: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;