有不少同學一聽這個標題,hive窗口函數是什么鬼?沒聽說過還有窗口函數這個東西啊,其實它的用處可大了,下面聽小千慢慢道來。
hive窗口函數
窗口函數指定了函數工作的數據窗口大小(當前行的上下多少行),這個數據窗口大小可能會隨著行的變化而變化。
窗口函數和聚合函數區別
窗口函數對于每個組返回多行,組內每一行對應返回一行值。聚合函數對于每個組只返回一行。
在日常的開發中常用那些類型函數??
1、字符串操作函數?split、concat、ifnull、cast
2、聚合函數 : hive適用于分析,所以常用。
3、時間函數 : 數倉的特征隨時間變化而變化,所以時間也特別多
4、窗口函數:sum() over() 、 count() over() 、 排名函數
了解哪些窗口函數,都是什么意思?
sum(col) over() : 分組對col累計求和
count(col) over() : 分組對col累計
min(col) over() : 分組對col求最小
max(col) over() : 分組求col的最大值
avg(col) over() : 分組求col列的平均值
first_value(col) over() : 某分區排序后的第一個col值
last_value(col) over() : 某分區排序后的最后一個col值 lag(col,n,DEFAULT) : 統計往前n行的col值,n可選,默認為1,DEFAULT當往上第n行為NULL時候,取默認值,如不指定,則為NULL
lead(col,n,DEFAULT) : 統計往后n行的col值,n可選,默認為1,DEFAULT當往下第n行為NULL時候,取默認值,如不指定,則為NULL
ntile(n) : 用于將分組數據按照順序切分成n片,返回當前切片值。注意:n必須為int類型。
over(分組 排序 窗口) 中的order by后的語法: 1、物理窗口(真實往上下移動多少行rows between):
CURRENT ROW | UNBOUNDED PRECEDING | [num] PRECEDING AND UNBOUNDED FOLLOWING | [num] FOLLOWING| CURRENT ROW
如: over(partition by col order by rows between 1 preceding and 1 fllowing)
邏輯窗口(滿足條件上下多少行):(金融行業、保險行業、p2p等)
range between [num] PRECEDING AND [num] FOLLOWING
如: over(partition by col order by range between 5 preceding and 5 fllowing)
注意:窗口函數一般不和group by搭配使用。
以上就是關于大數據hive窗口函數的介紹了,最后歡迎對大數據感興趣的同學了解一下我們的大數據開發培訓課程,內容包含Linux&&Hadoop生態體系、大數據計算框架體系、云計算體系、機器學習&&深度學習。現在咨詢還能免費領取大數據學習資料,趕緊來找在線老師申領吧。