Flink SQL項目實錄


一、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));


免責聲明!

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



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