【翻譯】Flink Table Api & SQL —— Overview


本文翻譯自官網:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/

Flink Table Api & SQL 翻譯目錄

一直沒有用 flink 的 table 或 sql api,最近開始要使用這部分功能了,先把官網對應的文檔翻譯一遍,方便自己慢慢查看

 

 

-----------------------------------------------

Apache Flink 具有兩個關聯 API-Table API 和 SQL - 用於統一流和批處理。Table API 是用 於 Scala 和Java 的語言集成查詢 API,它允許以非常直觀的方式組合來自關系運算符(例如選擇,過濾和聯接)的查詢。Flink 的 SQL 基於實現 SQL 標准的 Apache Calcite無論輸入是批處理輸入(DataSet)還是流輸入(DataStream),在兩個接口中指定的查詢都具有相同的語義並指定相同的結果。

Table API 和 SQL 接口與 Flink 的 DataStream 和 DataSet API 緊密集成在一起。您可以輕松地在所有 API 和基於 API 的庫之間切換。例如,您可以使用 CEP 庫從 DataStream 中提取模式,然后再使用 Table API 分析模式,或者您可以在預處理程序上運行 Gelly 圖算法之前,使用 SQL 查詢、掃描、過濾和聚合批處理表數據。

請注意,Table API和SQL尚未完成功能,正在積極開發中。[Table API,SQL]和[stream,batch]輸入的每種組合都不支持所有操作。

依賴結構

從 Flink 1.9 開始,Flink 提供了兩種不同的計划程序實現來評估 Table&SQL API 程序:Blink planner 和Flink 1.9之前可用的 old planner。planner 負責將關系運算符轉換為可執行的、優化的 Flink 作業。兩種 planner 帶有不同的優化規則和運行時類。它們在支持的功能方面也可能有所不同。

注意對於生產用例,建議使用Flink 1.9之前的 old planner。

所有 Table API 和 SQL 組件都捆綁在 flink-table 或 flink-table-blink Maven 組件中。

以下依賴關系與大多數項目有關:

  • flink-table-common:用於通過自定義功能,格式等擴展表生態系統的通用模塊。
  • flink-table-api-java:適用於使用 Java 編程語言的純表程序的 Table&SQL API(處於開發初期,不建議使用!)。
  • flink-table-api-scala:使用 Scala 編程語言的純表程序的 Table&SQL API(處於開發初期,不建議使用!)。
  • flink-table-api-java-bridge:使用 Java 編程語言支持帶有 DataStream / DataSet API 的 Table&SQL API。
  • flink-table-api-scala-bridge:使用 Scala 編程語言支持帶有 DataStream / DataSet API 的 Table&SQL API。
  • flink-table-planner:表程序 planner 和運行時。這是1.9版本之前Flink的唯一 planner 。現在仍然是推薦的。
  • flink-table-planner-blink:新的 Blink planner 。
  • flink-table-runtime-blink:新的 Blink runtime。
  • flink-table-uber:將上述 API 模塊以及 old planner 打包到大多數 Table&SQL API 用例的分發中。默認情況下,超級 JAR 文件 flink-table-*.jar 位於 Flink版本目錄 /lib  中。
  • flink-table-uber-blink:將上述API模塊以及特定於Blink的模塊打包到大多數Table&SQL API用例的分發中。默認情況下,uber  JAR 文件 flink-table-blink-*.jar位於/libFlink版本目錄中。

有關如何在表程序中的新舊 planner 之間進行切換的更多信息,請參見通用API頁面。

表程序依賴性

根據目標編程語言,您需要將Java或Scala API添加到項目中,以便使用Table API和SQL定義管道:

<!-- Either... -->
<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-api-java-bridge_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>
<!-- or... -->
<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-api-scala-bridge_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>

此外,如果要在IDE中本地運行Table API和SQL程序,則必須添加以下一組模塊之一,具體取決於要使用的 planner :

 

<!-- Either... (for the old planner that was available before Flink 1.9) -->
<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-planner_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>
<!-- or.. (for the new Blink planner) -->
<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-planner-blink_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>

在內部,表生態系統的一部分在Scala中實現。因此,請確保為批處理和流應用程序都添加以下依賴項: 

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-streaming-scala_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>

擴展依賴

如果要實現與Kafka或一組用戶定義的函數進行交互自定義格式,則以下依賴關系就足夠了,並且可以用於SQL Client的JAR文件:

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-common</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>

當前,該模塊包括以下擴展點:

  • SerializationSchemaFactory
  • DeserializationSchemaFactory
  • ScalarFunction
  • TableFunction
  • AggregateFunction

接下來要去哪里?

  • 概念和通用API:表API和SQL的共享概念和API。
  • 數據類型:列出預定義的數據類型及其屬性。
  • 流概念:Table API或SQL的流特定文檔,例如時間屬性的配置和更新結果的處理。
  • 連接到外部系統:可用的連接器和格式,用於向外部系統讀取和寫入數據。
  • Table APITable API支持的操作和API。
  • SQLSQL支持的操作和語法。
  • 內置函數:Table API和SQL支持的函數。
  • SQL客戶端:使用Flink SQL並在沒有編程知識的情況下將表程序提交給集群。

歡迎關注Flink菜鳥公眾號,會不定期更新Flink(開發技術)相關的推文


免責聲明!

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



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