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

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

Flink Table Api & SQL 翻譯目錄java

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

 

 

-----------------------------------------------sql

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

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

請注意,Table API和SQL還沒有完成功能,正在積極開發中。[Table API,SQL]和[stream,batch]輸入的每種組合都不支持全部操做。api

依賴結構

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

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

全部 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(開發技術)相關的推文

相關文章
相關標籤/搜索