hive窗口函数使用详解
生活随笔
收集整理的這篇文章主要介紹了
hive窗口函数使用详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ntile
- 用于將分組數據按照順序切分成n片,返回當前記錄所在的切片值。
- 經常用來取前30% 帶有百分之多少比例的記錄什么的
注意:
NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY id ORDER BY mod_date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
實例:
select *,ntile(3) over(partition by id order by mod_date) from t0411;collect_set
求多行的集合
實例:
select id, mod_date,src,cur,row_number() over(partition by id order by mod_date asc) as num,--使集合有序collect_set(src) over(partition by id order by mod_date asc ) as srcs1,collect_set(cur) over(partition by id ) as srcs2 from db01.t0411rows
rows函數:
current row:當前行
n PRECEDING:往前n行
n FOLLOWING:往后n行
UNBOUNDED:起點
UNBOUNDED PRECEDING:從前面起點
UNBOUNDED FOLLOWING:到后面終點
LAG(col,n):往前的第n行
LEAD(col,n):往后的第n行
實例1:
-- 計算每個id從開始到當前時間的總的修改次數 -- 參數講解 -- partition by id:按照id分組 -- order by mod_date:按照日期進行排序 -- UNBOUNDED PRECEDING:從起點開始 -- CURRENT ROW:到當前行 select *,count(id) over(partition by id order by mod_date rows between UNBOUNDED PRECEDING and CURRENT ROW) from t0411;實例2:
與collet_set實例效果一樣,但更簡潔
實例2:
-- 計算相鄰三行的值(第一行計算當前行 + 后一行; 最后一行計算當前行 + 前一行) -- 參數講解 -- order by mod_date:按照日期進行排序 -- 1 preceding:當前行的前1行 -- 1 following:當前行的后一行 select *,count(id) over(order by mod_date rows between 1 preceding and 1 following) from t0411;
實例3:
測試數據見另一篇博客
總結
以上是生活随笔為你收集整理的hive窗口函数使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel解决线性规划求解问题
- 下一篇: 思科OSPF详细配置命令过程