[关闭]
@songlaf 2016-06-02T15:38:10.000000Z 字数 1886 阅读 617

作业十九【Hive日志分析案例二】

北风网大数据培训

一) 需求

需求:需要统计网站的访问信息date,UV,PV,登录人数,游客人数,平均访问时长,二跳率(访问网页两次以上), 独立IP。
首先对原始数据根据sessionid进行统计,统计到下表的数据,然后再对这张表进行统计。

字段名 说明 备注
会话ID sessionid
guid 访客的ID
trackerU 渠道ID 访问网站的途径
landing_url 访问网站的第一个网页
landing_url 着陆之前的网页
user_id 用户id
pv 网站pv
stay_time 停留时间 用服务器记录的时间的最大值与最小值之间的差
min_tracktime 最小时间
ip 省份时间
date 日期 分区

二) 实现

2.1)建立目标表

  1. #建立目标数据
  2. create table session_info(
  3. session_id string,
  4. guid string,
  5. trackerU string,
  6. landing_url string,
  7. landing_url_ref string,
  8. user_id string,
  9. pv string,
  10. stay_time string,
  11. min_trackTime string,
  12. ip string,
  13. provinceId string
  14. )
  15. partitioned by (date string)
  16. row format delimited fields terminated by '\t' ;

2.2)分组统计session信息

  1. create table session_info_tmp1 as select
  2. sessionId session_id,
  3. max(guid) guid,
  4. --trackerU string,
  5. --landing_url string,
  6. --landing_url_ref string,
  7. max(endUserId) user_id,
  8. count(url) pv,
  9. (max(unix_timestamp(trackTime)) - min(unix_timestamp(trackTime))) stay_time,
  10. min(trackTime) min_trackTime ,
  11. max(ip) ip,
  12. max(provinceId) provinceId
  13. from track_log where date='20150828'
  14. group by sessionId ;

2.3)统计访问信息等

  1. create table session_info_tmp2 as select
  2. sessionId session_id,
  3. trackTime trackTime,
  4. trackeru trackerU,
  5. url landing_url,
  6. referer landing_url_ref
  7. from track_log where date='20150828' ;
  8. ````
  9. <div class="md-section-divider"></div>
  10. ##2.4)汇总数据
  11. <div class="md-section-divider"></div>
  12. ```sql
  13. insert overwrite table session_info partition (date='20150828')
  14. select
  15. a.session_id,
  16. a.guid,
  17. b.trackerU,
  18. b.landing_url,
  19. b.landing_url_ref,
  20. a.user_id,
  21. a.pv,
  22. a.stay_time,
  23. a.min_trackTime,
  24. a.ip,
  25. a.provinceId
  26. from session_info_tmp1 a join session_info_tmp2 b
  27. on a.session_id=b.session_id
  28. and a.min_trackTime=b.trackTime ;

2.5)统计最终结果

  1. create table vistor_users_info as
  2. select
  3. date,
  4. count(distinct guid) UV,
  5. sum(pv) PV,
  6. count(case when user_id != '' then user_id else null end) login_users,
  7. count(case when user_id = '' then user_id else null end) vistor_users,
  8. avg(stay_time) avg_stay_time,
  9. count(case when pv>=2 then session_id else null end)/count(session_id) sec_ratio,
  10. count(distinct ip) ip
  11. from session_info where date='20150828'
  12. group by date ;

2.6)结果截图

无标题.jpg-142.5kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注