1. 程式人生 > >Hive窗口函數

Hive窗口函數

列名 lar hit ack apache fff tro 地址 lang

參考地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

環境準備:

CREATE TABLE `wtab`(
  `a` int, 
  `b` int, 
  `c` int);

  

數據:

技術分享圖片

1、LEAD函數

LEAD (scalar_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause); The LEAD function is used to return data from the next row.

lead函數主要是返回窗口中列名為:scalar_expression偏移為offset的值,如果不存在則返回NULL,窗口使用over劃分,具體劃分參考示例:

 SELECT a, LEAD(a,1,9999) OVER (PARTITION BY b ORDER BY C) from wtab;

PARTITION BY 表示根據字段b劃分窗口,就是b值相同的劃分到一個窗口,ORDER BY 表示窗口內部按照字段C進行排序。此條查詢結果為:

技術分享圖片

以b=1為例講解,b相同的都在一個窗口按照c排序之後結果為:

技術分享圖片

這個就是b=1的窗口,a=1下面offset=1的數據為11,所以查詢結果為:1 11 ;其他同理。

2、LAG函數

LAG (scalar_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause); The LAG function is used to access data from a previous row.

lag函數與lead函數相反,是向上offset取row,如果row不存在則返回默認值。示例:

 SELECT a, LAG(a, 2, 66666) OVER (PARTITION BY b ORDER BY C) from wtab;

根據字段b劃分窗口之後向上offset=2取row,沒有的話返回6666

技術分享圖片

Hive窗口函數