Flink的动态表转流(toAppendStream和toRetractStream) | 您所在的位置:网站首页 › retract官网 › Flink的动态表转流(toAppendStream和toRetractStream) |
前言
在FlinkSQL创建表后,将动态表转换为数据流的时候,我们可以选择两种方式:toAppendStream和toRetractStream。 官网对此也有解释,编者在此给你找出来了:Flink官网动态表(表转流)说明部分,此处应有掌声。 表转流的几种多态函数此处我们以toAppendStream为例: 源码接口代码 DataStream toAppendStream(Table table, TypeInformation typeInfo); DataStream toRetractStream(Table table, Class clazz);可以看出:一种是以参数类型(表转换后的数据流的类型),另外一种就是将参数类型的结果封装到pojo中进行设置。 实例代码 TypeInformation DataStream joinStream = bsTableEnv.toRetractStream(queryTable, Types.TUPLE(Types.INT, Types.INT)); DataStream joinStream = bsTableEnv.toRetractStream(queryTable, TypeInformation.of(new TypeHint(){})); ### Class DataStream result = tableEnvironment.toAppendStream(queryTable, Pojo.class); 表转流概述流经动态表的数据,往往要经过flinksql的处理,此处便需要连续查询处理,下图显示了流,动态表和连续查询之间的关系: 注意:动态表首先是一个逻辑概念。在查询执行期间不一定(完全)实现动态表。 Append-only stream附加流:仅进行INSERT操作修改动态表的情况,将此种动态表转换为DataStream。 Retract stream撤回流:撤消流是具有两种消息类型的流,即添加消息(add messages)和撤消消息(retract messages)。即添加和删除操作,并据此将动态表转换为撤消流,以用于更新(上一个)行和用于更新(新)行的附加消息。 小结如果不需要更新和删除用可以用toAppendStream,如果需要则得用toRetractStream。 除此两种转换方式外,官网还有种Upsert stream(不支持动态表转换数据流),故不赘言: Please note that only append and retract streams are supported when converting a dynamic table into a DataStream. 请注意,将动态表转换为DataStream时仅支持only append和retract streams。 2021.2.22补充: 动态匹配表转流数据结果动态表转流,我们看到输出结果的时候往往要指定输出的数据流的结果类型:无论是Tuple2,还是class。那么如果说我们需要动态匹配结果输出,那怎么办呢? 我的回答是才采用Row类型数据,源自jar包: org.apache.flink.types.Row。 DataStream result = tableEnvironment.toAppendStream(queryTable, Row.class);import org.apache.flink.types.Row; 使用场景为:flink使用kafka数据源建立FlinkSQL表转数据流,不需要关心执行完FlinkSQL后新的生成的动态表的数据类型。 Flink字符串数据流转换数据类型(Row)流及Row的源码 |
CopyRight 2018-2019 实验室设备网 版权所有 |