目录
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]组合。
从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
根据目标编程语言的不同,需要向项目中添加 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
附录
预定义数据类型列表及其属性