原文連結:深入解讀 Flink SQL 1。13功能點,不入坑血虧!
自從Flink 社群更新Flink1。13版本之後,博主作為一名Flink開發人員,對Flink SQL 1。13進行了探索,接下來將以四個部分對新增的內容進行展開介紹。
在整個Flink 1。13版本下,來自全球各地的開發人員共解決ISSUES 1000+,提交PR 200+,針對Flink Table/ SQL模組,解決ISSUES 400+ 。
其中Flink Table / SQL 新增的功能模組主要分為以下5大模組
Window TVF 包含四部分內容:
Window TVF 語法
近實時累計計算
Window 效能最佳化
多維資料分析
(1) Window TVF 語法
1。13前是一個特殊的GroupWindowFunction;
1。13 用Table-Valued Function 進行了語法標準化;
完整的關係代數表達
輸入是一個關係,輸出也是一個關係
每個關係對應一個數據集
支援TUMBLE,HOP WINDOW
SESSION WINDOW 預計1。14支援
新增CUMULATE WINDOW
(2) 近實時累計計算
案例: 每10分鐘統計一次當天的累計使用者UV
結果更精準
追資料時,曲線不會跳變
(3) Window 效能最佳化
記憶體最佳化:
透過記憶體預分配 ,快取Window的資料,透過Window WaterMark觸發計算。
切片最佳化:
將Window切片,儘可能複用已計算結果,如hop window,cumulate window。
運算元最佳化:
window支援local-global 最佳化,同時支援 count(distinct)自動解熱點最佳化。
遲到資料:
支援遲到資料計算到後續分片,保證資料準確性。
在 count(distinct)場景會有更好的效能提升
(4) 多維資料分析
GROUPING SETS
ROLLUP
CUBE
支援Window Top-N
2、FLIP-162: 時區和時間函式
時區和時間函式包含四部分內容:
時區問題分析
時間函式糾正
時間型別使用
夏令時支援
(1) 時區問題分析
1、處理時間視窗剛好晚8個小時
2、BIGINT轉TIMESTAMP是否隱含時區資訊
3、watermark + 8h 問題
4、SQL 時區問題
5、 CURRENT_DATE函式問題
6、CURRENT_DATE,CURRENT_TIMESTAMP 時區問題
7、long 轉 timestamp 怎麼做
8、Hive分割槽提交的時區差問題
9、PROCTIME()函式語義問題
10、毫秒值如何宣告成時間型別
時區問題原因:
PROCTIME()應該考慮時區,但未考慮時區
CURRENT_TIMESTAMP/CURRENT_TIME/CURRENT_DATE/NOW()未考慮時區
TIMESTAMP型別不考慮時區,但使用者希望是本地時區的時間
支援TIMESTAMP_LTZ型別
TIMESTAMP VS TIMESTAMP_LTZ
(2) 時間函式糾正
訂正 PROCTIME() 函式
訂正 CURRENT_TIMESTAMP / CURRENT_TIME / CURRENT_DATE / NOW() 函式
解決 processing time window 時區問題
訂正 Streaming 和 Batch 模式下函式取值方式
Streaming 模式 per-record 計算,Batch 模式在 query-start 計算:
LOCALTIME
LOCALTIMESTAMP
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
NOW()
Stream 模式 Batch 模式都是per-record 計算:
CURRENT_ROW_TIMESTAMP()
PROCIME()
(3) 時間型別使用
Event time 定義在 TIMESTAMP 列上
適用於源資料包含字串的時間(如:2021-04-15 14:00:00)場景
Event time 定義在 TIMESTAMP_LTZ 列上
適用於源資料包含long值的時間(如:1621649473000)場景,以及夏令時時區使用者
(4) 夏令時支援
Flink 支援在TIMESTAMP_LTZ列上定義時間屬性,Flink SQL 在window處理時結合TIMESTAMP和 TIMESTAMP_LTZ, 優雅地支援了夏令時。
在洛杉磯時區,[2021-03-14 00:00,2021-03-14 00:04]視窗會收集
3
個小時的資料
在非夏令時區,[2021-03-14 00:00,2021-03-14 00:04]視窗會收集
4
個小時的資料
3、FLIP-152: 提升Hive語法相容性
支援常用的 Hive DML,DQL語法
SORT/CLUSTER/DISTRIBUTE BY
Group By
Join
Union
LATERAL VIEW
Window Functions
SubQueries
CTE
INSERT INTO dest schema
Implicit type convesions
支援常用的 Hive DML,DQL語法
Hive dialect 需要配合HiveCatalog 和 Hive Module 一起使用
Hive Module 提供了Hive 所有內建函式,載入後可以直接訪問
Hive dialect 支援建立/刪除 Catalog函式
4、FLIP-163: 改進 SQL Client
SQL Client 支援指定檔案初始化
Deprecate YAML 檔案,不推薦使用 YAML檔案初始化
SQL Client 支援指定檔案初始化
SQL Client 支援STATEMENT SET
5、FLIP-136: 增強DataStream 和 Table 的轉換
支援DataStream 和Table 轉換時傳遞 event Time 和 watermark
支援Changelog 資料流在Table 和 DataStream 間互相轉換
Flink 1.13 版本包含:
支援Window TVF
時區和時間函式
提升Hive相容性
改進SQL Client
增強DataStream轉換
Flink 1.14 版本計劃:
刪除Legacy Planner
完善Window TVF
提升 Schema Handling
增強 Flink CDC
為回饋廣大計算機愛好者,本博主專門整理了關於Java、大資料、演算法、前端、人工智慧、作業系統、網路等所學知識的書籍,如果看到此博文的小夥伴們,覺得對你有幫助,就快速領取吧!連結如下:
免費領書 | 大資料技術書籍全部免費領取!!!
強烈建議收藏!| 程式設計師必須擁有的書籍
作者簡介:3分鐘秒懂大資料,網際網路大廠擔任大資料演算法開發工程師,秋招7offer。
CSDN連結:
逆流而上Mr李_在IT中穿梭旅行_CSDN部落格-資料結構,java,Flink領域博主