Flink基礎(十六):Table API 和 Flink SQL(一)整體介紹


什么是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中,指定的查詢都具有相同的語義,得到相同的結果。

需要引入的依賴

取決於你使用的編程語言,比如這里,我們選擇 Scala API 來構建你的 Table API 和 SQL 程序:

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-api-scala-bridge_2.11</artifactId>
  <version>1.11.0</version>
  <scope>provided</scope>
</dependency>

除此之外,如果你想在 IDE 本地運行你的程序,你需要添加下面的模塊,具體用哪個取決於你使用哪個 Planner,我們這里選擇使用 blink planner:

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-planner-blink_2.11</artifactId>
  <version>1.11.0</version>
  <scope>provided</scope>
</dependency>

如果你想實現自定義格式來解析 Kafka 數據,或者自定義函數,使用下面的依賴:

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-common</artifactId>
  <version>1.11.0</version>
  <scope>provided</scope>
</dependency>
  • flink-table-planner-blink:planner計划器,是table API最主要的部分,提供了運行時環境和生成程序執行計划的planner;
  • flink-table-api-scala-bridge:bridge橋接器,主要負責table API和 DataStream/DataSet API的連接支持,按照語言分java和scala。

這里的兩個依賴,是IDE環境下運行需要添加的;如果是生產環境,lib目錄下默認已經有了planner,就只需要有bridge就可以了。

需要注意的是:flink table本身有兩個 planner 計划器,在flink 1.11之后,已經默認使用 blink planner,如果想了解 old planner,可以查閱官方文檔。

 

 

兩種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支持。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM