目前有兩列資料,分別是使用者id和使用者登入的時間,現需要統計使用者連續登入的最大天數,中間如有斷開,則不算連續,如下圖示例。
在hive中進行操作,首先啟動hadoop集群環境,進入到hadoop安裝目錄,
sbin/start-dfs.sh
,jps
檢視hadoop集群有無正常啟動
正常啟動後,輸入hive
啟動hive。使用之前建立的test資料庫,沒有可以自行建立乙個資料庫,在test資料庫下新建乙個表user_login,這裡的日期使用date資料型別
create
table user_login(
id int
,login_time date
)row format delimited
fields
terminated
by','
--分隔符是逗號
lines
terminated
by'\n'
;--行與行之間使用換行符
建立好錶結構後,向該表中到入資料,在root許可權下新建乙個user_login.txt,使用命令vi user_login.txt
,將資料貼上到user_login.txt中,如下圖:
注意資料前後不能有空格,不然匯入的資料會變成null。使用命令:
load data local inpath '/usr/local/hive/tmp/user_login.txt' overwrite into table user_login;
匯入資料到user_login表中,查詢一下有無正確匯入select * from user_login;
,我第一次導的時候因為資料後面有空格,導致匯入錯誤了,後經過修正,沒有問題了,如下圖:
第二步:判斷是否連續:用login_time-rank 如果連續則做差後值一樣,然後再用id,login_time分組算出每個id下連續的天數,得到如下結果:
第三步:再以id分組,取最大的連續登入天數,得到如下結果:
select
id,max(continuous_days)
as maxday
from
(select
id,date_sub(login_time,sort)
as login_group,
min(login_time)
as start_login_time,
max(login_time)
as end_login_time,
count(1
)as continuous_days
from
(-- 第一段首先根據使用者分組,登陸時間排序,結果按照登陸時間公升序排列
可以看到已經得到了想要的結果了,在此僅記錄一下在hive中的學習過程,原部落格位址見參考?。
參考:
hive上連續登入天數的查詢
1 資料測試表及測試資料 測試表表結構 hive desc data room okroomid string pt month string pt day string partition information col name data type comment pt month string...
連續登入天數計算
最近有個需求,計算使用者連續登入的最大天數 這裡使用prestosql,使用hive也可以 先看下登入日誌資料表hive.traffic.access user只有兩個字段 uid,day 日期輔助表hive.ods.dim date,這個表只有乙個欄位day 先說下思路,uidday rownum...
HIVE SQL 訂單消費天數累加
資料 user 使用者,num 下單次數,date消費日期user num date a 1 20200206 a 2 20200517 a 2 20200530 a 4 20200611 a 6 20201111 b 1 20201113 b 5 20201210 b 3 20210222需求 按...