需求三:沉默用户数
沉默用户指的是只在安装当天启动过,且启动时间是在一周前
准备新数据
为了分析沉默用户、本周回流用户数、流失用户、最近连续3周活跃用户、最近七天内连续三天活跃用户数,需要准备2019-02-12、2019-02-20日的数据。
2019-02-12数据准备
修改日志时间
dt.sh 2019-02-12
启动集群
cluster.sh start
生成日志数据
lg.sh
将HDFS数据导入到ODS层
ods_log.sh 2019-02-12
将ODS数据导入到DWD层
dwd_start_log.sh 2019-02-12
dwd_base_log.sh 2019-02-12
dwd_event_log.sh 2019-02-12
将DWD数据导入到DWS层
dws_uv_log.sh 2019-02-12
2019-02-20数据步骤同。
DWS层
使用日活跃用户表dws_uv_detail_day作为DWS层数据
ADS层
建表
drop table if exists ads_slient_count;
create external table ads_slient_count(
`dt` string COMMENT '统计日期',
`slient_count` bigint COMMENT '沉默设备数'
)
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_slient_count';
插入数据
insert into table ads_slient_count
select
'2019-02-20' dt,
count(*) slient_count
from
(
select mid_id
from dws_uv_detail_day
where dt<='2019-02-20'
group by mid_id
having count(*)=1 and min(dt)<date_add('2019-02-20',-7)
) t1;
编写脚本
#!/bin/bash
APP=gmall
hive=/opt/module/hive/bin/hive
if [ -n "$1" ] ;then
do_date=$1
else
do_date=`date -d "-1 day" +F%`
fi
echo "-----------导入日期$do_date-----------"
sql="
INSERT INTO TABLE "$APP".ads_slient_count
SELECT
'$do_date',
count(*)
from
(
select
mid_id
from "$APP".dws_uv_detail_day
where dt<='$do_date'
group by mid_id
having count(*)=1
and min(dt)<date_add('$do_date',-7)
) t1;
"
$hive -e "$sql"
最后验证是否成功
select * from ads_slient_count;