• 项目实战从0到1之hive(44)大数据项目之电商数仓(用户行为数据)(十二)


    第17章 需求六:流失用户数

    流失用户:最近7天未登录我们称之为流失用户

    17.1 DWS层

    使用日活明细表dws_uv_detail_day作为DWS层数据

    17.2 ADS层

    img

    1)建表语句

    drop table if exists ads_wastage_count;
    create external table ads_wastage_count(
      `dt` string COMMENT '统计日期',
      `wastage_count` bigint COMMENT '流失设备数'
    )
    row format delimited fields terminated by ' '
    location '/warehouse/gmall/ads/ads_wastage_count';

    2)导入2019-02-20数据

    insert into table ads_wastage_count
    select
        '2019-02-20',
        count(*)
    from
    (
       select mid_id
    from dws_uv_detail_day
       group by mid_id
       having max(dt)<=date_add('2019-02-20',-7)
    )t1;

    17.3 编写脚本

    1)创建脚本

    [kgg@hadoop102 bin]$ vim ads_wastage_log.sh
      在脚本中编写如下内容
    #!/bin/bash

    if [ -n "$1" ];then
      do_date=$1
    else
      do_date=`date -d "-1 day" +%F`
    fi

    hive=/opt/module/hive/bin/hive
    APP=gmall

    echo "-----------导入日期$do_date-----------"

    sql="
    insert into table "$APP".ads_wastage_count
    select
        '$do_date',
        count(*)
    from
    (
       select mid_id
       from "$APP".dws_uv_detail_day
       group by mid_id
       having max(dt)<=date_add('$do_date',-7)
    )t1;"

    $hive -e "$sql"

    2)增加脚本执行权限

    chmod 777 ads_wastage_log.sh

    3)脚本使用

    ads_wastage_log.sh 2019-02-20

    4)查询结果

     select * from ads_wastage_count;

    5)脚本执行时间

    企业开发中一般在每日凌晨30分~1点

    第18章 需求七:最近连续三周活跃用户数

    最近3周连续活跃的用户:通常是周一对前3周的数据做统计,该数据一周计算一次。

    18.1 DWS层

    使用周活明细表dws_uv_detail_wk作为DWS层数据

    18.2 ADS层

    img

    1)建表语句

    drop table if exists ads_continuity_wk_count;
    create external table ads_continuity_wk_count(
      `dt` string COMMENT '统计日期,一般用结束周周日日期,如果每天计算一次,可用当天日期',
      `wk_dt` string COMMENT '持续时间',
      `continuity_count` bigint
    )
    row format delimited fields terminated by ' '
    location '/warehouse/gmall/ads/ads_continuity_wk_count';

    2)导入2019-02-20所在周的数据

    insert into table ads_continuity_wk_count
    select
        '2019-02-20',
        concat(date_add(next_day('2019-02-20','MO'),-7*3),'_',date_add(next_day('2019-02-20','MO'),-1)),
        count(*)
    from
    (
       select mid_id
       from dws_uv_detail_wk
       where wk_dt>=concat(date_add(next_day('2019-02-20','MO'),-7*3),'_',date_add(next_day('2019-02-20','MO'),-7*2-1))
       and wk_dt<=concat(date_add(next_day('2019-02-20','MO'),-7),'_',date_add(next_day('2019-02-20','MO'),-1))
       group by mid_id
       having count(*)=3
    )t1;

    3)查询

    select * from ads_continuity_wk_count;

    18.3 编写脚本

    1)创建脚本

    [kgg@hadoop102 bin]$ vim ads_continuity_wk_log.sh
      在脚本中编写如下内容
    #!/bin/bash

    if [ -n "$1" ];then
      do_date=$1
    else
      do_date=`date -d "-1 day" +%F`
    fi

    hive=/opt/module/hive/bin/hive
    APP=gmall

    echo "-----------导入日期$do_date-----------"

    sql="
    insert into table "$APP".ads_continuity_wk_count
    select
        '$do_date',
        concat(date_add(next_day('$do_date','MO'),-7*3),'_',date_add(next_day('$do_date','MO'),-1)),
        count(*)
    from
    (
       select mid_id
       from "$APP".dws_uv_detail_wk
       where wk_dt>=concat(date_add(next_day('$do_date','MO'),-7*3),'_',date_add(next_day('$do_date','MO'),-7*2-1))
       and wk_dt<=concat(date_add(next_day('$do_date','MO'),-7),'_',date_add(next_day('$do_date','MO'),-1))
       group by mid_id
       having count(*)=3
    )t1;"

    $hive -e "$sql"

    2)增加脚本执行权限

    chmod 777 ads_continuity_wk_log.sh

    3)脚本使用

    ads_continuity_wk_log.sh 2019-02-20

    4)查询结果

    select * from ads_continuity_wk_count;

    5)脚本执行时间

    企业开发中一般在每周一凌晨30分~1点

     

    第19章 需求八:最近七天内连续三天活跃用户数

    说明:最近7天内连续3天活跃用户数

    19.1 DWS层

    使用日活明细表dws_uv_detail_day作为DWS层数据

    19.2 ADS层

    img

    1)建表语句

    drop table if exists ads_continuity_uv_count;
    create external table ads_continuity_uv_count(
      `dt` string COMMENT '统计日期',
      `wk_dt` string COMMENT '最近7天日期',
      `continuity_count` bigint
    ) COMMENT '连续活跃设备数'
    row format delimited fields terminated by ' '
    location '/warehouse/gmall/ads/ads_continuity_uv_count';

    2)写出导入数据的SQL语句

    insert into table ads_continuity_uv_count
    select
       '2019-02-12',
      concat(date_add('2019-02-12',-6),'_','2019-02-12'),
       count(*)
    from
    (
       select mid_id
       from
      (
           select mid_id      
           from
          (
               select
                  mid_id,
                  date_sub(dt,rank) date_dif
               from
              (
                   select
                      mid_id,
                      dt,
                      rank() over(partition by mid_id order by dt) rank
                   from dws_uv_detail_day
                   where dt>=date_add('2019-02-12',-6) and dt<='2019-02-12'
              )t1
          )t2
           group by mid_id,date_dif
           having count(*)>=3
      )t3
       group by mid_id
    )t4;

    3)查询

    select * from ads_continuity_uv_count;

    19.3 编写脚本

    1)创建脚本

    [kgg@hadoop102 bin]$ vim ads_continuity_log.sh
      在脚本中编写如下内容
    #!/bin/bash

    if [ -n "$1" ];then
       do_date=$1
    else
       do_date=`date -d "-1 day" +%F`
    fi

    hive=/opt/module/hive/bin/hive
    APP=gmall

    echo "-----------导入日期$do_date-----------"

    sql="
    insert into table "$APP".ads_continuity_uv_count
    select
        '$do_date',
        concat(date_add('$do_date',-6),'_','$do_date') dt,
        count(*)
    from
    (
      select mid_id
      from
      (
          select mid_id
          from
          (
              select
                  mid_id,
                  date_sub(dt,rank) date_diff
              from
              (
                  select
                      mid_id,
                      dt,
                      rank() over(partition by mid_id order by dt) rank
                  from "$APP".dws_uv_detail_day
                  where dt>=date_add('$do_date',-6) and dt<='$do_date'
              )t1
          )t2
          group by mid_id,date_diff
          having count(*)>=3
      )t3
      group by mid_id
    )t4;
    "

    $hive -e "$sql"

    2)增加脚本执行权限

    chmod 777 ads_continuity_log.sh

    3)脚本使用

    ads_continuity_log.sh 2019-02-12

    4)查询结果

    select * from ads_continuity_uv_count;

    5)脚本执行时间

    企业开发中一般在每日凌晨30分~1点

    作者:大码王

    -------------------------------------------

    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•?ω•?)っ???!

  • 相关阅读:
    js optional chaining operator
    Linux Bash Script conditions
    Linux Bash Script loop
    js Nullish Coalescing Operator
    js sort tricks All In One
    React Portal All In One
    最小生成树&&次小生成树
    链式前向星实现以及它的遍历
    [2015.11.8|9图论]解题代码集合
    最短路算法及其延伸
  • 原文地址:https://www.cnblogs.com/huanghanyu/p/14306307.html
Copyright © 2020-2023  润新知