hive實現連續N天登入使用者計算

2021-10-24 06:02:07 字數 3492 閱讀 9397

三 計算連續7天的使用者列表

四 按照連續登入天數分組檢視使用者分布總結無

無具體hive是什麼,能幹啥,本文不做過多闡述,具體可以檢視 aapache hive 的官方使用者文件。

假設有表:tmp_user_login 分割槽表記錄使用者每天的登入資訊,有欄位user_id,last_day,分割槽欄位為:day.

1: 先獲取使用者每天的登入資訊,並通過row_number() over() 函式登入日期排序。

**如下:

select

user_id,

last_day,

row_number(

)over

(partition

by devid order

by last_day) rank_num

from

tmp_user_login where

daybetween date1 and date2

2: 計算使用者不同登入日期之間的天數差。

**如下:

select 

userid,

last_day,

date_sub(last_day,rank_num)

as last_num_day

from

(select

user_id,

last_day,

row_number(

)over

(partition

by devid order

by last_day) rank_num

from

tmp_user_login where

daybetween date1 and date2

) a

3:對 user_id, last_num_day做分組查詢即可獲取

**如下:

select 

user_id,

datediff(

max(last_day)

,min

(last_day)

)as diff_days,

-- 連續登入天數

collect_set(last_day)

-- 連續登入天數的有序陣列

from

(select

userid,

last_day,

date_sub(last_day,rank_num)

as last_num_day

from

(select

user_id,

last_day,

row_number(

)over

(partition

by devid order

by last_day) rank_num

from

tmp_user_login where

daybetween date1 and date2

) a

)tmp

group

by user_id,last_num_day

4 第3步的**計算時,如原始資料的分割槽資料過多,可以把上述查詢結果寫入臨時表,以便後續基於此進行多種情況統計。

寫臨時表**如下:

drop

table

if tmp_continue_login_user_status;

create

temporary

table tmp_continue_login_user_status as

select

user_id,

datediff(

max(last_day)

,min

(last_day)

)as diff_days,

-- 連續登入天數

collect_set(last_day)

-- 連續登入天數的有序陣列

from

(select

userid,

last_day,

date_sub(last_day,rank_num)

as last_num_day

from

(select

user_id,

last_day,

row_number(

)over

(partition

by devid order

by last_day) rank_num

from

tmp_user_login where

daybetween date1 and date2

) a

)tmp

group

by user_id,last_num_day

計算連續7天的登入使用者的**如下:

select user_id from 

tmp_continue_login_user_status

where diff_days=

6

**如下:

select

diff_days,

-- 連續登入天數

users,

-- 連續登入天數對應的使用者數

(sum

(users)

over()

)as total_users,

-- 總體使用者數

(sum

(devices)

over

(order

by diff_days desc))

as aggregate_users,

--小於當前天數的累計使用者數

devices/

(sum

(users)

over()

)as diff_days_rate,

-- 連續登入天數對應的使用者佔使用者使用者的比列

(sum

(devices)

over

(order

by diff_days desc))

/(sum(users)

over()

)as aggregate_users_rate -- 小於等於當前天數 連續登入的使用者數累計佔比

from

(select

diff_days,

count

(distinct user_id)

as users

from

tmp_continue_login_user_status

group

by diff_days

) tmp

order

by diff_days desc

hive sql 書寫並不複雜,只是需要耐心和不斷學習的毅力。複雜的sql 是通過簡單sql慢慢不斷除錯和新增複雜查詢完成的。

連續N天登入的資料獲取 hive

1 獲取使用者連續登入天數 整合源表,保證乙個使用者每天一條記錄 drop table if exists xxnisj1112 uid basic create table xxnisj1112 uid basic as select uid,pt day from oss bi all user...

Android 實現登入使用者資訊儲存

前兩天用sharedpreference實現了儲存使用者歷史資訊,當使用者再次登入的時候在autocompletetextview 仿google搜尋自動提示框 中顯示歷史使用者資訊。這次使用者資訊是通過xml儲存的,其中比較中要的包括了xml資料的生成和xml資料的解析,以及生成apk私有資料。x...

SPARK SQL連續三天登入的使用者

sid,dt,money shop1,2019 01 18,500 shop1,2019 02 10,500 shop1,2019 02 10,200 shop1,2019 02 11,600 shop1,2019 02 12,400 shop1,2019 02 13,200 shop1,2019 ...