Hive查询填充字段的字段的计数

时间:2015-10-19 18:35:33

标签: hadoop hive hiveql apache-hive

我有一个巨大的Hive表,包含十个产品字段,购买日期字段和标识符。产品字段的名称类似于prod1prod2,...,prod10,并参考了最近购买的十种产品。对于大多数ID,我们不会将购买历史记录一直追溯到十个产品。

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

目前,我正在运行一个针对该表运行十个连续查询的bash脚本,如:

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

...并将输出保存到文件中。这看起来很笨拙而效率低下。有没有更好的方法来指定具有一系列现场条件的一系列字段上的Hive计数?我尝试使用groupby或甚至映射一系列字段来制定策略,但不能完全围绕为每个字段指定!= ''条件。

提前感谢任何方向。

1 个答案:

答案 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;