zoukankan      html  css  js  c++  java
  • 网站日志流量复杂分析

    网站日志流量复杂分析

    需求

    会话信息表:

    键名 描述 对应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 '	
    

    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 ;
    
  • 相关阅读:
    正则表达式判断手机号是否11位
    php-流程管理(发起流程和审核流程)
    php-流程管理(新建流程)(php+Ajax)
    php-人员权限管理(RBAC)
    状态压缩DP
    树形DP
    Broken Keyboard UVA 11988 数组实现链表
    Trees in a Wood UVA
    POJ1061 青蛙的约会 拓展欧几里得
    UVA10215The Largest/Smallest Box(小数精度)
  • 原文地址:https://www.cnblogs.com/raymoc/p/5348390.html
Copyright © 2011-2022 走看看