FLINK 1.12.2 中的TableEnvironment

声明:本节参考文章为阿里云开发者社区《Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?》

TableEnvironment 是用来创建 Table & SQL 程序的上下文执行环境 ,也是 Table & SQL 程序的入口,Table & SQL 程序的所有功能都是围绕 TableEnvironment 这个核心类展开的。TableEnvironment 的主要职能包括:对接外部系统,表及元数据的注册和检索,执行SQL语句,提供更详细的配置选项。FLINK1.12.2可以使用3种上下文环境对象(也有说5种,是因为java和scale的env各有2个)。

 

 

 

目前,社区正在推进 DataStream 的批处理能力,以实现流批技术栈的统一,届时 DataSet API 会退出历史的舞台,两个 BatchTableEnvironment 也将退出历史的舞台。同时社区也在努力推动 Java 和 Scala TableEnvironment 的统一。可以预见的是,Flink TableEnvironment 的未来架构会更加简洁。TableEnvironment 会是 Flink 推荐使用的入口类,同时能支持 Java API 和 Scala API,还能同时支持流计算作业和批处理作业。只有当需要与 DataStream 做转换时,才需要用到 StreamTableEnvironment。

 

TableEnvironment的使用需要结合planner,FLINK1.12.2中有2种planner:

1.实现流批统一的 Blink planner 中由于没有了 DataSet 的概念,已经不再使用 BatchTableEnvironment,只会使用 TableEnvironment 和 StreamTableEnvironment,而 Flink planner(即 Old planner) 则支持 5 个 TableEnvironment。

2.BatchTableEnvironment 的实现都放到了 Old planner (flink-table-palnner模块) 中,这个模块在社区的未来规划中是会被逐步删除的。

 

下面分别介绍JAVA API中如何使用3种TableEnvironment。

1 TableEnvironment

TableEnvironment 作为统一的接口,其统一性体现在两个方面,一是对于所有基于JVM的语言(即 Scala API 和 Java API 之间没有区别)是统一的;二是对于 unbounded data (无界数据,即流数据) 和 bounded data (有界数据,即批数据)的处理是统一的。TableEnvironment 提供的是一个纯 Table 生态的上下文环境,适用于整个作业都使用 Table API & SQL 编写程序的场景。

使用示例

使用Old planner创建流式处理环境

EnvironmentSettings fsSettings = EnvironmentSettings.newInstance()

                                .useOldPlanner()

                                .inStreamingMode()

                                .build(); 
TableEnvironment fsTableEnv = TableEnvironment.create(fsSettings);

使用Old planner和TableEnvironment不能创建批处理环境!

使用Blink planner创建流式处理环境

EnvironmentSettings fsSettings = EnvironmentSettings.newInstance()

                                .useBlinkPlanner()

                                .inStreamingMode()

                                .build();
 TableEnvironment fsTableEnv = TableEnvironment.create(fsSettings);

使用Blink planner创建批式处理环境

EnvironmentSettings fsSettings = EnvironmentSettings.newInstance()

                                .useBlinkPlanner()

                                .inBatchMode()

                                .build(); 
TableEnvironment fsTableEnv = TableEnvironment.create(fsSettings);

2 BatchTableEnvironment

两个 BatchTableEnvironment 分别用于 Java 的批处理场景和 Scala 的批处理场景,批处理的对象分别是 Java 的 DataSet 和 Scala 的 DataSet。相比 TableEnvironment,BatchTableEnvironment 提供了 DataSet 和 Table 之间相互转换的接口,如果用户的程序除了使用 Table API & SQL 编写外,还需要使用到 DataSet API,则需要使用 BatchTableEnvironment。

使用示例

使用Old planner创建批式处理环境

ExecutionEnvironment fbEnv = ExecutionEnvironment.getExecutionEnvironment(); 
BatchTableEnvironment fbTableEnv = BatchTableEnvironment.create(fbEnv);

使用BatchTableEnvironment 不能创建流处理环境,也不能与Blink planner结合使用!

3 StreamTableEnvironment

两个 StreamTableEnvironment 分别用于 Java 的流计算和 Scala 的流计算场景,流计算的对象分别是 Java 的 DataStream 和 Scala 的 DataStream。相比 TableEnvironment,StreamTableEnvironment 提供了 DataStream 和 Table 之间相互转换的接口,如果用户的程序除了使用 Table API & SQL 编写外,还需要使用到 DataStream API,则需要使用 StreamTableEnvironment。

使用示例

使用Old planner创建流式处理环境

EnvironmentSettings fsSettings = EnvironmentSettings.newInstance()

                                .useOldPlanner()

                                .inStreamingMode()

                                .build(); 
StreamExecutionEnvironment fsEnv = StreamExecutionEnvironment

                                .getExecutionEnvironment();
StreamTableEnvironment fsTableEnv = StreamTableEnvironment.create(fsEnv, fsSettings);

使用Blink planner创建流式处理环境

EnvironmentSettings fsSettings = EnvironmentSettings.newInstance()

                                .useBlinkPlanner()

                                .inStreamingMode()

                                .build();
StreamExecutionEnvironment fsEnv = StreamExecutionEnvironment

                                .getExecutionEnvironment(); 
StreamTableEnvironment fsTableEnv = StreamTableEnvironment.create(fsEnv, fsSettings);

使用StreamTableEnvironment 不能创建批处理环境!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值