大數(shù)據(jù) - (五-2)- Impala - 練習(xí)

現(xiàn)有收集到用戶的頁面點(diǎn)擊行為日志數(shù)據(jù)

  • 數(shù)據(jù)格式如下:
用戶id, 點(diǎn)擊時間
user_id click_time
A,2020-05-15 01:30:00
A,2020-05-15 01:35:00
A,2020-05-15 02:00:00
A,2020-05-15 03:00:10
A,2020-05-15 03:05:00
B,2020-05-15 02:03:00
B,2020-05-15 02:29:40
B,2020-05-15 04:00:00

要求:

  • 間隔30分鐘算兩次會話
  • 給所有會話按時間排序,標(biāo)序號
    思路:
  • 先根據(jù)user_id分組,click_time排序,再用行函數(shù)查出上一行的時間beforeTime;
  • 將當(dāng)前的click_time減去beforeTime,得到當(dāng)前行時間比上一行時間差的分鐘`minTime,大于30分鐘設(shè)為1,其他設(shè)為0;
  • 計(jì)算第一行到當(dāng)前行的和,設(shè)為groupType,結(jié)果可能是:0,0...1,1,1...
  • 根據(jù)user_id,groupType重新排序,得到結(jié)果
select user_id,click_time,
row_number() over (partition by user_id,groupType order by click_time) rank
from
  (select user_id,click_time,sum(minTime) over (partition by user_id order by click_time rows
    between unbounded preceding and current row) as groupType 
      from(select user_id,click_time,
        case when (unix_timestamp(click_time) -unix_timestamp(beforeTime))/60 >=30 then 1 else 0          end minTime  
          from(
            select user_id,click_time,
              row_number() over (partition by user_id order by click_time) rank,
              nvl(lag(click_time) over (partition by user_id order by click_time),click_time)                 beforeTime
                from user_clicklog)tmp1
          )tmp2
     )tmp3;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容