Hive 視窗分析函式

2022-01-10 08:23:45 字數 2847 閱讀 9242

1.lag(col,n,default) 用於統計視窗內往上第n行值

第乙個引數為列名,第二個引數為往上第n行(可選,預設為1),第三個引數為預設值(當往上第n行為null時候,取預設值,如不指定,則為null)

2.lead(col,n,default) 用於統計視窗內往下第n行值

第乙個引數為列名,第二個引數為往下第n行(可選,預設為1),第三個引數為預設值(當往下第n行為null時候,取預設值,如不指定,則為null)

3.first_value(col,false) 用於統計視窗內截止到當前行,第乙個出現的值

第乙個引數為列名,第二個引數是否跳過null值(可選,預設為false)

4.last_value(col,false)用於統計視窗內截止到當前行,最後乙個出現的值

第乙個引數為列名,第二個引數是否跳過null值(可選,預設為false)

注:實踐中多個字段最終取值可以應用到last_value,例如

select vid

,last_value(a,true) over(partition by vid order by `time` ) a

,last_value(b,true) over(partition by vid order by `time` ) b

,last_value(c,true) over(partition by vid order by `time` ) c

,last_value(d,true) over(partition by vid order by `time` ) d

5.over子句中的partition by和order by

over(partition by col1[,col2...] )

over(order by by col1[,col2...] )

over(partition by col1[,col2...]  order by by col1[,col2...] )

6.over子句中的window子句(clause)

over with a window specification. windows can be defined separately in a window clause. window specifications support the following formats:

(rows | range) between ... preceding and ... following

(rows | range) between ... preceding and ... preceding

(rows | range) between ... following and ... following
when order by is specified with missing window clause, the window specification defaults torange between unbounded preceding and current row.

when both order by and window clauses are missing, the window specification defaults torow between unbounded preceding and unbounded following.

range是邏輯視窗,是指定當前行對應值的範圍取值

rows是物理視窗,即根據order by 子句排序後,取的前n行及後n行的資料計算(與當前行的值無關,只與排序後的行號相關)

(unbounded | [num]) preceding:從分割槽第一行頭開始,則為 unbounded。 n為:相對當前行向前的偏移量
(unbounded | [num]) following:到該分割槽結束,則為 unbounded。n為:相對當前行向後的偏移量
current row:當前行,偏移量為0
1.標準聚合函式

2.rank 

排名不連續

3.dense_rank

排名連續,但是有重複,保證同乙個值對應同乙個排名。

4.row_number

排名連續,無重複,不保證同乙個值對應同乙個排名。

5.cume_dist(累積分布)

小於等於當前值的行數 與 分組內總行數的佔比

6.percent_rank

排名百分比,rank-1/總行數-1

7.ntile

離散化分割槽

函式特點

資料結果(公升序,桶數=2)

rank

排名不連續

2,2,5

1,1,3

dense_rank

排名連續,但是有重複

2,2,5

1,1,2

row_number

排名連續,無重複

2,2,5

1,2,3

cume_dist

佔比連續,無重複;小於等於當前值的行數 與 分組內總行數的佔比

2,2,5

0.33,0.66,1.0

percent_rank

百分比有重複,rank-1/總行數-1

2,2,5

.0,.0,1.0

ntile(n)

等量(頻)離散化,n是分桶數

2,2,2,3

1,1,2,2

累積,均值(歸一化),分組取topk,累和佔比,離散化

Hive 視窗函式與分析函式

描述lag lag 視窗函式返回分割槽中當前行之前行 可以指定第幾行 的值。如果沒有行,則返回null。lead lead 視窗函式返回分割槽中當前行後面行 可以指定第幾行 的值。如果沒有行,則返回null。first value first value視窗函式返回相對於視窗中第一行的指定列的值。l...

Hive視窗函式

1 定義 視窗函式屬於sql中比較高階的函式 mysql從8.0版本才支援視窗函式,5.6,5.7都沒有視窗函式 oracle 裡面一直支援視窗函式 hive也支援視窗函式 以下函式才是視窗函式 視窗函式 13個 lead lead col,n,default val 往後第n行資料 col 列名 ...

hive 視窗函式

hive高階函式 row number rank dense rank 這三個視窗函式的使用場景非常多 例子 員工表中,求每個崗位薪水前兩名的員工資訊 name,入職日期,sal row number over partition by job order by sal desc 這個函式會返回組內...