亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Flink關系型API

發布時間:2021-11-22 17:18:06 來源:億速云 閱讀:155 作者:柒染 欄目:大數據

這篇文章給大家介紹如何理解Flink關系型API,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

在接觸關系型API之前,用戶通常會采用DataStream、DataSet API來編寫Flink程序,它們都提供了豐富的處理能力,以DataStream為例,它有如下這些優點:

  • 富有表現力的流處理,包括但不限于:轉換數據,更新狀態,定義窗口、聚合,事件時間語義,有狀態且保證正確性等;

  • 高度自定義的窗口邏輯:分配器、觸發器、逐出器以及允許延遲等;

  • 提升與外部系統連接能力的異步I/O接口;

  • ProcessFunction給予用戶訪問時間戳和定時器等低層級的操作能力;

但它同時也存在一些使用壁壘導致它并不適合所有用戶:

  • 寫DataStream程序并非總是很容易:流處理技術發展很快,一些概念層出不窮,比如,時間、狀態、窗口等;

  • 需要特殊的知識與技巧:持續的流計算應用需要特殊的要求以及Java/Scala的編程經驗;

用戶希望更專注于他們的業務邏輯,于是Flink提供了更具表達能力的API——關系型API。關系型API有很多好處:

  • 它是聲明式的,用戶只需告知它們想要的,系統決定如何計算,用戶不必指定具體的實現細節;

  • 查詢可被高效地優化和執行,相比之下底層API中的UDF則難于優化且需要人工調優;

  • 大眾(尤其是數據分析領域的從業者)對SQL的了解和熟悉程度要遠高于特定的編程語言;

關系型API其實是Table API和SQL API的統稱:

  • Table API:為Java&Scala SDK提供類似于LINQ(語言集成查詢)模式的API(自0.9.0版本開始)

  • SQL API:支持標準SQL(自1.1.0版本開始)

關系型API作為一個統一的API層,既能夠做到在Batch模式的表上進行可終止地查詢并生成有限的結果集,同時也能做到在Streaming模式的表上持續地運行并生產結果流,并且在兩種模式的表上的查詢具有相同的語法跟語義。這其中最重要的概念是Table,Table與DataSet、DataStream緊密結合,DataSet和DataStream都可以很容易地轉換成Table,同樣轉換回來也很方便。下面的代碼段展示了采用關系型API編寫Flink程序的示例:

val tEnv = TableEnvironment.getTableEnvironment(env)
//配置數據源
val customerSource = CsvTableSource.builder()
 .path("/path/to/customer_data.csv")
 .field("name", Types.STRING).field("prefs", Types.STRING)
 .build()

//將數據源注冊為一個Table
tEnv.registerTableSource(”cust", customerSource)

//定義你的table程序(在一個Flink程序中Table API和SQL API可以混用)
val table = tEnv.scan("cust").select('name.lowerCase(), myParser('prefs))
val table = tEnv.sql("SELECT LOWER(name), myParser(prefs) FROM cust")

//轉換為DataStraem
val ds: DataStream[Customer] = table.toDataStream[Customer]

關系型API架構在基礎的DataStream、DataSet API之上,其整體層次關系如下圖所示:

如何理解Flink關系型API

它們提供等價的特性集合,并且可以在同一個程序中混合使用,兩者都與Flink的core API緊密集成。從上圖來看,上層有兩種API,而其下有兩個基礎(DataSet、DataStream)API作為后端。那這是否意味著實現時的四種組合的轉換路徑呢?其實,Flink并沒有自己去實現轉換、SQL的解析、執行計劃的生成、優化等操作,它將一些“不擅長”的任務轉交給了Apache Calcite。整體架構如下圖:

如何理解Flink關系型API

Apache Calcite是一個SQL解析與查詢優化框架(這個定義是從Flink關注的視角來看,Calcite官方的定義為動態的數據管理框架),目前已被許多項目選擇用來解析并優化SQL查詢,比如:Drill、Hive、Kylin等。

我們來對上面的架構圖進行解讀。從中上部我們看到,可以從DataSet、DataStream以及Table Source等多種渠道來創建Table,Table相關的一些信息比如schema、數據字段及類型等信息統一被注冊并存放到Calcite Catalog中。這些信息將為Table & SQL API提供元數據。接著往下看,Table API跟SQL構建的查詢將被翻譯成共同的邏輯計劃表示,邏輯計劃將作為Calcite優化器的輸入。優化器結合邏輯計劃以及特定的后端(DataSet、DataStream)規則進行翻譯和優化,隨之產生不同的計劃。計劃將通過代碼生成器,生成特定的后端程序。后端程序的執行將返回DataSet或DataStream。

這個架構圖展示了Flink關系型API的整體架構,也是后續我們分析這個模塊的基礎。

關于如何理解Flink關系型API就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达日县| 德庆县| 集安市| 郓城县| 辉县市| 田阳县| 秭归县| 喀喇沁旗| 张家口市| 苍溪县| 牙克石市| 岢岚县| 黄冈市| 屯留县| 南阳市| 汽车| 河间市| 绥阳县| 含山县| 鄂伦春自治旗| 天全县| 高碑店市| 高青县| 鄄城县| 田东县| 思茅市| 澄江县| 东乡| 昂仁县| 西充县| 桂林市| 文山县| 乐业县| 平顶山市| 东至县| 横峰县| 孟连| 洮南市| 大田县| 新闻| 海安县|