Hive經典面試題——級聯求和(訪客訪問統計報表)
在大資料面試中,Hive知識的考察大部分會問級聯求和,業務場景雖然有很多種,比如說,年收入,月收入統計;訪客訪問次數年統計,月統計。等等。但是基本根源知識是級聯求和,本文就以訪客訪問統計為例。
1、基本需求
根據訪客的每日訪問資訊,進行累計訪問:
- 輸入資料:
有如下訪客訪問次數統計表 t_access_times
為了減輕計算複雜度,去掉了天的資訊只留下了年月。
- 輸出資料:
需要輸出報表:t_access_times_accumulate
2、實現步驟
2.1 原始資料
vi /home/chunsoft/t_access_times.dat
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
2.2 建立表
jdbc:hive2://172.16.208.128:10000>create table t_access_times(username string,month string,access_time int)
row format delimited fields terminated by ',';
2.3 將資料載入到表中
jdbc:hive2://172.16.208.128:10000>
load data local inpath '/home/chunsoft/t_access_times.dat' into table t_access_times;
2.4 計算單個使用者的月訪問次數
jdbc:hive2://172.16.208.128:10000>
select username,month,sum(access_time) as access_time from t_access_times group by username,month;
+-----------+----------+---------+--+
| username | month | access_time |
+-----------+----------+---------+--+
| A | 2015-01 | 33 |
| A | 2015-02 | 10 |
| B | 2015-01 | 30 |
| B | 2015-02 | 15 |
+-----------+----------+---------+--+
2.4 上面的表自己跟自己進行inner join方便求總訪問
select A.*,B.* from
(select username,month,sum(access_time) as access_time from t_access_times group by username,month) A
inner join
(select username,month,sum(access_time) as access_time from t_access_times group by username,month) B
on
A.username=B.username
+-------------+----------+-----------+-------------+----------+-----------+--+
| a.username | a.month | a.access_time | b.username | b.month | b.access_time |
+-------------+----------+-----------+-------------+----------+-----------+--+
| A | 2015-01 | 33 | A | 2015-01 | 33 |
| A | 2015-01 | 33 | A | 2015-02 | 10 |
| A | 2015-02 | 10 | A | 2015-01 | 33 |
| A | 2015-02 | 10 | A | 2015-02 | 10 |
| B | 2015-01 | 30 | B | 2015-01 | 30 |
| B | 2015-01 | 30 | B | 2015-02 | 15 |
| B | 2015-02 | 15 | B | 2015-01 | 30 |
| B | 2015-02 | 15 | B | 2015-02 | 15 |
+-------------+----------+-----------+-------------+----------+-----------+--+
2.5 根據當前月份的大小來判斷累計求和並排序
select A.username,A.month,max(A.access_time) access_time,sum(B.access_time) accumulate
from
(select username,month,sum(access_time) as access_time from t_access_times group by username,month) A
inner join
(select username,month,sum(access_time) as access_time from t_access_times group by username,month) B
on
A.username=B.username
where B.month<=A.month
group by A.username,A.month
order by A.username,A.month
+-------------+----------+---------+-------------+--+
| a.username | a.month | access_time | accumulate |
+-------------+----------+---------+-------------+--+
| A | 2015-01 | 33 | 33 |
| A | 2015-02 | 10 | 43 |
| B | 2015-01 | 30 | 30 |
| B | 2015-02 | 15 | 45 |
這裡面的max(A.access_time) 起到一個聚合作用,保留一條結果。
相關推薦
Hive經典面試題——級聯求和(訪客訪問統計報表)
在大資料面試中,Hive知識的考察大部分會問級聯求和,業務場景雖然有很多種,比如說,年收入,月收入統計;訪客訪問次數年統計,月統計。等等。但是基本根源知識是級聯求和,本文就以訪客訪問統計為例。 1、基本需求 根據訪客的每日訪問資訊,進行累計訪問: 輸入資
運維經典面試題之網路篇(一)
1、寫出12.23.34.0/29的掩碼 11111111.11111111.11111111.11111000 255.255.255.248 2、簡述衝突域與廣播域的區別 衝突域:基於osi的第一層物理層。 一個站點向另一個站
leetcode 經典面試題之連結串列 (2. 兩數相加)
兩數相加 給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 單位 數字。 如果,我們將這兩個數起來相加起來,則會返回出一個新的連結串列來表示它們的和。 您可以假設除了數字 0 之外,這兩
leetcode 經典面試題之連結串列(19. 刪除連結串列的倒數第N個節點)
刪除連結串列的倒數第N個節點 給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。 示例: 給定一個連結串列: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點後,連結串列變為 1->
經典面試題golang實現方式(一)
以下所有題目的關鍵資訊都會用【】括起來,我們不對題目進行分析,只給出題目的解決方案;如有疑問請不吝賜教。 題目: 請實現一個演算法,確定一個字串的所有字元【是否全都不同】。這裡我們要求【不允許使用額
自己實戰整理面試題--Http網路相關(帶答案,不斷更新)
*1.描述下網頁一個 Http 請求,到後端的整個請求過程: https://blog.csdn.net/w372426096/article/details/82012229 瀏覽器輸入https:www.koolearn.com這個URL,瀏覽器只知道名字是www.koolearn.
自己實戰整理面試題--多執行緒(帶答案,不斷更新)
一個執行緒兩次呼叫 start() 方法會出現什麼情況?執行緒的生命週期,狀態是如何轉移的? Java 的執行緒是不允許啟動兩次的,第二次呼叫必然會丟擲 IllegalThreadStateException,這是一種執行時異常,多次呼叫 start 被認為是程式設計錯誤。 關於執行緒生
Linux 運維工程師經典面試題合集(不斷更新中 ...)
type ESS 9.png aux 比較 服務器 var 命令 如何 寫在前面的話 做運維以來,關註了很多關於互聯網技術,培訓等亂七八糟的公眾號,時不時的就會推一些各種公司的面試題過來。 大致看了一下,發現自己很多知識要麽遺忘了,要麽很難說出個所
二叉樹的經典面試題分析(三十六)
我們之前學習了二叉樹相關的概念,那麼我們今天來分析下二叉樹中的一些經典面試題。 1、單度結點的刪除  
遞迴求解走臺階問題,一次可以走一步、兩步、三步、...、n步(經典面試題——增強版走臺階)
1、問題描述 現在有一個臺階,一共有n階,你一次性可以走1步、2步、3步、......、n步。問:一共有多少種走法。 2、求解思路 第一步走1階:那麼這種情況下的走法數量和剩下n-1階的走法數量有關;
詳解兩個佇列實現一個棧(python實現——經典面試題)
1、任務詳解 使用兩個佇列資料結構實現一個棧,要求實現棧的出棧和進棧操作。 2、解題思路 push()操作: 為了保證先進
詳解兩個棧實現一個佇列(python實現——經典面試題)
1、題目說明 使用兩個棧結構,實現一個佇列功能,實現佇列的新增元素和彈出元素。 注意: 佇列特點是隻能在佇列尾部新增元素,在佇列頭部刪除元素,先進先出(FIFO/
java經典面試題總結(一)
Java經典面試題總結繼續更新,有需要的小夥伴可以路過不要錯過了!看上一篇面試題總結的反響還是很不錯的,就繼續更新了,也非常感謝各位小夥伴的持續關注…… 這次更偏基礎一些! 1、String 和StringBuffer 的區別? 答:JAVA 平臺提供了兩個類:String 和StringBuffer,
java經典面試題總結(二)
上一次更新的java面試題,很多小夥伴反應很簡單,其實上一期更新的就是更偏基礎的面試題,但這並不意味著,面試就這麼簡單,在java的學習中,有從Java基礎、框架、設計模式等等都是重點學習的點。在本文的面試題分享中,我們循序漸進,儘量挑一些重點的內容來分享! 1、當一個物件被當作引數傳遞到一個方法後,此方法
Java經典面試題總結(三)
本期的java面試題是偏向資料庫方面的,對相關技術知識匱乏的,或者對這方面不大自信的同學,面試之前可以參考一下這套題,這只是節選,試運營一下,如果不能滿足你們的需求,可以直接評論留言! 1、檢視的優缺點答:優點: 1)對資料庫的訪問,因為檢視可以有選擇性的選取資料庫裡的一部分。 2 )使用者通過簡單的查詢可
java經典面試題:單鏈表反轉問題詳解(含遞迴法)
java經典面試題:單鏈表反轉問題,有兩種方法,一種為迴圈遍歷法,一種遞迴法。 1、迴圈遍歷法 首先設定三個節點,把當前節點的下一節點指向它前面的節點,此時你會發現指標鏈會斷,所以要先把它後面一個節點用nextNode儲存下來,之後把節點向後移動遍歷即可。 程式碼如下: //
HTTP協議【詳解】——經典面試題(轉載)
http請求由三部分組成,分別是:請求行、訊息報頭、請求正文 HTTP(超文字傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連線方式,HTTP1.1版本中給出一種持續連線的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。
經典面試題(1)
將一個字元陣列的內容為:“student a am i”改為“i am a student” 要求: 1. 不能使用庫函式; 2.只能開闢有限個空間(空間個數和字串的長度無關)。 演算法思路:先將字元陣列"student a am i"逆置變為"i ma a
js經典面試題(一)
題目: function Foo(){ getName = function (){ alert(1); } return this; } Foo.getName = function(){ alert(2); }
軟體測試經典面試題(面試必看)
引用與指標有什麼區別? 1) 引用必須被初始化,指標不必。 2) 引用初始化以後不能被改變,指標可以改變所指的物件。 3) 不存在指向空值的引用,但是存在指向空值的指標。 Internet.採用哪種網路協議?該協議的主要層次結構?Internet.實體地址和IP.地址轉