hive學(xué)習(xí)(四):面試題——場景輸出(row_number)

前言:

sql為基礎(chǔ)拥娄,利用題目進行hive的語句練習(xí)泻轰,逐步體會sql與hive的不同之處疙渣。
本次題目用到row_number()撇吞、collect_set()俗冻、concat_ws()

其中collect_set()牍颈、concat_ws講解可參考
http://www.reibang.com/p/6ec508d1591a

文末講解row_number迄薄。

題目:

存在一份數(shù)據(jù)

userid,changjing,inttime
1,1001,1400
2,1002,1401
1,1002,1402
1,1001,1402
2,1003,1403
2,1004,1404
3,1003,1400
4,1004,1402
4,1003,1403
4,1001,1403
4,1002,1404
5,1001,1402
5,1001,1403
image.png

要求輸出,用戶號對應(yīng)前兩個不同場景

1-1001-1002
2-1002-1003
3-1003
4-1004-1003
5-1001

解題步驟:

一煮岁、創(chuàng)建表mianshi1
hive> create table mianshi1(userid string,changjing string,inttime int) 
row format delimited fields terminated by ",";
二讥蔽、導(dǎo)入數(shù)據(jù)
hive> load data local inpath"/home/jiafeng/xxx.csv" into table mianshi1;
三、驗證數(shù)據(jù)是否準(zhǔn)確
hive> select * from mianshi1;
image.png
四画机、按inttime時間進行排序
hive> create table tmp_mianshi1 as
    > select *,row_number() over(partition by userid order by inttime) as num 
from mianshi1 order by userid,inttime;
image.png
五冶伞、篩選出前兩個不同的場景
hive> create table tmp1_mianshi1 as
    > select userid,collect_set(changjing) as changjing2 from
 tmp_mianshi1 where num<=2 group by userid;
image.png
六、獲得答案結(jié)果

方法一:

hive> select concat(userid,"-",concat_ws("-",changjing2)) as result 
from tmp1_mianshi1;

image.png

方法二:

hive> select 
(case when changjing2[1] is NULL then concat(userid,"-",changjing2[0]) 
else concat(userid,"-",changjing2[0],"-",changjing2[1]) end) as result  
from tmp1_mianshi1;

注:方法二適用場景更多步氏,concat_ws函數(shù)只適用string類型响禽,做題過程中表類型設(shè)置為int,最終獲得了array<int>荚醒,無法利用類型轉(zhuǎn)換為array<string>(會報錯)芋类。

講解

row_number()
  • 相同數(shù)據(jù)依舊會排序,
    例如:小明80分界阁,小紅80分侯繁,小張75分,排序為:小明 1 小紅 2 小張3
  • 通常結(jié)合partition by xxx order by xxx (asc/desc)使用
    亦或者distribute by xxx sort by xxx(asc/desc)
    partition by 即分組泡躯,order by 為排序
  • 實際案例:
select * from tmp_test;
c1    c2
-----   ------
1    str1
2    str2
3    str3
3    str31
3    str33
4    str41
4    str42
select t.*,row_number() over(distribute by c1 sort by c2 desc) rn
from tmp_test t;
c1  c2  rn
_________
1  str1  1
2  str2  1
3  str33  1
3  str31  2
3   str3  3
4  str42  1
4  str41  2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贮竟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子较剃,更是在濱河造成了極大的恐慌咕别,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件重付,死亡現(xiàn)場離奇詭異顷级,居然都是意外死亡,警方通過查閱死者的電腦和手機确垫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門弓颈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人删掀,你說我怎么就攤上這事翔冀。” “怎么了披泪?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵纤子,是天一觀的道長。 經(jīng)常有香客問我,道長控硼,這世上最難降的妖魔是什么泽论? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮卡乾,結(jié)果婚禮上翼悴,老公的妹妹穿的比我還像新娘。我一直安慰自己幔妨,他們只是感情好鹦赎,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著误堡,像睡著了一般古话。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锁施,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天陪踩,我揣著相機與錄音,去河邊找鬼悉抵。 笑死膊毁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的基跑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼描焰,長吁一口氣:“原來是場噩夢啊……” “哼媳否!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荆秦,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤篱竭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后步绸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掺逼,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年瓤介,在試婚紗的時候發(fā)現(xiàn)自己被綠了吕喘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡刑桑,死狀恐怖氯质,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祠斧,我是刑警寧澤闻察,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響辕漂,放射性物質(zhì)發(fā)生泄漏呢灶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一钉嘹、第九天 我趴在偏房一處隱蔽的房頂上張望鸯乃。 院中可真熱鬧,春花似錦隧期、人聲如沸飒责。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宏蛉。三九已至,卻和暖如春性置,著一層夾襖步出監(jiān)牢的瞬間拾并,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工鹏浅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嗅义,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓隐砸,卻偏偏與公主長得像之碗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子季希,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355