1. 程式人生 > 其它 >Flink學習之路(十)—— Table API 和 Flink SQL (一)—— 整體介紹

Flink學習之路(十)—— Table API 和 Flink SQL (一)—— 整體介紹

技術標籤:Flinkflink

什麼是 Table API 和 Flink SQL

Flink 本身是批流統一的處理框架,所以 Table API 和 SQL,就是批流統一的上層處理 API。
目前功能尚未完善,處於活躍的開發階段。
Table API 是一套內嵌在 Java 和 Scala 語言中的查詢 API,它允許我們以非常直觀的方式,
組合來自一些關係運算符的查詢(比如 select、filter 和 join)。而對於 Flink SQL,就是直接可
以在程式碼中寫 SQL,來實現一些查詢(Query)操作。Flink 的 SQL 支援,基於實現了 SQL 標
準的 Apache Calcite(Apache 開源 SQL 解析工具)。

無論輸入是批輸入還是流式輸入,在這兩套 API 中,指定的查詢都具有相同的語義,得
到相同的結果。

需要引入的依賴

Table API 和 SQL 需要引入的依賴有兩個:planner 和 bridge。

<dependency>
 	<groupId>org.apache.flink</groupId>
 	<artifactId>flink-table-planner_2.12</artifactId>
 	<version>1.10.1</version>
</dependency> <dependency
>
<groupId>org.apache.flink</groupId> <artifactId>flink-table-api-java-bridge_2.12</artifactId> <version>1.10.1</version> </dependency>

flink-table-planner:planner 計劃器,是 table API 最主要的部分,提供了執行時環境和生成程式執行計劃的 planner;

flink-table-api-java-bridge:bridge 橋接器,主要負責 table API 和 DataStream/DataSet API的連線支援,按照語言分 java 和 scala。

這裡的兩個依賴,是 IDE 環境下執行需要新增的;如果是生產環境,lib 目錄下預設已經有了 planner,就只需要有 bridge 就可以了。

當然,如果想使用使用者自定義函式,或是跟 kafka 做連線,需要有一個 SQL client,這個包含在 flink-table-common 裡。

兩種 planner(old & blink)的區別

  1. 批流統一:Blink 將批處理作業,視為流式處理的特殊情況。所以,blink 不支援表和
    DataSet 之間的轉換,批處理作業將不轉換為 DataSet 應用程式,而是跟流處理一樣,轉換
    為 DataStream 程式來處理。
  2. 因 為 批 流 統 一 , Blink planner 也 不 支 持 BatchTableSource , 而 使 用 有 界 的
    StreamTableSource 代替。
  3. Blink planner 只支援全新的目錄,不支援已棄用的 ExternalCatalog。
  4. 舊 planner 和 Blink planner 的 FilterableTableSource 實現不相容。舊的 planner 會把
    PlannerExpressions 下推到 filterableTableSource 中,而 blink planner 則會把 Expressions 下推。
  5. 基於字串的鍵值配置選項僅適用於 Blink planner。
  6. PlannerConfig 在兩個 planner 中的實現不同。
  7. Blink planner 會將多個 sink 優化在一個 DAG 中(僅在 TableEnvironment 上受支援,而
    在 StreamTableEnvironment 上不受支援)。而舊 planner 的優化總是將每一個 sink 放在一個新
    的 DAG 中,其中所有 DAG 彼此獨立。
  8. 舊的 planner 不支援目錄統計,而 Blink planner 支援。

END