三 計算連續7天的使用者列表
四 按照連續登入天數分組檢視使用者分布總結無
無具體hive是什麼,能幹啥,本文不做過多闡述,具體可以檢視 aapache hive 的官方使用者文件。
假設有表:tmp_user_login 分割槽表記錄使用者每天的登入資訊,有欄位user_id,last_day,分割槽欄位為:day.
1: 先獲取使用者每天的登入資訊,並通過row_number() over() 函式登入日期排序。
**如下:
2: 計算使用者不同登入日期之間的天數差。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
**如下:
3:對 user_id, last_num_day做分組查詢即可獲取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
**如下:
4 第3步的**計算時,如原始資料的分割槽資料過多,可以把上述查詢結果寫入臨時表,以便後續基於此進行多種情況統計。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天的登入使用者的**如下: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
**如下:select user_id from
tmp_continue_login_user_status
where diff_days=
6
hive sql 書寫並不複雜,只是需要耐心和不斷學習的毅力。複雜的sql 是通過簡單sql慢慢不斷除錯和新增複雜查詢完成的。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
連續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 ...