第13章 需求七:最近连续3周活跃用户数
最近3周连续活跃的用户:通常是周一对前3周的数据做统计,该数据一周计算一次。
13.1 DWS层
使用周活明细表dws_uv_detail_wk作为DWS层数据
13.2 ADS层
1)建表语句
hive (gmall)>
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 ‘\t’
location ‘/warehouse/gmall/ads/ads_continuity_wk_count’;
2)导入2019-02-20所在周的数据
hive (gmall)>
insert into table ads_continuity_wk_count
select
‘2019-02-20’,
concat(date_add(next_day(‘2019-02-20’,‘MO’),-73),’_’,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’),-73),’_’,date_add(next_day(‘2019-02-20’,‘MO’),-72-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)查询
hive (gmall)> select * from ads_continuity_wk_count;
13.3 编写脚本
1)在hadoop102的/home/atguigu/bin目录下创建脚本
[atguigu@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 “ A P P " . a d s c o n t i n u i t y w k c o u n t s e l e c t ′ APP".ads_continuity_wk_count select ' APP".adscontinuitywk