Flink 窗口函數


         Flink常用的3種窗口函數:

         滾動窗口:窗口數據有固定的大小,窗口中的數據不會疊加;

         滑動窗口:窗口數據有固定大小,並且有生成間隔;

        會話窗口:窗口數據沒有固定的大小,根據用戶傳入的參數進行划分,窗口數據無疊加;

       一、 滾動窗口

             特點:有固定大小、窗口中的數據不會重疊

 1 SELECT 
 2 
 3     [gk],
 4 
 5     [TUMBLE_START(timeCol, size)], 
 6 
 7     [TUMBLE_END(timeCol, size)], 
 8 
 9     agg1(col1), 
10 
11     ... 
12 
13     aggn(colN)
14 
15 FROM Tab1
16 
17 GROUP BY [gk], TUMBLE(timeCol, size)
View Code

如計算每個用戶每天的訂單數量:

SELECT user, TUMBLE_START(timeLine, INTERVAL '1' DAY) as winStart, SUM(amount) FROM Orders GROUP BY TUMBLE(timeLine, INTERVAL '1' DAY), user;

其中,TUMBLE_START 和 TUMBLE_END 代表窗口的開始時間和窗口的結束時間,TUMBLE (timeLine, INTERVAL '1' DAY) 中的 timeLine 代表時間字段所在的列,INTERVAL '1' DAY 表示時間間隔為一天。

    二、滑動窗口

           特點:滑動窗口有固定的大小,與滾動窗口不同的是滑動窗口可以通過 slide 參數控制滑動窗口的創建頻率。需要注意的是,多個滑動窗口可能會發生數據重疊:

 

滑動窗口的語法與滾動窗口相比,只多了一個 slide 參數:

 1 SELECT 
 2 
 3     [gk], 
 4 
 5     [HOP_START(timeCol, slide, size)] ,
 6 
 7     [HOP_END(timeCol, slide, size)],
 8 
 9     agg1(col1), 
10 
11     ... 
12 
13     aggN(colN) 
14 
15 FROM Tab1
16 
17 GROUP BY [gk], HOP(timeCol, slide, size)
View Code

如:每間隔一小時計算一次過去 24 小時內每個商品的銷量:

SELECT product, SUM(amount) FROM Orders GROUP BY HOP(rowtime, INTERVAL '1' HOUR, INTERVAL '1' DAY), product

上述案例中的 INTERVAL '1' HOUR 代表滑動窗口生成的時間間隔

三、會話窗口

      定義:會話窗口定義了一個非活動時間,假如在指定的時間間隔內沒有出現事件或消息,則會話窗口關閉

 

SELECT 

    [gk], 

    SESSION_START(timeCol, gap) AS winStart,

    SESSION_END(timeCol, gap) AS winEnd,

    agg1(col1),

     ... 

    aggn(colN)

FROM Tab1

GROUP BY [gk], SESSION(timeCol, gap)
View Code

如:需要計算每個用戶過去 1 小時內的訂單量

SELECT user, SESSION_START(rowtime, INTERVAL '1' HOUR) AS sStart, SESSION_ROWTIME(rowtime, INTERVAL '1' HOUR) AS sEnd, SUM(amount) FROM Orders GROUP BY SESSION(rowtime, INTERVAL '1' HOUR), user

 參考文章:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=81#/detail/pc?id=2040


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM