天天看点

SAP HANA Temporal Table (历史表)

       引自《SAP HANA 实战》 刘刚 舒戈 著  2.4.2.3

       除了行、列存储的数据库表外,HANA还提供了 Temporal Table(简称历史表或临时表)。它和普通表的区别是所有历史表中的数据更新都不会对原始的数据记录进行真正的更新。

      Temporal Table 的特点:

  • 插入新数据记录,系统会插入新的数据
  • 更新就数据记录系统会插入更新后的数据,并生成新版本,即时在版本合并期间的历史版本也不会被删除
  • 删除数据,不会删除原始的数据记录,而是插入新数据,并且在数据的“有效期至”这列中设置删除的当前时间戳(应该              和通常说的假删标志和修改时间类似的方式)
  • 定义 Temporal Table 时不能指定特定的数据库主键

       Temporal Table 保留原始数据记录,以及对原始数据进行的所有的数据更新操作和历史纪录,这样用户可以查询到数据过去的历史状态。

       外部应用访问 HANA 数据库的数据,在默认情况下,SQL 查询只返回最新版本的数据记录。用户也可以在 SQL 上指定查询数据的时间范围(类似数据的时间旅行概念,可以浏览这个数据在这一时间段内的所有更新变化 ),这种基于过去时间的数据查询,目前只有列存储方式的Temporal Table 对其提供支持,行存储的 Temporal Table 暂时还没有出现在SAP 官方的功能列表中。

       用户可以通过 SQL 来创建 Temporal Table ,比如通过下面这样的形式。

CREATE GLOBAL TEMPORARYCOLUMN TABLE 表名(字段名类型);

eg: CREATE GLOBAL TEMPORARY TABLE TEST (A int , B int , C int )
           

或者在 HANA Studio 中使用向导创建数据库表时设置成Temporal Table 即可。

       如果查询过去的历史记录,则可以考虑使用一下的SQL 语法。查询相同的数据在不同时间的变化需要通过两个参数,一个是数据更新时最后事务提交的COMMIT ID,另一个是需要指定时间戳。

SELECT * FROM <TABLENAME>AS OF CPMMIT ID XXX
或
SELECT * FROM <TABLENAME>AS OF UTCTIMESTAMP '2018-11-23 10:50:00'
           

继续阅读