幾個hive面試題,總是寫不上來,看過兩遍還是不會,還是寫不出來,進一步說明了,寫**真的需要很瘋狂的寫才可能比較熟悉。
不過好在,現在基本都有思路了,簡單總結一下。
這種題有了思路,把它形成套路,自然就熟能生巧了,但是光看懂思路真的寫還是各種錯誤,所以說寫出來才能真的信自己會了。
第一題根據以下資料,求單月訪問次數和總訪問次數
單月訪問次數很好求啊,就是用group by 使用者名稱,月份 求和就可以了。然後把這些資料存在表b裡。
總訪問次數其實就是把本月之前的所有月份疊加嘛,把錶b做自連線,然後通過a.month>=b.month條件,繼續對訪問次數求和即可。
使用者名稱,月份,訪問次數
a,2015-01,5第二題,學生課程成績a,2015-01,15
b,2015-01,5
a,2015-01,8
b,2015-01,25
a,2015-01,5
a,2015-02,4
a,2015-02,6
b,2015-02,10
b,2015-02,5
a,2015-03,16
a,2015-03,22
b,2015-03,23
b,2015-03,10
b,2015-03,1
根據下表 求 所有數學課程成績 大於 語文課程成績的學生的學號
思路:我們都知道行與行是沒辦法比較的,需要轉化成列。首先得有數學和語文這兩列對吧,然後才能比較。
其實列名直接改都行,但是值怎麼改,需要case when.....then....end。 把這組資料整理到乙個view裡。
效果成這樣了
接下來就簡單了,把每個學生的每科成績只留最大值,合併好。
然後比較成績就可以了。
3.求每一年最大氣溫的那一天+溫度
首先用substr來裁剪資料,分出year,month,day 標記為表a
求每年最大氣溫的溫度,這個超級簡單。
就把年、氣溫的最大值這兩列抽出來就可以了,group by 年。標記為表b。
表a 表b做連線,以年相等、氣溫相等為條件做連線,這是哪一天 不就出來了麼。
4. 學生選課情況
id course
1,a編寫hive的hql語句來實現以下結果:表中的1表示選修,表中的0表示未選修1,b
1,c
1,e
2,a
2,c
2,d
2,f
3,a
3,b
3,c
3,e
id a b c d e f這個更簡單,需要把a,b,c,d,e,f抽成乙個集合。1 1 1 1 0 1 0
2 1 0 1 1 0 1
3 1 1 1 0 1 1
再按照學生id,抽出乙個集合,兩個表做連線 一對照,有的標1,沒得標0, 即可。
集合用到了collect_set(course) 這個倒是簡單
array contains(整個集合,每個學生的成績陣列 第乙個值就是a課程的成績 第二個值就是b課程的成績)
select id,第五題更簡單了case when array_contains(id_courses, courses[0]) then 1 else 0 end as a,
case when array_contains(id_courses, courses[1]) then 1 else 0 end as b,
和第一題完全一樣。
面試題總結(一)
這段時間找實習,碰到一堆算是經典的面試題。回答得不是很好,這裡總結一下,順便搜搜網上的答案。1 棧和堆的區別。管理方式不同 棧,由編譯器自動管理,無需程式設計師手工控制 堆 產生和釋放由程式設計師控制。空間大小不同 棧的空間有限 堆記憶體可以達到4g。能否產生碎片不同 棧不會產生碎片,因為棧是種先進...
面試題總結一
按失效策略分類 強制快取 對比快取 了解詳細可參考 expires http 1.0 的字段,在響應訊息頭中,設定這個字段之後,就可以告訴瀏覽器,在未過期之前不需要再次請求。表示快取到期時間,是乙個絕對的時間 當前時間 快取時間 如 expires thu,10 nov 2017 08 45 11 ...
面試題總結(一)
尋找人生的關鍵點,並在關鍵時刻竭盡全力!udp包頭多長 8個位元組 源埠,目的埠,udp長度,udp檢驗和 select和epoll的區別 1.select為posix標準,epoll為linux所特有的 2.select的控制代碼數目受限,在linux posix types.h標頭檔案有這樣的宣...