數倉是一個面向主題的、集成的、穩定的、時變的,存儲歷史數據的倉庫。
面向主題的:數倉中的數據按照主題進行存儲,每個主題都是決策層分析的一個角度;
集成的:不同來源的數據會統一整合后存入數倉中;
穩定的:數據一旦進入倉庫后不會輕易發生改變,就算數據本身需要變化也輕易不會改動原數據,會根據分析需求考慮數據的更新策略;
時變的:隨着時間的推移,長時間不更新的數據會逐漸失去時效性,失去時效性的數據一般會被導出到外部壓縮存儲。目前常用的策略是"7年13個月",即保存維度信息的拉鏈表不保存七年前的數據,保存流水信息的事實表不保存13個月前的數據。
當然,上述保存策略也是根據情況決定,利用價值較低的原始數據可能只保存一個周期就被導出,高度聚合的數據可能保存更長的時間。
數倉分層
數倉往往分為三層,ods、dw、dm,而dw層又可以根據業務細分為dwd、dws、dwa等多層
ods層
操作型數據層,存放的是從不同來源進入數倉的原始數據,ods層往往只存放少量加工的原始數據,因此這里的數據不是集成的。
dw層
數據倉庫的核心,它根據數倉架構可能再次細分多層:
dwd層
數據細節層。將ods層的數據統一整合后,依照各主題需要將數據拆分存儲,常見的星型模型和雪花模型就是在這一層。
dws層
數據服務層。按照范式存儲的數據在分析時往往需要進行多表join,這樣的分析效率很低,因此需要將dwd層的數據按照分析需求提前進行整合。由於主題之間的重合,該層的設計是反三范式的,存在數據冗余。
除了上述分層以外,dw還有基礎數據層、輕度匯總層等等,根據數倉架構而定。
DIM層
維度層。有些數倉會將dwd層中的維度表單獨抽離出來維護。
dm層
存放使用DW層數據進行業務統計的結果,它們可能被用於線上可視化的指標分析,也可能用於進一步的數據挖掘使用。
分層作用:復雜問題簡單化、減少重復計算、血緣追蹤、架構更清晰。
表的種類和特征
事務事實表:可以看做是保存某一事務的日志數據,事務一旦被提交就成為歷史數據,只能以增量的方式維護。
維度表:從某個角度觀察事實數據的窗口,存儲的數據用來從某個角度描述事實。
全量表:保存每天所有的最新狀態的數據
增量表:當數據改變時,將這個改變和改變后的結果記錄下來,就是增量表。(a賬戶分兩次存了100塊,增量表顯示為a賬戶金額100,200,並分別記錄變化時間)
拉鏈表:用特定字段維護緩慢變化維度的表
流水表:記錄表中所有改變的表。
周期快照表:按固定周期對事實表進行統計生成的表,按時間段保存記錄,增量更新。
累積快照表:按過程對事實表進行統計生成的表,將每個事務切分成多個小事務,明確開始和結束的狀態,每個小事務只保存一條結果。
拉鏈表如何實現
使用SCD策略維護特定字段實現。SCD1:不保存歷史數據,直接覆蓋更新SCD2:通過維護一個記錄時間和一個過期時間來保存變化歷史,增量更新SCD3:通過維護一個歷史字段來保存上次的數據,更新數據時,先檢查舊數據是否存在,如果存在就把舊數據的最新值保存到新數據的舊值字段,采用覆蓋更新的方式存儲數據。SCD4:單獨建立一個歷史維度表為該字段維護歷史變化。SCD5:混合使用123的維護策略。
