大資料實戰(四十二):電商數倉(三十五)之使用者行為資料倉庫(二十一)月活躍率
阿新 • • 發佈:2020-08-21
月活躍使用者與截止到該月累計的使用者總和之間的比例
1 DWS層
使用DWS層月活表以及ADS新增使用者表作為DWS層
2 ADS層
2.1 建表語句
drop table if exists ads_mn_ratio_count; create external table ads_mn_ratio_count( `dt` string COMMENT '統計日期', `mn` string COMMENT '統計月活躍率的月份', `ratio` string COMMENT '活躍率' ) row format delimited fields terminated by '\t' location '/warehouse/gmall/ads/ads_mn_ratio_count';View Code
2.2 匯入資料
-----------------------------需求 月活躍率-----------------------
月活躍使用者與截止到該月累計的使用者總和之間的比例
-----------------------------相關表---------------------
ads_uv_count: 取月活躍使用者
ads_new_mid_count: 取截至到該月所有的使用者數
-----------------------------思路-----------------------
-----------------------------SQL------------------------
insert into table ads_mn_ratio_count
select
'2020-02-17',
date_format('2020-02-17','yyyy-MM'),
cast(mn_count/totalCount * 100 as decimal(10,2))
from
(SELECT
mn_count
from ads_uv_count
where dt='2020-02-17' ) t1
join
(SELECT
sum(new_mid_count) totalCount
from ads_new_mid_count
where create_date <= '2020-02-17') t2
2.3 匯入資料指令碼
ads_mn_ratio_count.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_mn_ratio_count select '$do_date', date_format('$do_date','yyyy-MM'), cast(mn_count/totalCount * 100 as decimal(10,2)) from (SELECT mn_count from ads_uv_count where dt='$do_date' ) t1 join (SELECT sum(new_mid_count) totalCount from ads_new_mid_count where create_date <= '$do_date') t2 " hive -e "$sql"