1. 程式人生 > 實用技巧 >大資料實戰(四十二):電商數倉(三十五)之使用者行為資料倉庫(二十一)月活躍率

大資料實戰(四十二):電商數倉(三十五)之使用者行為資料倉庫(二十一)月活躍率

月活躍使用者與截止到該月累計的使用者總和之間的比例

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"