1. 程式人生 > >Hive進階(二)

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到當前行。