本文翻譯自官網: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
位於/lib
Flink版本的目錄中。
有關如何在表程序中的新舊 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 API:Table API支持的操做和API。
- SQL:SQL支持的操做和語法。
- 內置函數:Table API和SQL支持的函數。
- SQL客戶端:使用Flink SQL並在沒有編程知識的狀況下將表程序提交給集羣。
歡迎關注Flink菜鳥公衆號,會不按期更新Flink(開發技術)相關的推文