Apache Flink 漫谈系列(11) - Temporal Table JOIN
副问题[/!--empirenews.page--]
一、什么是Temporal Table 在《Apache Flink 漫谈系列 - JOIN LATERAL》中提到了Temporal Table JOIN,本篇就向各人具体先容什么是Temporal Table JOIN。 在ANSI-SQL 2011 中提出了Temporal 的观念,Oracle,SQLServer,DB2等大的数据库厂商也先后实现了这个尺度。Temporal Table记录了汗青上任何时刻点全部的数据窜改,Temporal Table的事变流程如下: 上图表示Temporal Table具有平凡table的特征,有详细奇异的DDL/DML/QUERY语法,时刻是其焦点属性。汗青意味着时刻,意味着快照Snapshot。 二、ANSI-SQL 2011 Temporal Table示例 我们以一个DDL和一套DML示例声名Temporal Table的道理,DDL界说PK是可选的,下面的示例我们以不界说PK的为例举办声名: 1. DDL 示例
2. DML 示例 (1) INSERT
声名: 个中Sys_Start和Sys_End是数据库体系默认添补的。 (2) UPDATE
声名: 假设是在 2012-02-03 10:00:00 执行的UPDATE,执行之后上一个值"Joe"的Sys_End值由9999-12-31 23:59:59 酿成了 2012-02-03 10:00:00, 也就是下一个值"Tom"见效的开始时刻。可见我们执行的是UPDATE可是数据库内里会存在两条数据,数据值和有用期差异,也就是版本差异。 (3) DELETE (假设执行DELETE之前的表内容如下)
声名: 假设我们是在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执行那一刻为止。 (4) SELECT
声名: 这个查询会返回全部Sys_Start <= 2011-01-02 00:00:00 而且 Sys_end > 2011-01-02 00:00:00 的记录。 三、SQLServer Temporal Table 示例 1. DDL
执行上面的语句,在数据库会建设当前表和汗青表,如下图: Department 表现是有版本节制的,汗青表是默认的名字,我也可以指命名字如:SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DepartmentHistory)。 2. DML (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |