天天看點

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'
           

繼續閱讀