背景
用戶可能在app上活躍多次,而這多次界定爲半個鍾,也就是說,假如我7點到8點這段期間使用了app且進行了活躍操作,隔了半個鍾後我重新打開了app進行了活躍的操作,假設活躍時間區間爲12點到13點,那麼,7-8點這段時間我們定爲session1,12-13點這段時間我們定爲session2
思路
根據時間戳reporttime來針對用戶進行排序,獲取這段期間的動作時間裏線,使用lag進行判別,假設本次動作與上次動作時間間隔操作1800s(半個鍾) 那麼就賦予1作爲標識
實現
select
tdbank_imp_date -- string partition fields
,uin -- string QQ或微信
,module -- string 業務模塊
,action -- string 用戶行爲
,obj2 -- string 對象2
,platform -- string 平臺(iOS、Android等)
,source -- string 來源
,timelong -- bigint 時長
-- ,timestr -- string 上報時間
,reporttime -- string 數據上報時間戳(後臺默認添加,精確到秒,如1556436373)
,is_new -- 1 表示新用戶,0表示老用戶
,sum(if(reporttime - pre_rt > 1800, 1, 0)) over(partition by uin order by reporttime asc) as session_id
,pre_rt
from
(
select
tdbank_imp_date -- string partition fields
,uin -- string QQ或微信
,module -- string 業務模塊
,action -- string 用戶行爲
,obj2 -- string 對象2
,platform -- string 平臺(iOS、Android等)
,source -- string 來源
,timelong -- bigint 時長
-- ,timestr -- string 上報時間
,reporttime -- string 數據上報時間戳(後臺默認添加,精確到秒,如1556436373)
,is_new
,lag(reporttime, 1, unix_timestamp()) over(partition by uin order by reporttime asc) as pre_rt
from
(
select
tdbank_imp_date -- string partition fields
,tb1.uin -- string QQ或微信
,module -- string 業務模塊
,action -- string 用戶行爲
,obj2 -- string 對象2
,platform -- string 平臺(iOS、Android等)
,source -- string 來源
,timelong -- bigint 時長
-- ,timestr -- string 上報時間
,reporttime -- string 數據上報時間戳(後臺默認添加,精確到秒,如1556436373)
,if(tb2.uin is not null, 1, 0) as is_new -- 1 表示新用戶,0表示老用戶
from
(
select
tdbank_imp_date -- string partition fields
,uin -- string QQ或微信
,module -- string 業務模塊
,action -- string 用戶行爲
,obj2 -- string 對象2
,platform -- string 平臺(iOS、Android等)
,source -- string 來源
,timelong -- bigint 時長
-- ,nvl(timestr, reporttime) as timestr -- string 上報時間
,nvl(reporttime, timestr) as reporttime -- string 數據上報時間戳(後臺默認添加,精確到秒,如1556436373)
FROM
base_report_tb
WHERE
tdbank_imp_date between ${YYYYMMDD}00 AND ${YYYYMMDD}23
) tb1 left join
(
select
uin
FROM
new_users
WHERE ftime = ${YYYYMMDD}
) tb2 on tb1.uin = tb2.uin
) t
) t2
-- limit 100000
-- is_new -- 是否新用戶
-- session_id -- 會話id