知识卡片

动态表的三种更新模式

专业/工作 · 503

内容

流上的一张”表”和数据库里的静态表不同,它的内容随时间持续变化,本质上是一串数据变更消息(changelog)。这串消息可以有三种编码方式:Append模式只允许INSERT消息,之前输出过的行永远不会被修改,适合纯追加、无需更新的场景;Retract模式允许INSERT、UPDATE、DELETE消息,靠”先撤回旧行、再插入新行”的方式表达更新,通用但每次更新要传两条消息,开销更大;Upsert模式只需要INSERT/UPDATE合并后的UPSERT消息加DELETE消息,效率比Retract更高,但要求这张表有唯一主键,下游系统必须能按主键覆写。选择哪种模式本质上是在问:这份不断变化的计算结果,下游系统能不能理解”更新”这个语义,能理解到什么精细程度。

参考来源

《Flink入门与实战》第7章《Table API和SQL》