码迷,mamicode.com
首页 > Web开发 > 详细

网站日志流量复杂分析

时间:2016-04-02 22:54:04      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:

网站日志流量复杂分析

需求

会话信息表:

键名 描述 对应Track表字段
session_id 会话ID sessionId,会话ID
guid 访客id globel userId,独立访客ID,不清cookies时不会变化guid
trackerU 访问的渠道id,取该会话中第一个trackerU trackerU 渠道
landing_url 着落页,第一个访问URL url
landing_url_ref 着落页之前的页面,用于分析引流 refere
user_id 用户id endUserId
pv 网站pv page_views
stay_time 停留时间,秒
min_trackTime 最小时间(第一次访问时的时间)
ip ip地址 ip
provinceId 省份ID provinceId
date 日期 分区字段

根据上面的相关信息,统计如下流量分析指标

日期 UV PV 登陆人数 游客人数 平均访问时长 二跳率 独立IP数

实现

1、先根据会话信息在hive中创建对应的表,这里由于使用date来分区,所以可以不用在create中显示创建字段

drop table if exists db_track.session_info ;

create table db_track.session_info(
session_id string ,
guid string ,
trackerU string ,
landing_url string ,
landing_url_ref string ,
user_id string ,
pv string ,
stay_time string ,
min_trackTime string ,
ip string ,
provinceId string 
)
partitioned by (date string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t

2、插入数据,这里因为是根据session来分析的,所以按session来分组,因为这里的trackerU,landing_url和landing_url_ref在一个session里面有多个,但是我们只需要取对应tracktime最小值的记录,所以必须通过二次join得到

use db_track ;
drop table if exists tmp_session_info ;
create table tmp_session_info as
select
  a.sessionid session_id,
  max(a.guid) guid,
  -- trackerU ,
  -- landing_url ,
  -- landing_url_ref ,
  max(a.enduserid) user_id,
  count(a.url) pv,
  (unix_timestamp(max(a.tracktime)) - unix_timestamp(min(a.tracktime))) stay_time,
  min(a.tracktime) min_trackTime,
  max(a.ip) ip,
  max(a.provinceid) provinceId
from track_log a
where date = ‘20160319‘
group by a.sessionid ;

3、获取原表session_info里面所有的session_id以及对应的tracktime,可以看到2中的表数据量明显少于没有做过聚合的表3,这里我们创建表3的时候只需要选取连接的主键以及需要得到tranckerU,landing_url,landing_url_ref即可

use db_track ;
drop table if exists tmp_track_url ;
create table tmp_track_url as
select
  sessionid ,
  tracktime ,
  trackeru ,
  url ,
  referer
from track_log
where date = ‘20160319‘ ;

4、join 2和3中的表,报表需要信息的基本表:

-- insert into table
use db_track ;
insert overwrite table session_info partition(date = ‘20160319‘)
select 
  a.session_id session_id,
  max(a.guid) guid,
  max(b.trackeru) trackerU,
  max(b.url) landing_url,
  max(b.referer) landing_url_ref,
  max(a.user_id) user_id,
  max(a.pv) pv,
  max(a.stay_time/1000) stay_time,
  max(a.min_tracktime) min_trackTime,
  max(a.ip) ip,
  max(a.provinceid) provinceId  
from tmp_session_info a
join tmp_track_url b
on a.session_id = b.sessionid and a.min_tracktime = b.tracktime
group by a.session_id ;

5、最后的报表结果:

-- 日期   UV  PV  登录人数    游客人数    平均访问时长  二跳率 独立IP数
use db_track ;
drop table if exists tmp_visit_daily ;
create table tmp_visit_daily as
-- process
select
  date ,
  count(distinct guid) uv ,
  sum(pv) pv ,
  count(distinct case when user_id is not null then user_id else NULL end) login_users ,
  count(distinct case when user_id is null then guid else NULL end) visit_users ,
  avg(stay_time) avg_stay_time ,
  count(case when pv >= 2 then session_id else NULL end)/count(session_id) second_rate ,
  count(distinct ip) ip_number
from session_info
where date = ‘20160319‘
group by date ;

网站日志流量复杂分析

标签:

原文地址:http://www.cnblogs.com/raymoc/p/5348390.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!