Hive進階(二)
上次課複習:
1. hive的view非常簡單,只是元資料層面,所以hdfs下根本找不到的。
view主要用於複雜邏輯的隱藏
2. 側檢視
行轉列專置
3. select 用於查詢後面可以跟where limit等條件
多用Common Table Expression來代替子查詢,思路清晰
4. join
內連線 左外連線 右外連線 全連線
in not in
exists
5.縱向合併union
union去重
union all不去重,速度快
6. hive資料載入和交換
load 相當於剪下,只能執行一次
insert into/overwrite values ( ,,)
insert into as select ....
還可以form 從一個公共表多次插入
7. order by比較慢 儘量提前過濾資料
SORT BY 單臺機器上排序
DISTRIBUTE BY 對資料分組到不同機器上
8. GROUP BY 侷限性在於select的列必須出現在GROUP BY後面
having 篩選聚合函式的條件
having和where的區別,有些類似。
——————————————————————————————————————————
新課:
1. GROUPING SETS
這東西其實非常簡單,就是把幾個group by語句合在一起寫了。
(a,b)就是a和b同時,a就是隻能select a ,所以b被我置為null。
還有()就是a,b都置為null。
2. CUBE/ROLLUP
CUBE就是所有group by後面列的組合
ROLLUP(向上聚合)
按層次表達出來,我只表達結構,
所以就是隻有(a,b,c)和(a,b)和a和null了
1、2不做重點掌握
3.Window Functions(視窗函式) 重要
優勢:相比GROUP BY沒有對SELECT的列的限制。
主要講排序、聚合和分析
視窗函式用法
Function() OVER
// OVER確定聚合函式範圍
例子
排序類:
其實這些非常簡單,我按行來解釋:
前2行不說了
ROW_NUMBER()最重要
3. ROW_NUMBER() OVER () AS row_num //整體給出行號,不按列分割槽 不排序
4. RANK() OVER (PARTITION BY dept_num ORDER BY salary) AS rank // 分部門對工資排名
5.DENSE_RANK() OVER 緊湊的排名,比如並列第一之後的人,還是第二名,而不是標為第三名。
6. PERCENT_RANK() OVER 百分比排名 計算方法是 n-1/(total-1)
7. NTILE(2) OVER 按照部門對工資排序 並分出2個桶
聚合類:
COUNT
SUM
AVG
MAX/MIN
Hive 2.1.0新功能:按照聚合函式排序
ORDER BY sum(b)
例子:
分析類:
LEAD就是網上頂,前面的資料被頂掉2個。
LAG就是往後頂。括號裡第三個屬性都是表示如果沒有這個值,預設填為NULL,你可以手動設定為0.
FIRST VALUE和LAST_VALUE 只有加了RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWNG
才會生效,篩選出第一個值和最後一個值。
這些都不是重點,用著用著就會了,別放太多精力,知道是幹嘛的就行,用到再說。
重點來了!
視窗函式:它分為ROW和RANGE兩種
行類視窗
寫法就是ROWS BETWEEN <start_expr> AND <end_expr>
其中這兩個引數可以選擇這三種,分別代表 從最上面開始/到最下面結束、當前行開始、當前行前或後的N行開始。
例子:ROW Windows
結果:
Range Windows例子
跟row原理一樣 只不過RANGE就是在那個基礎上,比如說當前行減100到當前行。