Flink-temporal-table-join
Temporal Table记录了表历史上任何时间点所有的数据改动
ANSI-SQL 2011 Temporal Table示例
我们以一个DDL和一套DML示例说明Temporal Table的原理,DDL定义PK是可选的,下面的示例我们以不定义PK的为例进行说明:
- DDL 示例
1 | CREATE TABLE Emp |
- DML 示例
- INSERT
1 | INSERT INTO Emp (ENo, EName) VALUES (22217, 'Joe') |
说明: 其中Sys_Start和Sys_End是数据库系统默认填充的。
- UPDATE
1 | UPDATE Emp SET EName = 'Tom' WHERE ENo = 22217 |
说明: 假设是在 2012-02-03 10:00:00 执行的UPDATE,执行之后上一个值 "Joe" 的Sys_End值由 9999-12-31 23:59:59 变成了 2012-02-03 10:00:00 , 也就是下一个值 "Tom" 生效的开始时间。可见我们执行的是UPDATE但是数据库里面会存在两条数据,数据值和有效期不同,也就是版本不同 。
- DELETE (假设执行DELETE之前的表内容如下)
DELETE FROM Emp WHERE ENo = 22217
说明: 假设我们是在 2012-06-01 00:00:00 执行的DELETE,则Sys_End值由 9999-12-31 23:59:59 变成了 2012-06-01 00:00:00 , 也就是在执行DELETE时候没有真正的删除符合条件的行,而是系统将符合条件的行的Sys_end修改为执行DELETE的事物时间。标识数据的有效期到DELETE执行那一刻为止。
- SELECT
1 | SELECT ENo,EName,Sys_Start,Sys_End FROM Emp |
说明: 这个查询会返回所有 Sys_start <= 2011-01-02 00:00:00 并且 Sys_end > 2011-01-02 00:00:00 的记录。



