分享

大数据项目之电商数仓(总结)(十一):用户行为数据仓库

问题导读:
1、如何分析沉默用户、本周回流用户数、流失用户?
2、如何分析最近连续3周活跃用户?
3、如何分析最近七天内连续三天活跃用户数?
4、如何计算本周回流数据?



上一篇:大数据项目之电商数仓(总结)(十):用户行为数据仓库

第9章 新数据准备
为了分析沉默用户、本周回流用户数、流失用户、最近连续3周活跃用户、最近七天内连续三天活跃用户数,需要准备2019-02-12、2019-02-20日的数据。
1)2019-02-12数据准备
(1)修改日志时间
  1. [kgg@hadoop102 ~]$ dt.sh 2019-02-12
复制代码

(2)启动集群
  1. [kgg@hadoop102 ~]$ cluster.sh start
复制代码

(3)生成日志数据
  1. [kgg@hadoop102 ~]$ lg.sh
复制代码

(4)将HDFS数据导入到ODS层
  1. [kgg@hadoop102 ~]$ ods_log.sh 2019-02-12
复制代码

(5)将ODS数据导入到DWD层
  1. [kgg@hadoop102 ~]$ dwd_start_log.sh 2019-02-12
  2. [kgg@hadoop102 ~]$ dwd_base_log.sh 2019-02-12
  3. [kgg@hadoop102 ~]$ dwd_event_log.sh 2019-02-12
复制代码

(6)将DWD数据导入到DWS层
  1. [kgg@hadoop102 ~]$ dws_uv_log.sh 2019-02-12
复制代码

(7)验证
  1. hive (gmall)> select * from dws_uv_detail_day where dt='2019-02-12' limit 2;
复制代码

2)2019-02-20数据准备
(1)修改日志时间
  1. [kgg@hadoop102 ~]$ dt.sh 2019-02-20
复制代码

(2)启动集群
  1. [kgg@hadoop102 ~]$ cluster.sh start
复制代码

(3)生成日志数据
  1. [kgg@hadoop102 ~]$ lg.sh
复制代码

(4)将HDFS数据导入到ODS层
  1. [kgg@hadoop102 ~]$ ods_log.sh 2019-02-20
复制代码

(5)将ODS数据导入到DWD层
  1. [kgg@hadoop102 ~]$ dwd_start_log.sh 2019-02-20
  2. [kgg@hadoop102 ~]$ dwd_base_log.sh 2019-02-20
  3. [kgg@hadoop102 ~]$ dwd_event_log.sh 2019-02-20
复制代码

(6)将DWD数据导入到DWS层
  1. [kgg@hadoop102 ~]$ dws_uv_log.sh 2019-02-20
复制代码

(7)验证
  1. hive (gmall)> select * from dws_uv_detail_day where dt='2019-02-20' limit 2;
复制代码



第10章 需求四:沉默用户数
沉默用户:指的是只在安装当天启动过,且启动时间是在一周前

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

10.2 ADS层
2020-12-17_020752.png

1)建表语句
  1. hive (gmall)>
  2. drop table if exists ads_silent_count;
  3. create external table ads_silent_count(
  4.     `dt` string COMMENT '统计日期',
  5.     `silent_count` bigint COMMENT '沉默设备数'
  6. )
  7. row format delimited fields terminated by '\t'
  8. location '/warehouse/gmall/ads/ads_silent_count';
复制代码

2)导入2019-02-20数据
  1. hive (gmall)>
  2. insert into table ads_silent_count
  3. select
  4.     '2019-02-20' dt,
  5.     count(*) silent_count
  6. from
  7. (
  8.     select mid_id
  9.     from dws_uv_detail_day
  10.     where dt<='2019-02-20'
  11.     group by mid_id   
  12.     having count(*)=1 and max(dt)<date_add('2019-02-20',-7)
  13. ) t1;
复制代码

3)查询导入数据
  1. hive (gmall)> select * from ads_silent_count;
复制代码

10.3 编写脚本
1)在hadoop102的/home/kgg/bin目录下创建脚本
  1. [kgg@hadoop102 bin]$ vim ads_silent_log.sh
  2.     在脚本中编写如下内容
  3. #!/bin/bash
  4. hive=/opt/module/hive/bin/hive
  5. APP=gmall
  6. if [ -n "$1" ];then
  7.     do_date=$1
  8. else
  9.     do_date=`date -d "-1 day" +%F`
  10. fi
  11. echo "-----------导入日期$do_date-----------"
  12. sql="
  13. insert into table "$APP".ads_silent_count
  14. select
  15.     '$do_date' dt,
  16.     count(*) silent_count
  17. from
  18. (
  19.     select
  20.         mid_id
  21.     from "$APP".dws_uv_detail_day
  22.     where dt<='$do_date'
  23.     group by mid_id
  24.     having count(*)=1 and min(dt)<=date_add('$do_date',-7)
  25. )t1;"
  26. $hive -e "$sql"
复制代码

2)增加脚本执行权限
  1. [kgg@hadoop102 bin]$ chmod 777 ads_silent_log.sh
复制代码

3)脚本使用
  1. [kgg@hadoop102 module]$ ads_silent_log.sh 2019-02-20
复制代码

4)查询结果
  1. hive (gmall)> select * from ads_silent_count;
复制代码

5)脚本执行时间
企业开发中一般在每日凌晨30分~1点

第11章 需求五:本周回流用户数
本周回流=本周活跃-本周新增-上周活跃
11.1 DWS层
使用日活明细表dws_uv_detail_day作为DWS层数据

11.2 ADS层
2020-12-17_020853.png

1)建表语句
  1. hive (gmall)>
  2. drop table if exists ads_back_count;
  3. create external table ads_back_count(
  4.     `dt` string COMMENT '统计日期',
  5.     `wk_dt` string COMMENT '统计日期所在周',
  6.     `wastage_count` bigint COMMENT '回流设备数'
  7. )
  8. row format delimited fields terminated by '\t'
  9. location '/warehouse/gmall/ads/ads_back_count';
复制代码

2)导入数据:
  1. hive (gmall)>
  2. insert into table ads_back_count
  3. select
  4.    '2019-02-20' dt,
  5.    concat(date_add(next_day('2019-02-20','MO'),-7),'_',date_add(next_day('2019-02-20','MO'),-1)) wk_dt,
  6.    count(*)
  7. from
  8. (
  9.     select t1.mid_id
  10.     from
  11.     (
  12.         select    mid_id
  13.         from dws_uv_detail_wk
  14.         where wk_dt=concat(date_add(next_day('2019-02-20','MO'),-7),'_',date_add(next_day('2019-02-20','MO'),-1))
  15.     )t1
  16.     left join
  17.     (
  18.         select mid_id
  19.         from dws_new_mid_day
  20.         where create_date<=date_add(next_day('2019-02-20','MO'),-1) and create_date>=date_add(next_day('2019-02-20','MO'),-7)
  21.     )t2
  22.     on t1.mid_id=t2.mid_id
  23.     left join
  24.     (
  25.         select mid_id
  26.         from dws_uv_detail_wk
  27.         where wk_dt=concat(date_add(next_day('2019-02-20','MO'),-7*2),'_',date_add(next_day('2019-02-20','MO'),-7-1))
  28.     )t3
  29.     on t1.mid_id=t3.mid_id
  30.     where t2.mid_id is null and t3.mid_id is null
  31. )t4;
复制代码

3)查询结果
  1. hive (gmall)> select * from ads_back_count;
复制代码

11.3 编写脚本
1)在hadoop102的/home/kgg/bin目录下创建脚本
  1. [kgg@hadoop102 bin]$ vim ads_back_log.sh
  2.     在脚本中编写如下内容
  3. #!/bin/bash
  4. if [ -n "$1" ];then
  5.     do_date=$1
  6. else
  7.     do_date=`date -d "-1 day" +%F`
  8. fi
  9. hive=/opt/module/hive/bin/hive
  10. APP=gmall
  11. echo "-----------导入日期$do_date-----------"
  12. sql="
  13. insert into table "$APP".ads_back_count
  14. select
  15.        '$do_date' dt,
  16.        concat(date_add(next_day('$do_date','MO'),-7),'_',date_add(next_day('$do_date','MO'),-1)) wk_dt,
  17.        count(*)
  18. from
  19. (
  20.     select t1.mid_id
  21.     from
  22.     (
  23.         select mid_id
  24.         from "$APP".dws_uv_detail_wk
  25.         where wk_dt=concat(date_add(next_day('$do_date','MO'),-7),'_',date_add(next_day('$do_date','MO'),-1))
  26.     )t1
  27.     left join
  28.     (
  29.         select mid_id
  30.         from "$APP".dws_new_mid_day
  31.         where create_date<=date_add(next_day('$do_date','MO'),-1) and create_date>=date_add(next_day('$do_date','MO'),-7)
  32.     )t2
  33.     on t1.mid_id=t2.mid_id
  34.     left join
  35.     (
  36.         select mid_id
  37.         from "$APP".dws_uv_detail_wk
  38.         where wk_dt=concat(date_add(next_day('$do_date','MO'),-7*2),'_',date_add(next_day('$do_date','MO'),-7-1))
  39.     )t3
  40.     on t1.mid_id=t3.mid_id
  41.     where t2.mid_id is null and t3.mid_id is null
  42. )t4;"
  43. $hive -e "$sql"
复制代码

2)增加脚本执行权限
  1. [kgg@hadoop102 bin]$ chmod 777 ads_back_log.sh
复制代码

3)脚本使用
  1. [kgg@hadoop102 module]$ ads_back_log.sh 2019-02-20
复制代码

4)查询结果
  1. hive (gmall)> select * from ads_back_count;
复制代码

5)脚本执行时间
企业开发中一般在每周一凌晨30分~1点

最新经典文章,欢迎关注公众号


没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条