1. 程式人生 > 實用技巧 >大資料實戰(三十七):電商數倉(三十)之使用者行為資料倉庫(十六)流失使用者數

大資料實戰(三十七):電商數倉(三十)之使用者行為資料倉庫(十六)流失使用者數

流失使用者:最近7天未登入我們稱之為流失使用者

1 DWS

使用日活明細表dws_uv_detail_day作為DWS層資料

2 ADS

1)建表語句

hive (gmall)>
drop table if exists ads_wastage_count;
create external table ads_wastage_count(
    `dt` string COMMENT '統計日期',
    `wastage_count` bigint COMMENT '流失裝置數'
)
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_wastage_count';
View Code

2

=============================主題 流失使用者數=========================

流失使用者: 最近7天未登入我們稱之為流失使用者
如果一個使用者,登入了,產生日活資訊!
如果一個使用者在日活表中,最後一次登入的日期,距離當前已經間隔了7天,這個使用者屬於流失使用者!
-----------------------------需求-----------------------

-----------------------------相關表---------------------
日活表dws_uv_detail_daily

-----------------------------思路-----------------------
統計日活表中,所有使用者,最後一次登入的日期!
判斷日期是否距離當前小於7天

-----------------------------SQL------------------------
insert into table ads_wastage_count
select
'2020-02-18',
COUNT(*)
from
(select
mid_id
from dws_uv_detail_day
where dt<='2020-02-18'
group by mid_id

having max(dt) < date_sub('2020-02-18',7)) tmp

3 編寫指令碼

#!/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_wastage_count
select 
    '$do_date',
      COUNT(*)
from
(select 
    mid_id
from dws_uv_detail_day
where dt<='$do_date'
group by mid_id
having max(dt) < date_sub('$do_date',7)) tmp

"
hive  -e "$sql"