Flink, 大数据

flink-36 流处理中的表

动态表(Dynamic Tables)

当流中有新数据到来,初始表中会插入一行,而基于这个表定义的SQL查询,就应该在之前的基础上更新结果。这样得到的表就会不断地动态变化,被称为动态表。数据会随时间变化。

持续查询(Continuous Query)

对动态表的查询随着新数据的到来而继续执行,这样的查询就被叫做持续查询。

用SQL持续查询

更新(Update)查询

聚合操作

  • 数据的更改可以是简单的插入(Insert),也可以是对之前数据的更新(Update)

这种持续查询被称为更新查询(Update Query)

更新查询得到的结果表想要转换成DataStream,必须调用toChangelogStream()方法

追加(Append)查询

定义的结果表的更新日志流中只有insert 操作 ,比如简单的SELECT WHERE 查询 这样的持续查询 就被称为追加查询(Append Query)

将动态表转换为流

flink中Table Api和SQL支持三种编码方式:

  • 仅追加流(Append-only)
    • 仅通过插入(Insert)更改来修改的动态表,可以直接转换为“仅追加”流
    • 这个流中发出的数据其实就是动态表中新增的每一行
  • 撤回流(Retract)
    • 撤回流包含两类消息的流,添加消息(add)和撤回消息(retract)
    • INSERT插入操作编码为add消息
    • DELETE删除操作编码为retract消息
    • UPDATE更新操作编码为被更改行的retract消息和更新后新行的add消息
  • 更新插入流(Upsert)

更新插入流只包含两种类型的消息:更新插入(upsert)消息和删除(delete)消息

对于更新插入流来说,INSERT插入操作和UPDATE更新操作,统一被编码为upsert消息