日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hive窗口函数使用详解

發布時間:2023/12/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.t0411

rows

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實例效果一樣,但更簡潔

-- 計算每個id從開始到終點的集合 -- 參數講解 -- partition by id:按照id分組 -- order by mod_date:按照日期進行排序 -- UNBOUNDED PRECEDING:從起點開始 -- UNBOUNDED FOLLOWING:到終點 select *,collect_set(src) over(partition by id order by mod_date asc rows between UNBOUNDED PRECEDING and CURRENT ROW),collect_set(src) over(partition by id order by mod_date asc rows between UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING) from t0411;

實例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:

-- 查詢顧客修改時間,以及下次修改時間(電商網站常用于求頁面跳轉的前后時間) -- 參數詳解: -- partition by name:按照姓名分組 -- order by mod_date:按照時間排序 -- lag(mod_date,1):返回當前mod_date行的前一行 -- lead(mod_date,1):返回當前mod_date行的后一行 select *,lag(mod_date,1) over(partition by id order by mod_date) ,lead(mod_date,1) over(partition by id order by mod_date) from t0411;


測試數據見另一篇博客

總結

以上是生活随笔為你收集整理的hive窗口函数使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。