大資料實戰(五十六):電商數倉(三十九)之系統業務資料倉庫(十二)新付費使用者數
阿新 • • 發佈:2020-08-23
1 DWS層
1.1 建表語句
drop table if exists dws_pay_user_detail; create external table dws_pay_user_detail( `user_id` string comment '付費使用者id', `name` string comment '付費使用者姓名', `birthday` string COMMENT '', `gender` string COMMENT '', `email` string COMMENT '', `user_level` stringView CodeCOMMENT '' ) COMMENT '付費使用者表' PARTITIONED BY (`dt` string) stored as parquet location '/warehouse/gmall/dws/dws_pay_user_detail/';
1.2 匯入資料
-----------------------------需求 新付費使用者數 dws_pay_user_detail-----------------------
新付費使用者數: 判斷今天掏錢支付的使用者中,哪些是新使用者,統計其數量
取今天支付的所有使用者-歷史新付費使用者(dws_pay_user_detail)
-----------------------------相關表---------------------
dws_pay_user_detail: 每天統計今天的新付費使用者有哪些
截至到今天,表中已經有了今天之前所有付費的使用者(付費的老使用者)
dws_sale_detail_daycount: 取所有掏錢的使用者
dwd_user_info: 使用者資訊表
-----------------------------思路-----------------------
從dws_sale_detail_daycount取今天所有使用者的購買明細,和dws_pay_user_detail做差集,
-----------------------------SQL------------------------
insert overwrite table dws_pay_user_detail PARTITION(dt='2020-02-16')
SELECT
ui.id,ui.name,ui.birthday,ui.gender,ui.email,ui.user_level
from
(select
distinct t1.user_id
from
(select
user_id
from dws_sale_detail_daycount
where dt='2020-02-16') t1
left join dws_pay_user_detail pu
on t1.user_id=pu.user_id
where pu.user_id is null) t2 join
(select * from dwd_user_info where dt='2020-02-16') ui
on t2.user_id=ui.id
2 ADS層
2.1 建表語句
drop table if exists ads_pay_user_count; create external table ads_pay_user_count( dt string COMMENT '統計日期', pay_count bigint COMMENT '付費使用者數' ) COMMENT '付費使用者表' stored as parquet location '/warehouse/gmall/dws/ads_pay_user_count/';View Code
2.2 匯入資料
-----------------------------需求--ads_pay_user_count---------------------
-----------------------------相關表---------------------
dws_pay_user_detail
-----------------------------思路-----------------------
-----------------------------SQL------------------------
insert into table ads_pay_user_count
select
'2020-02-16',count(*)
from dws_pay_user_detail
where dt='2020-02-16'