1.简介
Table API 是流处理和批处理通用的关系型API,Table API 可以基于流输入或者批输入来运行而不需要进行任何修改。Table API 是SQL 语言的超集并专门为ApacheFlink 设计的,Table API 是Scala 和Java 语言集成式的API。与常规SQL 语言中将查询指定为字符串不同,Table API 查询是以Java 或Scala 中的语言嵌入样式来定义的,具有IDE 支持如:自动完成和语法检测。
而对于Flink SQL,就是直接可以在代码中写SQL,来实现一些查询(Query)操作。Flink 的SQL 支持,基于实现了SQL 标准的Apache Calcite(Apache 开源SQL 解析工具)。
2.实际开发
2.1.需要引入的依赖
Table API 和SQL 需要引入的依赖有两个:planner 和bridge。
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-planner_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-api-scala-bridge_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
flink-table-planner:planner 计划器,是table API 最主要的部分,提供了运行时环境和生成程序执行计划的planner;
flink-table-api-scala-bridge:bridge 桥接器,主要负责table API 和DataStream/DataSet API的连接支持,按照语言分java 和scala。
这里的两个依赖,是IDE 环境下运行需要添加的;如果是生产环境,lib 目录下默认已经有了planner,就只需要有bridge 就可以了。
当然,如果想使用用户自定义函数,或是跟kafka 做连接,需要有一个SQL client,这个包含在flink-table-common 里。
2.1.1.两种planner(old & blink)的区别
1. 批流统一:Blink 将批处理作业,视为流式处理的特殊情况。所以,blink 不支持表和DataSet 之间的转换,批处理作业将不转换为DataSet 应用程序,而是跟流处理一样,转换为DataStream 程序来处理。
2. 因为批流统一, Blink planner 也不支持BatchTableSource , 而使用有界的StreamTableSource 代替。

本文介绍了Apache Flink的Table API和SQL在实际开发中的应用,包括依赖管理、API调用示例,以及Blink planner与旧planner的区别。重点展示了如何创建Table Environment、使用Table API进行流处理和批处理,以及如何在FlinkSQL中操作表和执行SQL查询。
最低0.47元/天 解锁文章
1211





