本文翻譯自官網:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/
一直沒有用 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>
當前,該模塊包括以下擴展點:
SerializationSchemaFactoryDeserializationSchemaFactoryScalarFunctionTableFunctionAggregateFunction
接下來要去哪里?
- 概念和通用API:表API和SQL的共享概念和API。
- 數據類型:列出預定義的數據類型及其屬性。
- 流概念:Table API或SQL的流特定文檔,例如時間屬性的配置和更新結果的處理。
- 連接到外部系統:可用的連接器和格式,用於向外部系統讀取和寫入數據。
- Table API:Table API支持的操作和API。
- SQL:SQL支持的操作和語法。
- 內置函數:Table API和SQL支持的函數。
- SQL客戶端:使用Flink SQL並在沒有編程知識的情況下將表程序提交給集群。
歡迎關注Flink菜鳥公眾號,會不定期更新Flink(開發技術)相關的推文

