7.1 新数据生成
1)重启行为数据通道
[atguigu@hadoop102 module]$ cluster.sh stop
[atguigu@hadoop102 module]$ cluster.sh start
2)修改/opt/module/applog下的application.properties
#业务日期
mock.date=2020-06-16
注意:分发至其他需要生成数据的节点
[atguigu@hadoop102 applog]$ xsync application.properties
3)生成数据
[atguigu@hadoop102 bin]$ lg.sh
注意:生成数据之后,记得查看HDFS数据是否存在!
4)导入数据至ODS层
[atguigu@hadoop102 bin]$ hdfs_to_ods_log.sh 2020-06-16
5)导入数据至DWD层
[atguigu@hadoop102 bin]$ ods_to_dwd_log.sh 2020-06-16
6)导入数据至DWS层
[atguigu@hadoop102 bin]$ dwd_to_dws.sh 2020-06-16
7)导入数据至DWT层
[atguigu@hadoop102 bin]$ dws_to_dwt.sh 2020-06-16
8)修改application.properties
#业务日期
mock.date=2020-06-25
重复前面3-7步即可!
7.2 设备主题
7.2.1 活跃设备数(日、周、月)
需求定义:
日活:当日活跃的设备数
周活:当周活跃的设备数
月活:当月活跃的设备数
1)建表语句
hive (gmall)>
drop table if exists ads_uv_count;
create external table ads_uv_count(
`dt` string COMMENT '统计日期',
`day_count` bigint COMMENT '当日用户数量',
`wk_count` bigint COMMENT '当周用户数量',
`mn_count` bigint COMMENT '当月用户数量',
`is_weekend` string COMMENT 'Y,N是否是周末,用于得到本周最终结果',
`is_monthend` string COMMENT 'Y,N是否是月末,用于得到本月最终结果'
) COMMENT '活跃设备数'
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_uv_count/';
Ads层的表,没有分区,没有列式存储,没有压缩,就是一张普通表
主要是ads层的表的数据量会非常少。一天就一条或者几条数据。
而且Ads层的数据最终会导出到mysql,去做可视化展示。而往mysql导数据只能全表导。也不会只选择几个列,所以没有列式存储
2)导入数据
hive (gmall)>
insert into table ads_uv_count
select
'2020-07-31' dt,
daycount.ct,
wkcount.ct,
mncount.ct,
if(date_add(next_day('2020-07-31','MO'),-1)='2020-07-31','Y','N') ,
if(last_day('2020-07-31')='2020-07-31','Y','N')
from
(
select
'2020-07-31' dt,
count(*) ct
from dwt_uv_topic
where login_date_last='2020-07-31'
)daycount join
(
select
'2020-07-31' dt,
count (*) ct
from dwt_uv_topic
where login_date_last>=date_add(next_day('2020-07-31','MO'),-7)
and login_date_last<= date_add(next_day('2020-07-31','MO'),-1)
) wkcount on daycount.dt=wkcount.dt
join
(
select
'2020-07-31' dt,
count (*) ct
from dwt_uv_topic
where date_format(login_date_last,'yyyy-MM')=date_format('2020-07-31','yyyy-MM')
)mncount on daycount.dt=mncount.dt;
next_day('2020-07-31','MO'),-7。求本周一:下周一 -7
next_day('2020-07-31','MO'),-1。求本周日:下周一 -1
last_day('2020-07-11')。得到本月月末
3)查询导入结果
hive (gmall)> select * from ads_uv_count;
7.2.2 每日新增设备
1)建表语句
hive (gmall)>
drop table if exists ads_new_mid_count;
create external table ads_new_mid_count
(
`create_date` string comment '创建时间' ,
`new_mid_count` BIGINT comment '新增设备数量'
) COMMENT '每日新增设备数量'
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_new_mid_count/';
2)导入数据
hive (gmall)>
insert into table ads_new_mid_count
select
'2020-07-31',
count(*)
from dwt_uv_topic
where login_date_first='2020-07-31';
3)查询导入数据
hive (gmall)> select * from ads_new_mid_count;
7.2.3 留存率
1)建表语句
hive (gmall)>
drop table if exists ads_user_retention_day_rate;
create external table ads_user_retention_day_rate
(
`stat_date` string comment '统计日期',
`create_date` string comment '设备新增日期',
`retention_day` int comment '截止当前日期留存天数',
`retention_count` bigint comment '留存数量',
`new_mid_count` bigint comment '设备新增数量',
`retention_ratio` decimal(16,2) comment '留存率'
) COMMENT '留存率'
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_user_retention_day_rate/';
统计日期为计算日期的前一天。因为计算的时候只能拿到前一天的数据
2)导入数据
hive (gmall)>
insert into table ads_user_retention_day_rate
select
'2020-08-01',
date_add('2020-08-01',-1),
1,--留存天数
sum(if(login_date_first=date_add('2020-08-01',-1) and login_date_last='2020-08-01',1,0)),
sum(if(login_date_first=date_add('2020-08-01',-1),1,0)),
sum(if(login_date_first=date_add('2020-08-01',-1) and login_date_last='2020-08-01',1,0))/sum(if(login_date_first=date_add('2020-08-01',-1),1,0))*100
from dwt_uv_topic
union all
select
'2020-08-01',
date_add('2020-08-01',-2),
2,--留存天数
sum(if(login_date_first=date_add('2020-08-01',-2) and login_date_last='2020-08-01',1,0)),--留存数量
sum(if(login_date_first=date_add('2020-08-01',-2),1,0)),--设备新增数量
sum(if(login_date_first=date_add('2020-08-01',-2) and login_date_last='2020-08-01',1,0))/sum(if(login_date_first=date_add('2020-08-01',-2),1,0))*100 --留存率 = 留存数量/设备新增数量
from dwt_uv_topic
union all
select
'2020-08-01',
date_add('2020-08-01',-3),
3,
sum(if(login_date_first=date_add('2020-08-01',-3) and login_date_last='2020-08-01',1,0)),
sum(if(login_date_first=date_add('2020-08-01',-3),1,0)),
sum(if(login_date_first=date_add('2020-08-01',-3) and login_date_last='2020-08-01',1,0))/sum(if(login_date_first=date_add('2020-08-01',-3),1,0))*100
from dwt_uv_topic;
8.1号来统计
2020-07-31 的1日留存率
2020-07-30 的2日留存率
2020-07-29 的3日留存率
3)查询导入数据
hive (gmall)>select * from ads_user_retention_day_rate;
7.2.4 沉默用户数
需求定义:
沉默用户:只在安装当天启动过,且启动时间是在7天前
1)建表语句
hive (gmall)>
drop table if exists ads_silent_count;
create external table ads_silent_count(
`dt` string COMMENT '统计日期',
`silent_count` bigint COMMENT '沉默设备数'
) COMMENT '沉默用户数'
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_silent_count';
2)导入2020-06-25数据
hive (gmall)>
insert into table ads_silent_count
select
'2020-06-25',
count(*)
from dwt_uv_topic
where login_date_first=login_date_last
and login_date_last<=date_add('2020-06-25',-7);
3)查询导入数据
hive (gmall)> select * from ads_silent_count;
7.2.5 本周回流用户数
需求定义:
本周回流用户:上周未活跃,本周活跃的设备,且不是本周新增设备
1)建表语句
hive (gmall)>
drop table if exists ads_back_count;
create external table ads_back_count(
`dt` string COMMENT '统计日期',
`wk_dt` string COMMENT '统计日期所在周',
`wastage_count` bigint COMMENT '回流设备数'
) COMMENT '本周回流用户数'
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_back_count';
只有周日得到的数据是完整的
统计周:用周一的日期拼接周日的日期
2)导入数据:
hive (gmall)>
insert into table ads_back_count
select
'2020-06-25',
concat(date_add(next_day('2020-06-25','MO'),-7),'_', date_add(next_day('2020-06-25','MO'),-1)),
count(*)
from
(
select
mid_id
from dwt_uv_topic
where login_date_last>=date_add(next_day('2020-06-25','MO'),-7)
and login_date_last<= date_add(next_day('2020-06-25','MO'),-1)
and login_date_first<date_add(next_day('2020-06-25','MO'),-7)
)current_wk
left join
(
select
mid_id
from dws_uv_detail_daycount
where dt>=date_add(next_day('2020-06-25','MO'),-7*2)
and dt<= date_add(next_day('2020-06-25','MO'),-7