1. 程式人生 > 實用技巧 >技術分享丨資料倉庫的建模與ETL實踐技巧

技術分享丨資料倉庫的建模與ETL實踐技巧

摘要:如何搭建資料倉庫,在這個過程中都應該遵循哪些方法和原則,專案實踐中有哪些技巧。

一、資料倉庫的“心臟”

首先來談談資料模型。模型是現實世界特徵的模擬和抽象,比如地圖、建築設計沙盤,飛機模型等等。

而資料模型DataModel是現實世界資料特徵的抽象。

在資料倉庫專案建設中,資料模型的建立具有重要的意義,客戶的業務場景,流程規則,行業知識都體現在通過資料模型表現出來,在業務人員和技術人員之間搭建起來了一個溝通的橋樑,所以在國外一些資料倉庫的文獻中,把資料模型稱之為資料倉庫的心臟“TheHeartoftheDataWarehouse”。

資料模型設計的好壞直接影響資料的

  • 穩定性
  • 易用性
  • 訪問效率
  • 儲存容量
  • 維護成本

二、資料倉庫中資料模型,資料分層和ETL程式

2.1概述

資料倉庫是一種通過(準)實時/批量的方式把各種外部資料來源整合起來後,採用多種方式提供給終端使用者進行資料消費的資訊系統。

面對繁多的上游業務系統而言,資料倉庫的一個重要任務就是進行資料清洗和整合,形成一個標準化的規範化的資料結構,為後續的一致性的資料分析提供可信的資料基礎。

另一方面資料倉庫裡面的資料要發揮價值就需要通過多種形式表現,有用於瞭解企業生產狀況的固定報表,有用於向管理層彙報的KPI駕駛艙,有用於大屏展示的實時資料推送,有用於部門應用的資料集市,也有用於分析師的資料實驗室...對於不同的資料消費途徑,資料需要從高度一致性的基礎模型轉向便於資料展現和資料分析的維度模型。不同階段的資料因此需要使用不同架構特點的資料模型與之相匹配,這也就是資料在資料倉庫裡面進行資料分層的原因。

資料在各層資料中間的流轉,就是從一種資料模型轉向另外一種資料模型,這種轉換的過程需要藉助的就是ETL演算法。打個比方,資料就是資料倉庫中的原材料,而資料模型是不同產品形態的模子,不同的資料層就是倉庫的各個“車間”,資料在各個“車間”的形成流水線式的傳動就是依靠排程工具這個流程自動化軟體,執行SQL的客戶端工具是流水線上的機械臂,而ETL程式就是驅動機械臂進行產品加工的演算法核心。

上圖是資料倉庫工具箱-維度建模權威指南一書中的資料倉庫混合輻射架構

2.2金融行業中的分層模型

金融行業中的資料倉庫是對模型建設要求最高也是最為成熟的一個行業,在多年的金融行業資料倉庫專案建設過程中,基本上都形成了緩衝層,基礎模型層,彙總層(共性加工層),以及集市層。不同的客戶會依託這四層模型做不同的演化,可能經過合併形成三層,也可能經過細分,形成5層或者6層。本文簡單介紹最常見的四層模型:

緩衝層:有的專案也稱為ODS層,簡單說這一層資料的模型就是貼源的,對於倉庫的使用者就是在倉庫裡面形成一個上游系統的落地緩衝帶,原汁原味的生產資料在這一層得以儲存和體現,所以這一層資料保留時間週期較短,常見的是7~15天,最大的用途是直接提供基於源系統結構的簡單原貌訪問,如審計等。

基礎層:也稱為核心層,基礎模型層,PDM層等等。資料按照主題域進行劃分整合後,較長週期地儲存詳細資料。這一層資料高度整合,是整個資料倉庫的核心區域,是所有後面數據層的基礎。這一層儲存的儲存的資料最少13個月,常見的是2~5年。

集市層:先跳到最後一層。集市層的資料模型具備強烈的業務意義,便於業務人員理解和使用,是為了滿足部門使用者,業務使用者,關鍵管理使用者的訪問和查詢所使用的,而往往對接前段門戶的資料查詢,報表工具的訪問,以及資料探勘分析工具的探索。

彙總層:彙總層其實並不是一開始就建立起來的。往往是基礎層和集市層建立起來後,發現眾多的集市層資料進行彙總,統計,加工的時候存在對基礎層資料的反覆查詢和掃描,而不同部門的資料集市的統計演算法實際上是有共性的,所以主鍵的在兩層之間,把具有共性的彙總結果形成一個獨立的資料層次,承上啟下,節省整個系統計算資源。

2.3資料倉庫常見ETL演算法

雖然資料倉庫裡面資料模型對於不同行業,不同業務場景有著千差萬別,但從本質上從緩衝層到基礎層的資料加工就是對於增/全量資料如何能夠高效地追加到基礎層的資料表中,並形成合理的資料歷史變化資訊鏈條;而從基礎層到彙總層進而到集市層,則是如何通過關聯,彙總,聚合,分組這幾種手段進行資料處理。所以長期積累下來,對於資料層次之間的資料轉換演算法實際上也能形成固定的ETL演算法,這也是市面上很多資料倉庫程式碼生成工具能夠自動化地智慧化地形成無編碼方式開發資料倉庫ETL指令碼的原因所在。這裡由於篇幅關係,只簡單列舉一下緩衝層到基礎層常見的幾種ETL演算法,具體的演算法對應的SQL指令碼可以找時間另起篇幅詳細地介紹。

1.全表覆蓋A1
演算法說明:刪除目標表全部資料,再插入當前資料
來源資料量:全量資料
適用場景:無需保留歷史軌跡,只使用最新狀態資料

2.更新插入(Upsert)A2
演算法說明:本日資料按照主鍵比對後更新資料,新增的資料採用插入的方式增加資料
來源資料量:增量或全量資料
適用場景:無需保留歷史軌跡,只使用最新狀態資料

3.歷史拉鍊(Historychain)A3
演算法說明:資料按照主鍵與上日資料進行比對,對更新資料進行當日的關鏈和當日開鏈操作,對新增資料增加當日開鏈的記錄
來源資料:增量或全量資料
適用場景:需要保留歷史變化軌跡的資料,這部分資料會忽略刪除資訊,例如客戶表、賬戶表等

4.全量拉鍊(FullHistorychain)A4
演算法說明:本日全量資料與拉鍊表中上日資料進行全欄位比對,比對結果中不存在的資料進行當日關鏈操作,對更新資料進行當日關鏈和當日開鏈操作,對新增資料增加當日開鏈的記錄
來源資料量:全量資料
適用場景:需要保留歷史變化軌跡的資料,這部分資料會由資料比對出刪除資訊進行關鏈

5.帶刪除增量拉鍊(Fx:DeltaHistoryChain)A5
演算法說明:本日增量資料根據增量中變更標誌對刪除資料進行當日關鏈操作,對更新和新增資料與上日按主鍵比對後根據需要進行當日關鏈和當日開鏈操作,對新增資料增加當日開鏈的記錄
來源資料量:增量資料
適用場景:需要保留歷史變化軌跡的資料,這部分資料會根據CHG_CODE來判斷刪除資訊

6.追加演算法(Append)A6
演算法說明:刪除當日/月的增量資料,插入本日/月的增量資料
來源資料量:增量資料
適用場景:流水類或事件類資料

三、GaussDB(DWS)和資料倉庫

華為的GaussDB(DWS)是一種基於公有云基礎架構的分散式MPP資料庫。其主要面向海量資料分析場景。MPP資料庫是業界實現資料倉庫系統最主流的資料庫架構,這種架構的主要特點就是Shared-nothing分散式架構,由眾多擁有獨立且互不共享的CPU、記憶體、儲存等系統資源的邏輯節點(也就是DN節點)組成。

在這樣的系統架構中,業務資料被分散儲存在多個節點上,SQL被推送到資料所在位置就近執行,並行地完成大規模的資料處理工作,實現對資料處理的快速響應。基於Shared-Nothing無共享分散式架構,也能夠保證隨著叢集規模地擴充套件,業務處理能力得到線性增長。

點選關注,第一時間瞭解華為雲新鮮技術~