hive視窗函式 over

2021-09-21 18:20:11 字數 1245 閱讀 4589

功能:既能顯示聚合前的資料 ,又能顯示聚合後的函式

執行順序:最後一步執行 ,僅僅位於order by 之前

select查詢中 存在多個視窗函式時 他們之間是沒有影響的,每個視窗應用自己規則

函式內容:

over():

partition by :分組(在分組內進行操作)。

order by :預設從起點行到當前行。

eg:

window :rows between ... and ...

preceding ---往前

following -----往後

current row --當前行

unbounded---起點

主要序列函式不支援window子句:

ntile(n):將分組資料按照順序分成n片,返回當前切片值

假如我們想要每位顧客購買金額前1/3的交易記錄:

select name,orderdate,cost,

ntile(3) over() as sample1 , --全域性資料切片

ntile(3) over(partition by name), -- 按照name進行分組,在分組內將資料切成3份

ntile(3) over(order by cost),--全域性按照cost公升序排列,資料切成3份

ntile(3) over(partition by name order by cost ) --按照name分組,在分組內按照 cost公升序排列,資料切成3份

from t_window

row_number,rank,dense_rank:

- row_number()從1開始,按照順序,生成分組內記錄的序列,row_number()的值不會存在重複,當排序的值相同時,按照表中記錄的順序進行排列

- rank() 生成資料項在分組中的排名,排名相等會在名次中留下空位

- dense_rank() 生成資料項在分組中的排名,排名相等會在名次中不會留下空位

lag:返回上行的資料

lead:返回下行的資料

first_valve:

last_value

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 這個函式會返回組內...

hive視窗函式 Hive sql視窗函式原始碼分析

在了解了視窗函式實現原理 spark hive中視窗函式實現原理覆盤 和 sparksql比hivesql優化的點 視窗函式 之後,今天又擼了一遍hive sql 中視窗函式的原始碼實現,寫個筆記記錄一下。簡單來說,視窗查詢有兩個步驟 將記錄分割成多個分割槽 然後在各個分割槽上呼叫視窗函式。傳統的 ...