1.18.Table API SQL(概念、依赖图、Table程序依赖、扩展依赖)
1.18.Table API & SQL
1.18.1.概念
1.18.1.1.依賴圖
1.18.1.2.Table程序依賴
1.18.1.3.擴展依賴
1.18.Table API & SQL
1.18.1.概念
Apache Flink 有兩種關系型 API 來做流批統一處理:Table API 和 SQL。Table API 是用于 Scala 和 Java 語言的查詢API,它可以用一種非常直觀的方式來組合使用選取、過濾、join 等關系型算子。Flink SQL 是基于 Apache Calcite 來實現的標準 SQL。這兩種 API 中的查詢對于批(DataSet)和流(DataStream)的輸入有相同的語義,也會產生同樣的計算結果。
Table API 和 SQL 兩種 API 是緊密集成的,以及 DataStream 和 DataSet API。你可以在這些 API 之間,以及一些基于這些 API 的庫之間輕松的切換。比如,你可以先用 CEP 從 DataStream 中做模式匹配,然后用 Table API 來分析匹配的結果;或者你可以用 SQL 來掃描、過濾、聚合一個批式的表,然后再跑一個 Gelly 圖算法 來處理已經預處理好的數據。
注意:Table API 和 SQL 現在還處于活躍開發階段,還沒有完全實現所有的特性。不是所有的 [Table API,SQL] 和 [流,批] 的組合都是支持的。
1.18.1.1.依賴圖
從1.9開始,Flink 提供了兩個 Table Planner 實現來執行 Table API 和 SQL 程序:Blink Planner 和 Old Planner,Old Planner 在1.9之前就已經存在了。 Planner 的作用主要是把關系型的操作翻譯成可執行的、經過優化的 Flink 任務。兩種 Planner 所使用的優化規則以及運行時類都不一樣。 它們在支持的功能上也有些差異。
**注意:**對于生產環境,我們建議使用在1.11版本之后已經變成默認的Blink Planner。
所有的 Table API 和 SQL 的代碼都在 flink-table 或者 flink-table-blink Maven artifacts 下。
下面是各個依賴:
?flink-table-common: 公共模塊,比如自定義函數、格式等需要依賴的。
?flink-table-api-java: Table 和 SQL API,使用 Java 語言編寫的,給純 table 程序使用(還在早期開發階段,不建議使用)
?flink-table-api-scala: Table 和 SQL API,使用 Scala 語言編寫的,給純 table 程序使用(還在早期開發階段,不建議使用)
?flink-table-api-java-bridge: Table 和 SQL API 結合 DataStream/DataSet API 一起使用,給 Java 語言使用。
?flink-table-api-scala-bridge: Table 和 SQL API 結合 DataStream/DataSet API 一起使用,給 Scala 語言使用。
?flink-table-planner: table Planner 和運行時。這是在1.9之前 Flink 的唯一的 Planner,但是從1.11版本開始我們不推薦繼續使用。
?flink-table-planner-blink: 新的 Blink Planner,從1.11版本開始成為默認的 Planner。
?flink-table-runtime-blink: 新的 Blink 運行時。
?flink-table-uber: 把上述模塊以及 Old Planner 打包到一起,可以在大部分 Table & SQL API 場景下使用。打包到一起的 jar 文件 flink-table-.jar 默認會直接放到 Flink 發行版的 /lib 目錄下。
?flink-table-uber-blink: 把上述模塊以及 Blink Planner 打包到一起,可以在大部分 Table & SQL API 場景下使用。打包到一起的 jar 文件 flink-table-blink-.jar 默認會放到 Flink 發行版的 /lib 目錄下。
關于如何使用Old Planner以及Blink Planner,可以參考公共API.
1.18.1.2.Table程序依賴
取決于你使用的編程語言,選擇Java或者Scala API來構建你的Table API和SQL程序:
<!-- Either... --> <dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-api-java-bridge_2.11</artifactId><version>1.12.0</version><scope>provided</scope> </dependency> <!-- or... --> <dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-api-scala-bridge_2.11</artifactId><version>1.12.0</version><scope>provided</scope> </dependency>除此之外,如果你想在 IDE 本地運行你的程序,你需要添加下面的模塊,具體用哪個取決于你使用哪個 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.12.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.12.0</version><scope>provided</scope> </dependency>內部實現上,部分 table 相關的代碼是用 Scala 實現的。所以,下面的依賴也需要添加到你的程序里,不管是批式還是流式的程序:
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-scala_2.11</artifactId><version>1.12.0</version><scope>provided</scope> </dependency>1.18.1.3.擴展依賴
如果你想實現自定義格式來解析Kafka數據,或者自定義函數,下面的依賴就足夠了,編譯出來的jar文件可以直接給SQL Client使用:
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-common</artifactId><version>1.12.0</version><scope>provided</scope> </dependency>當前,本模塊包含以下可以擴展的接口:
SerializationSchemaFactory
DeserializationSchemaFactory
ScalarFunction
TableFunction
AggregateFunction
接下來:
?公共概念和 API: Table API 和 SQL 公共概念以及 API。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/common.html】
?數據類型: 內置數據類型以及它們的屬性 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/types.html】
?流式概念: Table API 和 SQL 中流式相關的文檔,比如配置時間屬性和如何處理更新結果。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/streaming/】
?連接外部系統: 讀寫外部系統的連接器和格式。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/connect.html】
?Table API: Table API 支持的操作。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/tableApi.html】
?SQL: SQL 支持的操作和語法。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/sql/】
?內置函數: Table API 和 SQL 中的內置函數。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/functions/systemFunctions.html】
?SQL Client: 不用編寫代碼就可以嘗試 Flink SQL,可以直接提交 SQL 任務到集群上。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/sqlClient.html】
總結
以上是生活随笔為你收集整理的1.18.Table API SQL(概念、依赖图、Table程序依赖、扩展依赖)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.17.Flink 并行度详解(Par
- 下一篇: 企业融资分几轮