读书人

Hive处置数据的头脑风暴

发布时间: 2013-03-10 09:38:39 作者: rapoo

Hive处理数据的头脑风暴
select user_id,sum(pay_amount)from(select a.user_id,a.pay_amount,a.pay_date, b.last_pay_datefrom src_tbl a left outer join ( select user_id, min(pay_date) last_pay_date from src_tbl group by user_id ) bwhere a.pay_date > b.last_pay_date - 1 year)group by user_id

?

?

思路是,如果一个表的数据会互相关联,

则需要将处理好的结果集,关联到原来的表上面,作为条件的一部分。

?

那么在做日志解析的时候,我们会遇到访客,和访次的概念。

对于在2个小时之内的访问,我们认为是访问一次,对于两个小时之外的访问,我们认定是再次访问。

也就是是说,最新一次访问,与上一次访问之间间隔超过2个小时,则算是第二次访问。

用Hive来做过滤。

?

理一下思路:

select cookie_id, min(visit_time)

from web_log

group by cookie_id

用上面的计算来求出每个Cookie的第一次访问。

然后把这个访客的第一次访问的数据清理出来

?

select *

from web_log a

left outer join (

select cookie_id, min(visit_time) first_visit

from web_log

group by cookie_id

) b

on a.cookie_id = b.cookie_id

where a.visit_time > first_visit + 2 hours

?

这样就取出了一些第二次访问的客户数据了。

重复5-6次。

这样就可以计算出到底有多少防次访问了网站。

虽然不一定是最优解,不知道还有没有更好的办法呢??

?

读书人网 >编程

热点推荐