hive数组函数实现查找两个活动下不同小时的购买用户的差值

背景

购物网站新上线了两个活动,A活动是买手机壳的,B活动是买手机的,按理来说,买了手机的都会买手机壳,或者买了手机壳的都会买手机,我们目的是找出每个小时只参与了A或者B活动,而没有参与另一个活动的用户

不同活动每个小时购买用户的差值

1.每个活动按照小时进行分组,得到每个活动每个小时下的用户,每个用户一行

2.对于第一步得到的两个活动的临时表进行全连接,并获取字段为null的行,这些就是差异行

3.按照每个小时进行分组,把差异的行组合成一个字段,即可得到结果

select hm, slice(collect_set(diff_user_id1),1,100), slice(collect_set(diff_user_id2),1,100) from --每个小时参与A,B活动的用户的差异,截断100展示

(select coalesce(t1.hm,t2.hm) as hm,t1.user_id as diff_user_id1,t2.user_id as diff_user_id2 from 
(select hm,user_id from XX where dt='${YYMMDD}' and act_id='A') as t1 --获取每个小时参与A活动的用户
full join 
(select hm,user_id from XX where dt='${YYMMDD}' and act_id='B') as t2 --获取每个小时参与B活动的用户
on t1.hm = t2.hm and t1.user_id = t2.user_id and (t1.user_id is null or t2.user_id is null)
) as t3 group by hm 

使用的数坊hive集合函数:

1.collect_set ,group by后把数据组成一个集合

2.slice, 对集合进行截取操作,比如截取一个集合的前100个元素

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值