【Hive學(xué)習(xí)筆記】Hive常見面試題

場景一:分組求TopN

先看數(shù)據(jù):

表-1

好像把小編的數(shù)學(xué)成績暴露了橡淆,現(xiàn)在需要求每一門科目,成績排名前兩名的同學(xué)逸爵。

使用HiveSQL常用的方式為:

select
*
from
(select
item
,name
,score
,row_number() over(partition by item order by score desc) rank
from table
groupby item) a
where rank<=2;

輸出結(jié)果為:


表-2

解析:row_number()函數(shù)基于over對象分組师倔、排序的記過,為每一行分組記錄返回一個序號趋艘,該序號從1開始,依次遞增瓷胧,遇到新組則重新從1開始。也就是說搓萧,該函數(shù)計算的值表示每組內(nèi)部排序后的順序編號遇八。

然后在語句中加入限制條件rank<=2來篩選具體選取top幾。從最終的結(jié)果可以看出刃永,語文成績考試前兩名的同學(xué)分別是建國和小編、數(shù)學(xué)成績排名前兩名的同學(xué)分別是建國和狗剩斯够。

場景二:行轉(zhuǎn)列/列轉(zhuǎn)行

數(shù)據(jù)如下:

表-3

現(xiàn)在需要轉(zhuǎn)換為

表-4

使用hive實現(xiàn)需求的話读规,可以使用:

select

name,

sum(case when item=數(shù)學(xué) then score end) as math,

sum(case when item=英語 then score end) as english,

from table

group by name

解析:首先寫出select name from table group by name, 因為select后有幾個字段,最終輸出就是幾個字段燃少,所以我們需要把目標數(shù)據(jù)的”math”和“english”兩個字段想辦法得出來。

之后可以對item字段所有枚舉的結(jié)果進行case when判斷阵具,將score填值進入,因為最后我們需要對name做一下聚合阳液,需要明確的是一般選取字段一定要出現(xiàn)在groupby里面。

聚合函數(shù)可以不用帘皿,所以我們在外面套一層sum做聚合,這樣得到sum的結(jié)果和單人得分結(jié)果是一致的鹰溜,因為我們以name做了一遍聚合,而每個用戶對一門課程只有一個成績曹动,所以這樣就可以得到最終結(jié)果。

那么最后如果需要將“表-4”的內(nèi)容轉(zhuǎn)換為“表-3”的內(nèi)容應(yīng)該怎么做呢仁期?

一種比較好的方式是這樣:

select table_4.name,

a.item,

a.score

from table_4

lateral view explode(

str_to_map(concat('math=',math,'&english=',english),'&','=')

) a as item,score;

解析:首先使用str_to_map函數(shù)將math字段與english字段拼接后的結(jié)果轉(zhuǎn)換為map類型跛蛋,然后通過側(cè)視圖和explode函數(shù)將其爆炸開,給生成的臨時側(cè)視圖一個名字赊级,取名a并給列名取名為item,score,因為explode(map)爆炸的結(jié)果是每一個item為行理逊,key為1列橡伞,value為1列,這樣就恰好形成我們想要的結(jié)果。這個示例理解起來稍微有點難度兑徘,大家不熟悉這些函數(shù)的用法的話,可以首先熟悉一下挂脑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肋联,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌橄仍,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侮繁,死亡現(xiàn)場離奇詭異,居然都是意外死亡鼎天,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來育勺,“玉大人,你說我怎么就攤上這事涧至。” “怎么了南蓬?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赘方。 經(jīng)常有香客問我,道長窄陡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任涂圆,我火速辦了婚禮们镜,結(jié)果婚禮上润歉,老公的妹妹穿的比我還像新娘。我一直安慰自己踩衩,他們只是感情好,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布九妈。 她就那樣靜靜地躺著,像睡著了一般萌朱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晶疼,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音翠霍,去河邊找鬼。 笑死寒匙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的锄弱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼会宪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掸鹅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巍沙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赎瞎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡牡辽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了态辛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡奏黑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出熟史,到底是詐尸還是另有隱情,我是刑警寧澤蹂匹,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站限寞,受9級特大地震影響忍啸,放射性物質(zhì)發(fā)生泄漏履植。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一凿滤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸭巴,春花似錦、人聲如沸拦盹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽校读。三九已至沼侣,卻和暖如春歉秫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工钞螟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谎碍。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像拯啦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子熔任,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359