Flink SQL項目實錄
- 2019 年 12 月 24 日
- 筆記
一、Flink SQL層級
為Flink最高層的API,易於使用,所以應用更加廣泛,eg. ETL、統計分析、實時報表、實時風控等。
Flink SQL所處的層級:

二、Flink聚合:
1、Window Aggregate
內置了三種常用的窗口:
TUMBLE(time, INTERVAL '5' SECOND); //類似於flink 中間層 DataStream API 中 window中的滾動窗口
HOP(time, INTERVAL '10' SECOND, INTERVAL '5' SECOND); //類似於flink 中間層 DataStream API中 window的滑動窗口,每10秒中統計最近5秒的數據
SESSION(time, INTERVAL '5' SECOND)
time有兩種格式的時間,一種是proctime也就是系統時間, 另一種是rowtime。

2、 Group Aggregate

繼續加入數據時:

繼續進入數據:

結果是一個不斷更新的過程。
Window Aggregate 與 Group Aggregate 的區別
1)、Window Aggregate 與 Group Aggregate 是有一些明顯的區別的。其主要的區別是,Window Aggregate 是當window結束時才輸出,其輸出的結果是最終值,不會再進行修改,其輸出流是一個 Append 流。
而 Group Aggregate 是每處理一條數據,就輸出最新的結果,其結果是在不斷更新的,就好像數據庫中的數據一樣,其輸出流是一個 Update 流。
2)、另外一個區別是,window Aggregate 由於有 watermark ,可以精確知道哪些窗口已經過期了,所以可以及時清理過期狀態,保證狀態維持在穩定的大小。
而 Group Aggregate 因為不知道哪些數據是過期的,所以狀態會無限增長,這對於生產作業來說不是很穩定,所以建議對 Group Aggregate 的作業配上 State TTL 的配置。
對比圖:

項目代碼設置:
tEnv.getConfig().setIdleStateRetentionTime(org.apache.flink.api.common.time.Time.minutes(1),org.apache.flink.api.common.time.Time.minutes(10));