在union-all-in-hive中获取不同的值

lztngnrs  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(356)

我在 hive 里有一张table,看起来像这样

cust_id  prod_id timestamp
1        11      2011-01-01 03:30:23
2        22      2011-01-01 03:34:53
1        22      2011-01-01 04:21:03
2        33      2011-01-01 04:44:09
3        33      2011-01-01 04:54:49

以此类推。
对于每个记录,我要检查在过去24小时内该客户购买了多少独特的产品(不包括当前交易)。所以输出应该是这样的-

1     0
2     0
1     1
2     1
3     0

我的Hive查询看起来像这样

select * from(
select t1.cust_id, count(distinct t1.prod_id) as freq from temp_table t1
left outer join temp_table t2 on (t1.cust_id=t2.cust_id) 
where t1.timestamp>=t2.timestamp 
and unix_timestamp(t1.timestamp)-unix_timestamp(t2.timestamp) < 24*60*60
group by t1.cust_id
union all
select t.cust_id, 0 as freq from temp_table t2
)unioned;
axzmvihb

axzmvihb1#

您可以联接到一个派生表,该表包含每个客户/时间戳对在过去24小时内购买的不同产品。

select t1.cust_id, t1.prod_id, t1.timestamp, t2.count_distinct_prod_id - 1
from mytable t1
join (
    select t2.cust_id, t2.timestamp, count(distinct t3.prod_id) count_distinct_prod_id
    from mytable t2
    join mytable t3 on t3.cust_id = t2.cust_id
    where unix_timestamp(t2.timestamp) - unix_timestamp(t3.timestamp) < 24*60*60
    group by t2.cust_id, t2.timestamp
) t2 on t1.cust_id = t2.cust_id and t1.timestamp = t2.timestamp
gorkyyrv

gorkyyrv2#

只需获取过去24小时的所有行,对custid执行group by,并将count(distinct productid)-1作为输出。总的查询应该是这样的。
从表\u name中选择cust\u id,count(distinct prod\u id)-1,其中unix\u timestamp(t1.timestamp)-unix\u timestamp(t2.timestamp)<246060按cust\u id分组

  • 我在这里减去1以排除用户的最新transactionid(希望这就是你的意思)

相关问题