資料倉儲(8)數倉事實表和維度表技術

張飛的豬發表於2022-04-20

所謂的事實表和維度表技術,指的就是如何和構造一張事實表和維度表,是的事實表和維度表,可以涵蓋現在目前的需要和方便後續下游資料應用的開發。

事實表,就是一個事實的集合。事實來自業務過程的度量,基本上以數量值表示。事實錶行對應一個事實,一個事實對應一個物理可以觀察的事件,例如,再零售事件中,銷售數量與總額是資料事實,與銷售事件不相關的度量不可以放在同一個事實表裡面,如員工的工資。

事實表是實際發生的度量,對應的,這些度量我們可以分為三中型別:可加、半可加、不可加。可加性度量可以按照與事實表關聯的任意維度彙總。半可加度量可以對某些維度彙總,但不能對所有維度彙總。差額是常見的半可加事實,除了時間維度之外,它們可以跨越所有維度進行加法操作。不可加度量,比如比率,任何維度都不能直接相加。因此對於不可加度量,我們要儘可能的把不可加度量拆分為可加度量,例如比率,我們可以分別儲存他們的分子和分母,使其轉為可加度量。

對於事實表,還有一類值NULL,需要我們去校驗和保證,對於事實表的度量,我們可以允許存在NULL,不過對於一些外來鍵,則不能存在空值,否在會導致違反參照完整性的情況發生,我們可以賦予預設的代理鍵來表示未知或者NULL的情況。

參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證資料的一致性。參照完整性又稱引用完整性。

如果一個度量出現在多個事實表裡面,我們還需要保證,多個事實表彙總到同一個維度的時候,度量的值相等,並且命名儘量相同,這就是一致性事實。一致性事實可以保證資料口徑的一致和取數方便。如何保證資料事實的一致性呢?如何保證多張事實表相同欄位相同?這裡建議有兩個,一是欄位名稱相同,二是開發完成的時候,可以對錶資料的值比對,並且可以起一個資料校驗的任務,定時校驗比對,如果有問題就告警。

簡單的,我們可以大概分為事務事實表,週期快照事實表,累計快照事實表,無事實的事實表。

  • 事務事實表:事務事實表的一行對應空間或者時間上某點的度量事件。即流水行資料。
  • 週期快照事實表:週期快照事實表中的每一行彙總了發生在某一標準週期,例如某一天的多個事實。即按某個維度輕度彙總的資料。
  • 累計快照事實表:累積快照事實表的行彙總了發生在過程開始和結束之間可預測步驟內的度量事件。也就是記錄整一個業務過程,如下單,包含下單時間,支付時間,賠付時間等。
  • 無事實的事實表:有一些事件是沒有事實的,事實包含多個度量,也就是部分事件沒有度量,只有維度,例如某天學生參加的課程。

三種事實表的比較

接下來說說維度表的一些要點,維度表包含單一的主鍵列。維度表的主鍵可以作為與之關聯的任何事實表的外來鍵,當然,維度錶行的描述環境與事實錶行完全對應。

維度表開發過程中有下面幾個點。

  • 維度代理鍵,維度表中會包含一個列,表示唯一主鍵,該主鍵不是操作型系統的自然鍵,如果採用自然鍵,需要多個維度行表示,另外,維度的自然鍵可能由多個源系統建立,這些自然鍵可能會出現相容性問題。所以這裡可以對代理鍵做一些處理,具體可以看業務形態,如果源系統已經保證了唯一,直接應用也是沒有問題的。
  • 退化維度,有時,維度除了主鍵外沒有其他內容,例如訂單表裡面的發票維度只有發票號,沒有其他的資訊,那麼我們可以將這個維度放入事實表裡面,這個就是退化維度。
  • 一致性維度,當不同的維度表的屬性具有相同列名和領域內容時,稱維度具有一致性。利用一致性維度屬性與每一個事實表關聯,可將來自不同事實表的資訊合併到同一個報表裡面。

我們整理了維度表和事實表之後,我們需要形成一個匯流排矩陣。匯流排矩陣用於設計資料倉儲架構的基本工具,矩陣的行表示業務過程,列代表維度。矩陣中的點表示維度與給定的業務過程是否存在關係,如下圖。

資料倉儲匯流排矩陣

形成這樣的一個架構之後,我們的資料倉儲的結構分層,和裡面的資料表設計完成了,就可以進行同步和開發了。

參考資料:資料倉儲(8)數倉事實表和維度表技術

相關文章