0

我有一个巨大的 Hive 表,由十个产品字段、购买日期字段和一个标识符组成。产品字段命名为prod1, prod2, ... ,prod10表示最近购买的十种产品。对于大多数 ID,我们没有一直到十种产品的购买历史记录。

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

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

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

...并将输出保存到文件中。这似乎笨拙且效率低下。有没有更好的方法来指定具有一系列字段条件的一系列字段的 Hive 计数?我尝试过使用 groupby 甚至映射一系列字段来提出一种策略,但我无法完全理解!= ''为每个字段指定条件。

提前感谢任何方向。

4

1 回答 1

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;
于 2015-10-21T13:08:50.683 回答