為什么要設計數據分層 ——參考《一種通用的數據倉庫分層方法》
這是數據倉庫同學在設計數據分層時首先要被挑戰的問題,類似的問題可能會有很多,比如說“為什么要做數據倉庫?”、“為什么要做元數據管理?”、“為什么要做數據質量管理?”。當然,這里我們只聊一下為什么要做設計數據分層。
作為一名數據的規划者,我們肯定希望自己的數據能夠有秩序地流轉,數據的整個生命周期能夠清晰明確被設計者和使用者感知到。直觀來講就是數據層次、依賴關系清晰。
但是,大多數情況下,我們完成的數據體系卻是依賴復雜、層級混亂的。在不知不覺的情況下,我們可能會做出一套表依賴結構混亂,甚至出現循環依賴的數據體系。
因此,我們需要一套行之有效的數據組織和管理方法來讓我們的數據體系更有序,這就是談到的數據分層。數據分層並不能解決所有的數據問題,但是,數據分層卻可以給我們帶來如下的好處:
-
清晰數據結構:每一個數據分層都有它的作用域和職責,在使用表的時候能更方便地定位和理解
-
減少重復開發:規范數據分層,開發一些通用的中間層數據,能夠減少極大的重復計算
-
統一數據口徑:通過數據分層,提供統一的數據出口,統一對外輸出的數據口徑
-
復雜問題簡單化:將一個復雜的任務分解成多個步驟來完成,每一層解決特定的問題
數倉分層 ——參考數據中台-數據體系建設
貼源數據層ODS、統一數倉層DW(細分為明細數據層DWD和匯總數據層DWS)、標簽數據層TDM、應用數據層ADS。
其中,DW層采用維度建模的思想,包含維度表與事實表。涉及到常用的事實表如下:
1)事務事實表-記錄業務事務級別數據(增量更新)
2)周期快照事實表-記錄時間周期內的聚集事實或狀態度量(增量更新)
3)累計快照事實表-覆蓋一個事務從開始到結束之間所有關鍵事件(全量刷新)
事務事實 | 周期快照 | 累計快照 | |
周期 | 離散的事務發生時間點 | 以有規律的間隔產生快照 | 時間跨度不確定的變化的流程節點 |
粒度 | 每個事務或事務線一行 | 每個快照周期加其他維度一行 | 每次管道事件一行(包含事件整個流程) |
日期維度 | 事務日期 | 快照日期 | 管道事件中每個里程碑節點涉及多日期 |
事實 | 事務度量 | 時間間隔內累積度量、狀態度量 | 管道事件度量 |
事實表稀疏性 | 與事務活動有關 | 稠密 | 與管道事件有關 |
事實表更新 | 增量更新 | 增量更新 | 全量刷新 |
其他 ——無事實的事實表、聚集事實表、合並事實表
無事實的事實表
只是形容存在某些事件,沒有可記錄的數字化事實。常用於兩個場景:
1)“關注什么未發生”。如處於銷售狀態但尚未銷售的產品(沒有發生銷售事實)有哪些,需要由促銷范圍事件表產品(無促銷事實)-銷售事實表中已賣出產品。
2)“客戶/代理分配”。銷售經理與客戶分配關系表(有一本書專門講了“關系”),如尚未產生銷售事實的代理分配有哪些,需要由分配關系-已發生銷售行為的分配關系。
聚集事實表
對多個原子粒度事實表進行事務度量匯總、進行簡單的數字化上卷獲得。
合並事實表
將來自多過程的事實打橫,以相同粒度合並放在一個單一的事實表中。難點在於不同的過程事實的公共維度處理。