Hive面試題思路總結(一)

2021-09-02 18:45:05 字數 2246 閱讀 8774

幾個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 

1,b

1,c

1,e

2,a

2,c

2,d

2,f

3,a

3,b

3,c

3,e

編寫hive的hql語句來實現以下結果:表中的1表示選修,表中的0表示未選修

id    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

這個更簡單,需要把a,b,c,d,e,f抽成乙個集合。

再按照學生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標頭檔案有這樣的宣...