建立雙時態檢視¶
雙時態檢視同時保留兩者:某件事幾時發生,以及幾時被記錄。咁就可以按某個日期讀取,或者按某個日期記錄時嘅樣子讀取,之後嘅更正永遠唔會遮蓋更正之前已知嘅內容。
將檢視嘅三欄對應好,檢視就成為雙時態檢視:
- 業務鍵:喺各版本之間標識同一條記錄嘅一欄或多欄,例如
transaction_id。更正咗嘅付款仍然係同一筆付款,所以兩個版本帶住相同嘅鍵。 - 有效時間:存放業務畀呢條記錄嘅日期嘅欄,例如幾時協定、入賬或者生效。
- 記錄時間:存放呢個版本幾時輸入或修改嘅欄,例如
updated_at。
記錄時間喺時態數據庫文獻中稱為交易時間,喺 SQL:2011 中稱為系統時間;有效時間喺 SQL:2011 中稱為應用時間,亦稱生效日期。
呢三個值對應嘅係數據源已有嘅欄。版本點樣保存由 Provisa 決定;毋須揀存儲模式。
三個例子¶
| 例子 | 有效時間 | 記錄時間 |
|---|---|---|
| 10 月 3 日一筆 100 元嘅付款,喺 10 月 5 日更正為 120。 | 10 月 3 日,更正保留呢個值。 | 第一個版本為 10 月 3 日;更正為 10 月 5 日。 |
| 10 月 3 日 14:10 採集嘅現場量度值喺 10 月 6 日輸入。其中嘅筆誤喺 10 月 7 日修正。 | 10 月 3 日 14:10,修正保留呢個值。 | 10 月 6 日;修正得到 10 月 7 日。 |
| 一筆交易喺執行時入賬,交易日 10 月 3 日,時間 10:02。10 月 4 日發現數量有誤並作出修訂。 | 交易日 10 月 3 日,修訂保留呢個值。 | 10 月 3 日 10:02;修訂得到 10 月 4 日。 |
按 10 月 3 日報告嘅樣子讀取,呢筆交易顯示錯誤嘅數量。按而家所知讀取,就顯示更正後嘅數量。
建立檢視¶
保留歷史嘅檢視係具體化嘅,以便保存佢嘅各個版本。
- 打開 Views,按 + View。
- 喺任何一個分頁定義檢視:
- Metrics:為檢視命名,揀佢嘅 domain、指標同維度,然後按 Continue。
- SQL:打開 SQL 編輯器,編寫並執行
SELECT,喺編輯器按 + View,為檢視命名並按 Continue。
- 檢視嘅設定喺同佢編輯器一樣嘅部分打開。喺 Load and timeliness 剔選 Materialized View。Time Travel 部分隨即出現。
- 將 Keep history 設為 Bitemporal。
- 揀 Business key、Valid time 同 Recorded time 嘅欄。
- 喺其他部分設定其餘內容,然後按 Save。喺此之前唔會登記任何嘢。
呢三項要麼一齊聲明,要麼都唔聲明。只聲明其中部分嘅檢視會被 Provisa 拒絕,並講明缺少邊啲。
登記表時亦有同樣嘅部分:喺 + Table 揀佢,按 Continue,佢嘅 Time Travel 部分喺 Load and timeliness。建立模型時(+ Model)亦有呢個部分。對於模型,佢嘅鍵就係業務鍵,所以呢個部分只問兩個時間。
原地更新的表¶
有些表把每個版本儲存為獨立的一列,因此一次更正會新增一列,業務鍵相同。另一些表每個鍵只保留一列並覆寫它,因此它們的業務鍵就是主鍵。對於第二類表,Provisa 自己在版本日誌中保存各個版本:
- 每次擷取讀取日誌中最新記錄時間之後記錄的列,並加入其中有變更的列。
- 日誌的容許延遲會擴大這個窗口,因此一列即使提交得晚、記錄時間較早,也仍會被讀取。
- 擷取看不到來源已刪除的列。Full capture 重新讀取整張表,並把每個已刪除的列記錄為已消失。
- 日誌從第一次擷取開始:在此之前,每列只有它當時的版本。
日誌列在 Cache 的 Materialized Store 分頁下,名為該表的 Version log of。它的 Settings 設定擷取頻率和容許延遲;Full capture 就在旁邊。普通讀取該表時讀取的是表本身;按某個時間讀取,或按某個時間的記錄讀取時,讀取的是它的日誌。
讀取¶
檢視會出現喺 Views 列表,並帶有 HISTORY 標記。佢嘅詳情面板會講明佢保留歷史,並連結到已揀選呢個檢視嘅 SQL 瀏覽器。將瀏覽器嘅 As of 同 As recorded at 選擇器設為所需時間,然後執行查詢。
同樣嘅時間亦會到達其他所有介面。pgwire 工作階段為佢執行嘅每條語句設定一次:
HTTP 標頭、resolve 參數同 REST 參數列於帶歷史嘅檢視。
之後修改¶
編輯器喺檢視嘅 Load and timeliness 分頁顯示 Time Travel 部分。檢視一經建構,佢嘅版本就按業務鍵同有效時間記錄,所以編輯器唔再提供呢兩項,亦唔再提供關閉 Time Travel 嘅開關。記錄時間仍然可以更改。如果要按其他鍵組織歷史,請建立一個新檢視。