1. 程式人生 > 實用技巧 >大資料實戰(五十六):電商數倉(三十九)之系統業務資料倉庫(十二)新付費使用者數

大資料實戰(五十六):電商數倉(三十九)之系統業務資料倉庫(十二)新付費使用者數

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` string
COMMENT '' ) COMMENT '付費使用者表' PARTITIONED BY (`dt` string) stored as parquet location '/warehouse/gmall/dws/dws_pay_user_detail/';
View Code

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'