目录
时态表(Temporal Table)是一张随时间变化的表,时态表中的每条记录都关联了一个或多个时间段,所有的 Flink 表都是时态的(动态的)。
时态表包含表的一个或多个有版本的表快照,时态表可以是一张跟踪所有变更记录的表(例如数据库表的 changelog,包含多个表快照),也可以是物化所有变更之后的表(例如数据库表,只有最新表快照)。
时态表分类
根据时态表是否可以追踪自身的历史版本与否,时态表可以分为 版本表
和 普通表
版本表:表中的记录可以追踪和访问它的历史版本,存储的数据通常是来源于数据库changelog(如数据源有:mysql-binlog、kafka-upsert、oracle-cdc等),版本表内的数据始终不会自动清理,只能通过upsert触发。
普通表(维表):表中的记录仅仅可以追踪和访问它的最新版本,来自数据库 或 HBase 、redis的表可以定义成普通表。
设计初衷
版本表
以订单流关联产品表这个场景举例,orders
表包含了来自 Kafka 的实时订单流,product_changelog
表来自数据库表 products
的 changelog , 产品的价格在数据库表 products
中是随时间实时变化的。
SELECT * FROM product_changelog;
(changelog kind) update_time product_id product_name price
================= =========== ========== ============ =====
+(INSERT) 00:01:00 p_001 scooter 11.11
+(INSERT) 00:02:00 p_002 basketball 23.11
-(UPDATE_BEFORE) 12:00:00 p_001 scooter 11.11
+(UPDATE_AFTER) 12:00:00 p_001 scooter 12.99
-(UPDATE_BEFORE) 12:00:00 p_002 basketball 23.11
+(UPDATE_AFTER) 12:00:00 p_002 basketball 19.99
-(DELETE) 18:00:00 p_001 scooter 12.99
表 product_changelog
表示数据库表 products
不断增长的 changelog, 比如,产品 scooter
在时间点 00:01:00
的初始价格是 11.11
, 在 12:00:00
的时候涨价到了 12.99
, 在 18:00:00
的时候这条产品价格记录被删除。
如果我们想