Flink的动态表转流(toAppendStream和toRetractStream) 您所在的位置:网站首页 retract官网 Flink的动态表转流(toAppendStream和toRetractStream)

Flink的动态表转流(toAppendStream和toRetractStream)

2023-09-30 03:38| 来源: 网络整理| 查看: 265

前言

在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的处理,此处便需要连续查询处理,下图显示了流,动态表和连续查询之间的关系:

在这里插入图片描述

流将转换为动态表。在动态表上进行连续查询,生成新的动态表。生成的动态表将转换回流。(toAppendStream和toRetractStream)

注意:动态表首先是一个逻辑概念。在查询执行期间不一定(完全)实现动态表。

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 实验室设备网 版权所有