bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

如何擴展FlinkSQL實現流與維表的join

如何擴展FlinkSQL實現流與維表的join,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

成都創新互聯是一家集網站建設,臺安企業網站建設,臺安品牌網站建設,網站定制,臺安網站建設報價,網絡營銷,網絡優化,臺安網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

拓展FlinkSQL實現流與維表的join

如何擴展FlinkSQL實現流與維表的join

FlinkStreamSQL 已經開源在Github上 目前已獲380+Star

1、為什么要擴展FlinkSQL?

實時計算需要完全SQL化

SQL是數據處理中使用最廣泛的語言。它允許用戶簡明扼要地聲明他們的業務邏輯。大數據批計算使用SQL很常見,但是支持SQL的實時計算并不多。其實,用SQL開發實時任務可以極大降低數據開發的門檻,在袋鼠云數棧-實時計算模塊,我們決定實現完全SQL化。

數據計算采用SQL的優勢

? 聲明式。用戶只需要表達我想要什么,至于怎么計算那是系統的事情,用戶不用關心。

? 自動調優。查詢優化器可以為用戶的 SQL 生成最有的執行計劃。用戶不需要了解它,就能自動享受優化器帶來的性能提升。

? 易于理解。很多不同行業不同領域的人都懂 SQL,SQL 的學習門檻很低,用 SQL 作為跨團隊的開發語言可以很大地提高效率。

? 穩定。SQL 是一個擁有幾十年歷史的語言,是一個非常穩定的語言,很少有變動。所以當我們升級引擎的版本時,甚至替換成另一個引擎,都可以做到兼容地、平滑地升級。

實時計算還需要流與維表的JOIN

如何擴展FlinkSQL實現流與維表的join

在實時計算的世界里不只是流與流的JOIN

還需要流與維表的JOIN

在實時計算的世界里不只是流與流的JOIN,還需要流與維表的JOIN。在去年,袋鼠云數棧V3.0版本研發期間,當時最新版本——flink1.6中FlinkSQL,已經將SQL的優勢應用到Flink引擎中,但還未支持流與維表的JOIN。

關于FlinkSQL

FlinkSQL于2017年7月開始面向阿里巴巴集團開放流計算服務的,雖然是一個非常年輕的產品,但是到雙11期間已經支撐了數千個作業,在雙11期間,Blink 作業的處理峰值達到了5+億每秒,而其中僅 Flink SQL 作業的處理總峰值就達到了3億/秒。

參考鏈接:https://yq.aliyun.com/articles/457438

這里先解釋下什么是維表;維表是動態表,表里所存儲的數據有可能不變,也有可能定時更新,但是更新頻率不是很頻繁。在業務開發中一般的維表數據存儲在關系型數據庫如MySQL,oracle等,也可能存儲在hbase,redis等NoSql數據庫。


2、所以要用FlinkSQL實現流與維表的join 分兩步:

一、用Flink api實現維表的功能

要實現維表功能就要用到 Flink Aysnc I/O 這個功能,是由阿里巴巴貢獻給Apache Flink的。

如何擴展FlinkSQL實現流與維表的join

Async I/O 是由阿里巴巴貢獻給社區的,于1.2版本引入,主要目的是為了解決與外部系統交互時網絡延遲成為了系統瓶頸的問題。具體介紹可以看這篇文章:http://wuchong.me/blog/2017/05/17/flink-internals-async-io/

對應到Flink 的api就是RichAsyncFunction 這個抽象類,繼層這個抽象類實現里面的open(初始化),asyncInvoke(數據異步調用),close(停止的一些操作)方法,最主要的是實現asyncInvoke 里面的方法。

流與維表的join會碰到兩個問題:

第一個是性能問題。因為流速要是很快,每一條數據都需要到維表做下join,但是維表的數據是存在第三方存儲系統,如果實時訪問第三方存儲系統,不僅join的性能會差,每次都要走網絡io;還會給第三方存儲系統帶來很大的壓力,有可能會把第三方存儲系統搞掛掉。

所以解決的方法就是維表里的數據要緩存,可以全量緩存,這個主要是維表數據不大的情況,還有一個是LRU緩存,維表數據量比較大的情況。

如何擴展FlinkSQL實現流與維表的join

LRU維表的實現

第二個問題是流延遲過來的數據這么跟之前的維表數據做關聯。這個就涉及到維表數據需要存儲快照數據,所以這樣的場景用HBase 做維表是比較適合的,因為HBase 是天生支持數據多版本的。

如何擴展FlinkSQL實現流與維表的join

ALL維表的實現

二、解析流與維表join的SQL語法轉化成底層的FlinkAPI

因為FlinkSQL已經做了大部分SQL場景,我們不可能在去解析SQL的所有語法,在把他轉化成底層FlinkAPI。

所以我們做的就是解析SQL語法,來找到join表里有沒有維表,如果有維表,那我們會把這個join的維表的語句單獨拆來,用Flink的TableAPI和StreamAPi 生成新DataStream,在把這個DataStream與其他的表在做join這樣就能用SQL來實現流與維表的join語法了。

SQL解析的工具就是用Apache calcite,Flink也是用這個框架做SQL解析的。所以所有語法都是可以解析的。

1. DEMO SQL

如何擴展FlinkSQL實現流與維表的join

2. Calcite解析Insert into語句,拆分出子語句

如何擴展FlinkSQL實現流與維表的join


3. Calcite繼續解析select語句

如何擴展FlinkSQL實現流與維表的join

如何擴展FlinkSQL實現流與維表的join

Calcite繼續解析select語句

如何擴展FlinkSQL實現流與維表的join

Calcite繼續解析select語句

關于如何擴展FlinkSQL實現流與維表的join問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯行業資訊頻道了解更多相關知識。

網站欄目:如何擴展FlinkSQL實現流與維表的join
本文URL:http://vcdvsql.cn/article10/pdigdo.html

成都網站建設公司_創新互聯,為您提供搜索引擎優化網站營銷微信公眾號網站建設全網營銷推廣動態網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司