0 用户新增主题
首次联网使用应用的用户。如果一个用户首次打开某APP,那这个用户定义为新增用户;卸载再安装的设备,不会被算作一次新增。新增用户包括日新增用户、周新增用户、月新增用户。
1 DWS层(每日新增设备明细表)
1)建表语句
hive (gmall)>
drop table if exists dws_new_mid_day;
create external table dws_new_mid_day
(
`mid_id` string COMMENT '设备唯一标识',
`user_id` string COMMENT '用户标识',
`version_code` string COMMENT '程序版本号',
`version_name` string COMMENT '程序版本名',
`lang` string COMMENT '系统语言',
`source` string COMMENT '渠道号',
`os` string COMMENT '安卓系统版本',
`area` string COMMENT '区域',
`model` string COMMENT '手机型号',
`brand` string COMMENT '手机品牌',
`sdk_version` string COMMENT 'sdkVersion',
`gmail` string COMMENT 'gmail',
`height_width` string COMMENT '屏幕宽高',
`app_time` string COMMENT '客户端日志产生时的时间',
`network` string COMMENT '网络模式',
`lng` string COMMENT '经度',
`lat` string COMMENT '纬度',
`create_date` string comment '创建时间'
) COMMENT '每日新增设备信息'
stored as parquet
location '/warehouse/gmall/dws/dws_new_mid_day/';
2)导入数据
用每日活跃用户表Left Join每日新增设备表,关联的条件是mid_id相等。如果是每日新增的设备,则在每日新增设备表中为null。
=============================新增用户主题=========================
新增用户:
用户: 一个设备,作为一个用户,主要通过mid_id表示
新增: 第一次打开应用使用的用户称为新增用户
-----------------------------需求1.每日新增设备明细-----------------------
-----------------------------相关表---------------------
dws_uv_detail_day(日活表)中查询
dws_new_mid_day(每日新增设备表)
-----------------------------思路-----------------------
dws_uv_detail_day包含今天所有的活跃用户的信息
所有的活跃用户= 今天的新增用户 + 之前的历史用户
要向dws_new_mid_day插入的是2020-02-14的新用户,dws_new_mid_day里面已经有了
从应用统计-2020-02-13所有的老用户信息
今天的活跃用户-之前的历史用户=今天的新增用户!
今天的日活用户为集合 a
之前的历史用户为集合 b
取a差b: a left join b where b.xxx is null
a集合: b集合
mid_id name mid_id age
1 a 1 3
2 b 4 6
3 c
a left join b on a.mid_id = b.mid_id :
a集合: b集合
mid_id name mid_id age
1 a 1 3
2 b null null
3 c null null
where b.mid_id is null
-----------------------------SQL------------------------
insert into table gmall.dws_new_mid_day
SELECT
t1.*
FROM
(select * from dws_uv_detail_day where dt='2020-02-14') t1
LEFT JOIN gmall.dws_new_mid_day nm
on t1.mid_id=nm.mid_id
WHERE nm.mid_id is null;
4)导入数据脚本
dws_new_log.sh
#!/bin/bash
if [ -n "$1" ]
then
do_date=$1
else
do_date=$(date -d yesterday +%F)
fi
echo ===日志日期为$do_date===
sql="
use gmall;
insert into table gmall.dws_new_mid_day
SELECT
t1.*
FROM
(select * from dws_uv_detail_day where dt='$do_date') t1
LEFT JOIN gmall.dws_new_mid_day nm
on t1.mid_id=nm.mid_id
WHERE nm.mid_id is null;
"
hive -e "$sql"
2 ADS层(每日新增设备表)
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)导入数据
-----------------------------需求2.统计每日新增设备数-----------------------
-----------------------------相关表---------------------
从dws_new_mid_day,执行count统计即可
-----------------------------思路-----------------------
-----------------------------SQL------------------------
insert into table ads_new_mid_count
SELECT
'2020-02-14',
count(*)
FROM
dws_new_mid_day
where create_date='2020-02-14'
4)导入数据脚本
ads_new_log.sh
#!/bin/bash
if [ -n "$1" ]
then
do_date=$1
else
do_date=$(date -d yesterday +%F)
fi
echo ===日志日期为$do_date===
sql="
use gmall;
insert into table ads_new_mid_count
SELECT
'$do_date',
count(*)
FROM
dws_new_mid_day
where create_date='$do_date'
"
hive -e "$sql"