大数据实战(三十三):电商数仓(二十六)之用户行为数据仓库(十二)用户新增主题

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"

 

你可能感兴趣的:(大数据实战(三十三):电商数仓(二十六)之用户行为数据仓库(十二)用户新增主题)