4.2.7 Flink-流处理框架-Table API 与 SQL-流处理中的特殊概念之动态表+持续查询

目录

1.写在前面

2.流处理和关系代数(表,及 SQL)的区别

3.动态表(Dynamic Tables)

4.流式持续查询的过程

 4.1 将流转换成动态表(Dynamic Tables)

4.2 持续查询(Continuous Query)

4.3 将动态表转换成流


1.写在前面

        Table API 和 SQL,本质上还是基于关系型表的操作方式;而关系型表、关系代数,以及 SQL 本身,一般是有界的,更适合批处理的场景。这就导致在进行流处理的过程中,理解会稍微复杂一些,需要引入一些特殊概念。

2.流处理和关系代数(表,及 SQL)的区别

        可以看到,其实关系代数(主要就是指关系型数据库中的表)和 SQL,主要就是针对批 处理的,这和流处理有天生的隔阂。

3.动态表(Dynamic Tables)

        因为流处理面对的数据,是连续不断的,这和我们熟悉的关系型数据库中保存的“表” 完全不同。所以,如果我们把流数据转换成 Table,然后执行类似于 table 的 select 操作,结果就不是一成不变的,而是随着新数据的到来,会不停更新。 我们可以随着新数据的到来,不停地在之前的基础上更新结果。这样得到的表,在 Flink Table API 概念里,就叫做“动态表”(Dynamic Tables)。

        动态表是 Flink 对流数据的 Table API 和 SQL 支持的核心概念。与表示批处理数据的静态表不同,动态表是随时间变化的。动态表可以像静态的批处理表一样进行查询,查询一个动 态表会产生持续查询(Continuous Query)。连续查询永远不会终止,并会生成另一个动态表。 查询(Query)会不断更新其动态结果表,以反映其动态输入表上的更改。

4.流式持续查询的过程

        下图显示了流、动态表和连续查询的关系

 4.1 将流转换成动态表(Dynamic Tables)

        为了处理带有关系查询的流,必须先将其转换为表。从概念上讲,流的每个数据记录,都被解释为对结果表的插入(Insert)修改。因为流 式持续不断的,而且之前的输出结果无法改变。本质上,我们其实是从一个、只有插入操作 的 changelog(更新日志)流,来构建一个表。

        为了更好地说明动态表和持续查询的概念,我们来举一个具体的例子。 比如,我们现在的输入数据,就是用户在网站上的访问行为,数据类型  (Schema)如 下:随着插入更多的访问事件流记录,生成的表将不断增长。

4.2 持续查询(Continuous Query)

        持续查询,会在动态表上做计算处理,并作为结果生成新的动态表。与批处理查询不同, 连续查询从不终止,并根据输入表上的更新更新其结果表。 在任何时间点,连续查询的结果在语义上,等同于在输入表的快照上,以批处理模式执 行的同一查询的结果。

        在下面的示例中,我们展示了对点击事件流中的一个持续查询。这个 Query 很简单,是一个分组聚合做 count 统计的查询。它将用户字段上的 clicks 表 分组,并统计访问的 url 数。图中显示了随着时间的推移,当 clicks 表被其他行更新时如何计算查询。

4.3 将动态表转换成流

        与常规的数据库表一样,动态表可以通过插入(Insert)、更新(Update)和删除(Delete) 更改,进行持续的修改。将动态表转换为流或将其写入外部系统时,需要对这些更改进行编码。Flink 的 Table API 和 SQL 支持三种方式对动态表的更改进行编码:

        需要注意的是,在代码里将动态表转换为 DataStream 时,仅支持 Append 和 Retract 流。而向外部系统输出动态表的 TableSink 接口,则可以有不同的实现,比如之前我们讲到的 ES,就可以有 Upsert 模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值