資料倉儲分層你清楚了嗎

ITPUB社群發表於2022-12-09

為什麼要分層

在實際的工作中,我們都希望自己的資料能夠有順序地流轉,設計者和使用者能夠清晰地知道資料的整個宣告週期。優秀可靠的數倉體系,需要良好的資料分層結構。合理的分層,能夠使資料體系更加清晰,使複雜問題得以簡化。合理的分層概括就是:清晰的資料結構與依賴,提高開發效率,合理的資料許可權。具體具有以下優點:

資料結構與依賴關係:如果沒有清晰的分層,可能會做出一套表依賴結構混亂,且出現迴圈依賴的資料體系,讓流程越走越越死。

減少重複開發的成本:建立一個或者多個模型,可以為支業務撐建立多個指標。規範資料分層,開發通用的中間層,可以極大地減少重複計算的工作。

統一資料口徑:透過資料分層,提供統一的資料出口,統一輸出口徑。

資料一致性:對於公共下沉資料,下游使用的時候不再重新計算,可以保證一定是資料一致性問題。

資料許可權:透過分層,可以更方便地對不同層,不同的資料模型進行許可權管理,特定業務場景下,對不同的開發人員和業務人員遮蔽一些敏感的資料。

怎麼分層

ODS(原始資料層)

存放最原始的資料,結構和源系統保持一致,減少對業務系統的影響。

DWD(明細資料層)

在維度建模的理論上進行構建,存放維度模型中的事實表,儲存各業務過程最小粒度的操作記錄。有時候,為了提高資料明細層的易用性,該層會採用一些維度退化手法,將維度退化至事實表中,減少事實表和維表的關聯。

DIM(公共維度層)

在維度建模的理論上進行構建,存放維度模型中的維度表,儲存一致性維度資訊。維度類分兩種型別(自己概括的):

大維度資料:比如使用者維度等等

小維度資料:比如配置表,日期表,地區表等等

DWS(彙總資料層)

基於上層的指標需求,以分析的主題物件作為建模驅動,構建公共統計粒度的彙總表。該層的資料表會相對比較少,一張表會涵蓋比較多的業務內容,由於其欄位較多,因此一般也會稱該層的表為寬表。主要作用就是提升指標的複用性,減少重複加工。單維度下的輕度彙總表維度單一,統計指標豐富,迭代更靈活;多維度的輕度彙總表,維度豐富,統計指標有限,迭代相對複雜。

ADS(資料應用層)

存放各項統計指標結果。

分層的誤區

數倉層內部的劃分不是為了分層而分層,分層是為了解決資料 任務及工作流的組織、資料的流向、讀寫許可權的控制、不同需求的滿足等各類問題。對於上面分層羅列,是種通用的建設分層邏輯。可能你也看到有四層的,有六層的,甚至更多的,比如DWD,DWB,DIM,DWM,MID......雖然每層你知道什麼意思,但是有時候不是很清楚這些層之間的分割線是什麼,出現複雜的業務反而讓我們無法下手。所以各個業務不同,需要合適自己的就好。

所謂的寬表

經歷幾家公司,也聽過好多公司,通常做法是把很多的維度、事實相關聯後形成一個所謂的寬表。可能剛開始維度資料比較少,但是跟著業務的增長冗餘維度增加,寬表足夠的事實,足夠的維度寬。帶來影響就是沒有清晰的表結構和隨意增長的寬度。

所以,一些人開始強調劃分主題,按照某一主題事實去擴充套件維度。也即寬表的涉及不依賴具體的業務需求而是根據整體業務線相匹配。

分層規則與規範

ODS

(1) 根據源業務系統表的情況以增量或全量方式抽取資料。

(2) 以統計日期和時間進行分割槽儲存。

(3) 資料基本不做清洗和轉換,資料的表結構和資料粒度與原業務系統保持一致。

DWD

(1)對資料做清洗、轉換,脫敏等等處理,可以對錶結構進行裁剪和彙總等操作。

(2)不是所有的資料都要永久儲存,根據業務週期去做出決定。

DWD層中主要的事實表有三種型別 : 事務事實表、週期快照事實表和累積快照事實表。

事務型事實表

是什麼

事務事實表用來記錄各業務過程,跟蹤時間上某點的度量事件,它儲存的是各業務過程的原子操作事件,即最細粒度。

場景

事務型事實表可用於分析與各業務過程相關的各項統計指標,由於其儲存了最細粒度的記錄,可以提供最大限度的靈活性,可以支援無法預期的各種細節層次的統計需求。

不適合幹什麼

(1)存量型指標不適合

比如說商品庫存,賬戶餘額... 對於這種存在進進出出(加或減操作)不適合。一張儲存商品的進貨的原子操作事件,一張儲存商品出庫的原子操作事件。如果要統計當日的庫存有多少,這就需要對進貨表和出庫表進行操作,需要一正一反地區分對庫存的影響。所以在寫程式碼或者sql過程還是執行效率都會打折扣。

(2)多事務關聯統計不適合

比如在訂單中,建立了下單事務事實表和支付事務事實表,現在指標統計某個時間內使用者下單到支付的時間間隔的平均值,這就需要這兩個表的Join操作,然而,訂單在大型公司屬於大表,大表 Join 大表 你可想而知。

週期型快照事實表

週期快照事實表以具有規律性的、可預見的時間間隔來記錄事實,一般週期可以是每天、每週、每月、每年等。主要用於分析一些存量型或者狀態型指標

場景

存量型:例如對於商品庫存、賬戶餘額這些存量型指標,業務系統中通常就會計算並儲存最新結果,所以定期同步一份全量資料到資料倉儲,構建週期型快照事實表,就能輕鬆應對此類統計需求。

狀態型:例如對於空氣溫度、行駛速度這些狀態型指標,由於它們的值往往是連續的,我們無法捕獲其變動的原子事務操作,所以無法使用事務型事實表統計此類需求。而只能定期對其進行取樣,構建週期型快照事實表。

累積型快照事實表

用來描述過程開始和結束之間的關鍵步驟事件,覆蓋過程的整個生命週期,通常具有多個時間欄位來記錄關鍵時間點,當過程隨著生命週期不斷變化時,記錄也會隨著過程的變化而被修改。

場景

如交易流程中的下單、支付、發貨、確認收貨業務過程。會具體記錄下單時間,支付時間,發貨時間,收穫時間。如果統計某個時間內使用者下單到支付的時間間隔的平均值。這樣就輕鬆搞定。

對比

-事務型事實表週期型事實表累積型快照事實表
時間離散事務時間每天、每週、每月、每年等多個時間欄位來記錄關鍵時間點
粒度每行代表實體的一個事務每行代表某時間週期的一個實體每行代表一個實體的生命週期
資料載入方式insertinsertinsert/update

DIM

(1) 維度在不同的業務表中的欄位名稱、資料型別、資料內容必須保 持一致。

(2)可以將維度與關聯性強的欄位進行整合,一種是水平整合:不同的表包含不同的資料,會使得維度本身的記錄數變多,是對原有維度的記錄數上的補充。另一種是垂直整合:不同的來源表包含相同的資料集,維度本身記錄數不會變,只是會對維度屬性進行補充。

(3)拆分針對重要性,業務相關性、源、使用頻率等可分為核心表、擴充套件 表。一種是水平拆分:兩個業務相關性低,整合在一起會對模型的穩定性和易用性產生影響。另一種是垂直拆分:維度屬性從落庫時間,使用頻次,等等因素考慮上需要進行拆分放到子維度上。

DWS

(1)存放比較全的歷史資料,業務發生變化時易於擴充套件,適應複雜的實際業務情況。

(2)儘量減少資料訪問時的計算量,最佳化表的關聯。

(3)可以有資料冗餘。

(4)不要在同一個表中儲存不同粒度的聚集資料。

ADS

(1)資料公用性。

(2)清晰明瞭的統計週期。

(3)等你補充......

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2927528/,如需轉載,請註明出處,否則將追究法律責任。

相關文章