2015-10-19 127 views
0

我有一个巨大的Hive表,由十个产品字段,购买日期字段和标识符组成。产品字段的名称类似于prod1,prod2,...,prod10,并指最后购买的十种产品。对于大多数ID,我们没有购买历史,一直回到十种产品。填充字段的Hive查询字段的计数

我想为prod<X>字段中的每个字段构建人口费率分布,以显示整个数据集中购买历史记录的细分。

目前,我正在运行对阵表十个连冠查询,如bash脚本:

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

...并保存输出到文件。这看起来笨重和低效。是否有更好的方法来指定具有一定范围的字段条件的一系列字段上的Hive计数?我试图想出一个使用groupby或甚至映射一系列字段的策略,但是无法围绕指定每个字段的!= ''条件。

在此先感谢您的任何方向。

回答

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; 
+0

回想起来这一切似乎都很简单......谢谢! – economy