Blog
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消息