分享

hive 求日UV,累积UV

各位大神现有一个问题,麻烦大家帮忙写个hql解决下,需求如下:源表T(两个字段)
monthid       userid
20180101    10001
20180101    10002
20180101    10004
20180101    10004
20180101    10005
20180102    10002
20180102    10003
20180102    10004
20180102    10005
20180102    10007


需要统计每天的日UV,以及截至到本日的累计UV,输出如下:
monthid         duv        muv
20180101        4            4
20180102        5            6
因为源表有重复数据,所以1号uv为4,2号uv为5,但是2号的muv应该是1号+2号去重后的uv,所以为6
用一条sql写出,请指教,谢谢

已有(8)人评论

跳转到指定楼层
iori809 发表于 2018-8-1 11:55:17
BB_BDATA 发表于 2018-7-4 15:55
所以要去重啊,就这一个表




   得用自连接

    select b.monthid,count(distinct b.userid),count(distinct a.userid) from test2 a,test2 b where a.monthid<=b.monthid group by b.monthid;

  Total MapReduce CPU Time Spent: 6 seconds 330 msec
OK
20180101        4       4
20180102        5       6
回复

使用道具 举报

s060403072 发表于 2018-7-4 15:45:03

本帖最后由 s060403072 于 2018-7-4 15:48 编辑

因为源表有重复数据,所以1号uv为4,2号uv为5,但是2号的muv应该是1号+2号去重后的uv,所以为6
1号uv和2号uv有什么关系吗?
1号是1号当天的uv
2号是2号当天的uv,为何会出现重复??
你的month UV设计感觉有些问题啊。在计算UV的时候,你提供的这个表,并看不出哪些UV是重复的。所以楼主计算的原则是什么。
回复

使用道具 举报

BB_BDATA 发表于 2018-7-4 15:47:50
s060403072 发表于 2018-7-4 15:45
因为源表有重复数据,所以1号uv为4,2号uv为5,但是2号的muv应该是1号+2号去重后的uv,所以为6
1号uv和2号u ...

求UV,累积是要截止到2号的所有访问记录的UV,所以求累积时肯定还是要再次去重的,并不是1号UV+2号UV这么简单
回复

使用道具 举报

s060403072 发表于 2018-7-4 15:49:46
BB_BDATA 发表于 2018-7-4 15:47
求UV,累积是要截止到2号的所有访问记录的UV,所以求累积时肯定还是要再次去重的,并不是1号UV+2号UV这么 ...

如何判断哪些重复的,是否提供另外一个表。
回复

使用道具 举报

BB_BDATA 发表于 2018-7-4 15:55:48
s060403072 发表于 2018-7-4 15:49
如何判断哪些重复的,是否提供另外一个表。

所以要去重啊,就这一个表
回复

使用道具 举报

s060403072 发表于 2018-7-4 16:10:08
本帖最后由 s060403072 于 2018-7-4 16:13 编辑
BB_BDATA 发表于 2018-7-4 15:55
所以要去重啊,就这一个表

那如何知道哪些是重复的那??
楼主认为1号和2号有哪些是重复的用户?
1号和2号只是统计了用户数目,对于用户id,并没有统计,如果id是相同,那么只是相同的,可以只有统计个数,如何判断那?
比如两个班级参加运动会
1号,参加了10人
2号参加了9人。
怎么判断这10个人是1班的谁,还是2班的谁。并没有对应用户id啊
回复

使用道具 举报

BB_BDATA 发表于 2018-8-1 19:01:04
iori809 发表于 2018-8-1 11:55
得用自连接

    select b.monthid,count(distinct b.userid),count(distinct a.userid) from ...

谢谢指点
回复

使用道具 举报

pl614724866 发表于 2018-12-21 22:23:05
iori809 发表于 2018-8-1 11:55
得用自连接

    select b.monthid,count(distinct b.userid),count(distinct a.userid) from ...

这种情况下在大数据量情况能行吗???这不是笛卡尔积吗????? 这种语句在hive的严格模式下是不能执行的。能有别的解决方案吗????????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条