当前位置: 首页 > 工具软件 > table2sql > 使用案例 >

1、Flink Table API & SQL - 开发基础代码样例和maven依赖

罗翰
2023-12-01

目录

MAVEN依赖结构 

Table 程序依赖

扩展依赖

导览


Apache Flink 的 Table API 和 SQL,用于统一的流和批处理。Table API 是一个用于 Scala 和 Java 语言集成查询API,它允许以一种非常直观的方式组合来自关系算子(如选择、筛选和连接)的查询。Flink SQL 基于 Apache Calcite 实现 SQL 标准。无论输入是批输入(DataSet)还是流输入(DataStream),在这两类接口中指定的查询都具有相同的语义,并得出相同的结果。

Table API 和 SQL 接口以及 Flink 的 DataStream 和 DataSet API 紧密集成在一起。可以轻松地在所有 api 和基于 api 的库之间切换。例如,可以使用 CEP 库从数据流中提取模型,然后使用 Table API 分析模型,或者在对预处理数据运行 Gelly graph 算法之前,使用SQL scan, filter, 和 aggregate 批处理表。

注意:Table API 和 SQL 还没有完全开发完成。不是支持所有的[Table API, SQL]和[stream, batch]组合。

MAVEN依赖结构 

从Flink1.9开始,提供了两种不同的 planner 实现:Blink planner 和 1.9之前旧的 planner。Planner 负责将算子转换为 Flink 可执行的、优化之后的 Flink job。这两个 Planner 拥有不同的优化规则和 runtime 类。也可能在支持的特性集上有所不同。

注意:在生产环境还是建议使用 Flink 1.9之前的planner

 所有的 Table API 和 SQL 组件都在 flink-table or 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:Flink 1.9 之前的 planner 和 runtime,仍然可用。
  • flink-table-planner-blink:新的 Blink planner
  • flink-table-runtime-blink:新的 Blink runtime
  • flink-table-uber:将上面的 API 模块以及旧的 planner 打包到 Table 和 SQL API 用例的发行版中。默认情况下,uber JAR文件Flink -table-*. jar 位于Flink发行版的/lib目录中。
  • flink-table-uber-blink:将上面的 API 模块以及 Blink 特定的模块打包到 Table 和 SQL API 用例的发行版中。默认情况下,uber JAR文件Flink -table-blink-*. jar 位于Flink发行版的/lib目录中。

有关如何在旧 planner 和 blink planner 之间切换,请查阅://TODO

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.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 客户机的 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

附录

Table API & SQL 的概念和 通用 APIs

预定义数据类型列表及其属性

 

 类似资料: