關於數倉建設體系,這萬字長文是你要的所有答案

一、資料倉庫的基本概念

資料倉庫概念:

英文名稱為Data Warehouse,可簡寫為DW或DWH。資料倉庫的目的是構建面向分析的整合化資料環境,為企業提供決策支援(Decision Support)。它出於分析性報告和決策支援目的而建立。

資料倉庫本身並不“生產”任何資料,同時自身也不需要“消費”任何的資料,資料來源於外部,並且開放給外部應用,這也是為什麼叫“倉庫”,而不叫“工廠”的原因。

基本特徵:

資料倉庫是面向主題的、整合的、非易失的和時變的資料集合,用以支援管理決策。

1)面向主題

傳統資料庫中,最大的特點是面向應用進行資料的組織,各個業務系統可能是相互分離的。而資料倉庫則是面向主題的。主題是一個抽象的概念,是較高層次上企業資訊系統中的資料綜合、歸類並進行分析利用的抽象。在邏輯意義上,它是對應企業中某一宏觀分析領域所涉及的分析物件。

2)整合性

透過對分散、獨立、異構的資料庫資料進行抽取、清理、轉換和彙總便得到了資料倉庫的資料,這樣保證了資料倉庫內的資料關於整個企業的一致性。

資料倉庫中的綜合資料不能從原有的資料庫系統直接得到。因此在資料進入資料倉庫之前,必然要經過統一與綜合,這一步是資料倉庫建設中最關鍵、最複雜的一步,所要完成的工作有:

要統一源資料中所有矛盾之處,如欄位的同名異義、異名同義、單位不統一、字長不一致,等等;

進行資料綜合和計算。資料倉庫中的資料綜合工作可以在從原有資料庫抽取資料時生成,但許多是在資料倉庫內部生成的,即進入資料倉庫以後進行綜合生成的。

下圖說明一個保險公司綜合資料的簡單處理過程,其中資料倉庫中與“保險” 主題有關的資料來自於多個不同的操作型系統。這些系統內部資料的命名可能不同,資料格式也可能不同。把不同來源的資料儲存到資料倉庫之前,需要去除這些不一致。

關於數倉建設體系,這萬字長文是你要的所有答案

數倉主題

3)非易失性(不可更新性)

資料倉庫的資料反映的是一段相當長的時間內歷史資料的內容,是不同時點的資料庫快照的集合,以及基於這些快照進行統計、綜合和重組的匯出資料。

資料非易失性主要是針對應用而言。資料倉庫的使用者對資料的操作大多是資料查詢或比較複雜的挖掘,一旦資料進入資料倉庫以後,一般情況下被較長時間保留。資料倉庫中一般有大量的查詢操作,但修改和刪除操作很少。因此,資料經加工和整合進入資料倉庫後是極少更新的,通常只需要定期的載入和更新。

4)時變性

資料倉庫包含各種粒度的歷史資料。資料倉庫中的資料可能與某個特定日期、星期、月份、季度或者年份有關。資料倉庫的目的是透過分析企業過去一段時間業務的經營狀況,挖掘其中隱藏的模式。雖然資料倉庫的使用者不能修改資料,但並不是說資料倉庫的資料是永遠不變的。分析的結果只能反映過去的情況,當業務變化後,挖掘出的模式會失去時效性。因此資料倉庫的資料需要更新,以適應決策的需要。從這個角度講,資料倉庫建設是一個專案,更是一個過程。資料倉庫的資料隨時間的變化表現在以下幾個方面:

資料倉庫的資料時限一般要遠遠長於操作型資料的資料時限;

操作型系統儲存的是當前資料,而資料倉庫中的資料是歷史資料;

資料倉庫中的資料是按照時間順序追加的,它們都帶有時間屬性。

1、資料倉庫與資料庫的區別

資料庫與資料倉庫的區別實際講的是 OLTP 與 OLAP 的區別。

操作型處理,叫聯機事務處理 OLTP(On-Line Transaction Processing,),也可以稱面向交易的處理系統,它是針對具體業務在資料庫聯機的日常操作,通常對少數記錄進行查詢、修改。使用者較為關心操作的響應時間、資料的安全性、完整性和併發支援的使用者數等問題。傳統的資料庫系統作為資料管理的主要手段,主要用於操作型處理,像Mysql,Oracle等關係型資料庫一般屬於OLTP。

分析型處理,叫聯機分析處理 OLAP(On-Line Analytical Processing)一般針對某些主題的歷史資料進行分析,支援管理決策。

首先要明白,資料倉庫的出現,並不是要取代資料庫。資料庫是面向事務的設計,資料倉庫是面向主題設計的。資料庫一般儲存業務資料,資料倉庫儲存的一般是歷史資料。

資料庫設計是儘量避免冗餘,一般針對某一業務應用進行設計,比如一張簡單的User表,記錄使用者名稱、密碼等簡單資料即可,符合業務應用,但是不符合分析。資料倉庫在設計是有意引入冗餘,依照分析需求,分析維度、分析指標進行設計。

資料庫是為捕獲資料而設計,資料倉庫是為分析資料而設計。

以銀行業務為例。資料庫是事務系統的資料平臺,客戶在銀行做的每筆交易都會寫入資料庫,被記錄下來,這裡,可以簡單地理解為用資料庫記賬。資料倉庫是分析系統的資料平臺,它從事務系統獲取資料,並做彙總、加工,為決策者提供決策的依據。比如,某銀行某分行一個月發生多少交易,該分行當前存款餘額是多少。如果存款又多,消費交易又多,那麼該地區就有必要設立ATM了。

顯然,銀行的交易量是巨大的,通常以百萬甚至千萬次來計算。事務系統是實時的,這就要求時效性,客戶存一筆錢需要幾十秒是無法忍受的,這就要求資料庫只能儲存很短一段時間的資料。而分析系統是事後的,它要提供關注時間段內所有的有效資料。這些資料是海量的,彙總計算起來也要慢一些,但是,只要能夠提供有效的分析資料就達到目的了。

資料倉庫,是在資料庫已經大量存在的情況下,為了進一步挖掘資料資源、為了決策需要而產生的,它決不是所謂的“大型資料庫”。

2、資料倉庫分層架構

按照資料流入流出的過程,資料倉庫架構可分為:源資料、資料倉庫、資料應用。

關於數倉建設體系,這萬字長文是你要的所有答案

資料倉庫

資料倉庫的資料來源於不同的源資料,並提供多樣的資料應用,資料自下而上流入資料倉庫後向上層開放應用,而資料倉庫只是中間整合化資料管理的一個平臺。

源資料:

此層資料無任何更改,直接沿用外圍系統資料結構和資料,不對外開放;為臨時儲存層,是介面資料的臨時儲存區域,為後一步的資料處理做準備。

資料倉庫:

也稱為細節層,DW層的資料應該是一致的、準確的、乾淨的資料,即對源系統資料進行了清洗(去除了雜質)後的資料。

資料應用:

前端應用直接讀取的資料來源;根據報表、專題分析需求而計算生成的資料。

資料倉庫從各資料來源獲取資料及在資料倉庫內的資料轉換和流動都可以認為是ETL(抽取Extra, 轉化Transfer, 裝載Load)的過程,ETL是資料倉庫的流水線,也可以認為是資料倉庫的血液,它維繫著資料倉庫中資料的新陳代謝,而資料倉庫日常的管理和維護工作的大部分精力就是保持ETL的正常和穩定。

那麼為什麼要資料倉庫進行分層呢?

用空間換時間,透過大量的預處理來提升應用系統的使用者體驗(效率),因此資料倉庫會存在大量冗餘的資料;不分層的話,如果源業務系統的業務規則發生變化將會影響整個資料清洗過程,工作量巨大;

透過資料分層管理可以簡化資料清洗的過程,因為把原來一步的工作分到了多個步驟去完成,相當於把一個複雜的工作拆成了多個簡單的工作,把一個大的黑盒變成了一個白盒,每一層的處理邏輯都相對簡單和容易理解,這樣我們比較容易保證每一個步驟的正確性,當資料發生錯誤的時候,往往我們只需要區域性調整某個步驟即可。

3、 資料倉庫元資料的管理

元資料(Meta Date),主要記錄資料倉庫中模型的定義、各層級間的對映關係、監控資料倉庫的資料狀態及ETL的任務執行狀態。一般會透過元資料資料庫(Metadata Repository)來統一地儲存和管理元資料,其主要目的是使資料倉庫的設計、部署、操作和管理能達成協同和一致。

元資料是資料倉庫管理系統的重要組成部分,元資料管理是企業級資料倉庫中的關鍵元件,貫穿資料倉庫構建的整個過程,直接影響著資料倉庫的構建、使用和維護。

構建資料倉庫的主要步驟之一是ETL。這時元資料將發揮重要的作用,它定義了源資料系統到資料倉庫的對映、資料轉換的規則、資料倉庫的邏輯結構、資料更新的規則、資料匯入歷史記錄以及裝載週期等相關內容。資料抽取和轉換的專家以及資料倉庫管理員正是透過元資料高效地構建資料倉庫;

使用者在使用資料倉庫時,透過元資料訪問資料,明確資料項的含義以及定製報表;

資料倉庫的規模及其複雜性離不開正確的元資料管理,包括增加或移除外部資料來源,改變資料清洗方法,控制出錯的查詢以及安排備份等。

元資料可分為技術元資料和業務元資料。技術元資料為開發和管理資料倉庫的IT 人員使用,它描述了與資料倉庫開發、管理和維護相關的資料,包括資料來源資訊、資料轉換描述、資料倉庫模型、資料清洗與更新規則、資料對映和訪問許可權等。而業務元資料為管理層和業務分析人員服務,從業務角度描述資料,包括商務術語、資料倉庫中有什麼資料、資料的位置和資料的可用性等,幫助業務人員更好地理解資料倉庫中哪些資料是可用的以及如何使用。

由上可見,元資料不僅定義了資料倉庫中資料的模式、來源、抽取和轉換規則等,而且是整個資料倉庫系統執行的基礎,元資料把資料倉庫系統中各個鬆散的元件聯絡起來,組成了一個有機的整體。

二、數倉建模方法

資料倉庫的建模方法有很多種,每一種建模方法代表了哲學上的一個觀點,代表了一種歸納、概括世界的一種方法。常見的有正規化建模法、維度建模法、實體建模法等,每種方法從本質上將是從不同的角度看待業務中的問題。

1、正規化建模法(Third Normal Form,3NF)

正規化建模法其實是我們在構建資料模型常用的一個方法,該方法的主要由 Inmon 所提倡,主要解決關係型資料庫的資料儲存,利用的一種技術層面上的方法。目前,我們在關係型資料庫中的建模方法,大部分採用的是三正規化建模法。

正規化 是符合某一種級別的關係模式的集合。構造資料庫必須遵循一定的規則,而在關係型資料庫中這種規則就是正規化,這一過程也被稱為規範化。目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第三正規化(3NF)、Boyce-Codd正規化(BCNF)、第四正規化(4NF)和第五正規化(5NF)。

在資料倉庫的模型設計中,一般採用第三正規化。一個符合第三正規化的關係必須具有以下三個條件 :

每個屬性值唯一,不具有多義性 ;

每個非主屬性必須完全依賴於整個主鍵,而非主鍵的一部分 ;

每個非主屬性不能依賴於其他關係中的屬性,因為這樣的話,這種屬性應該歸到其他關係中去。

關於數倉建設體系,這萬字長文是你要的所有答案

正規化建模

根據 Inmon 的觀點,資料倉庫模型的建設方法和業務系統的企業資料模型類似。在業務系統中,企業資料模型決定了資料的來源,而企業資料模型也分為兩個層次,即主題域模型和邏輯模型。同樣,主題域模型可以看成是業務模型的概念模型,而邏輯模型則是域模型在關係型資料庫上的例項化。

2、維度建模法(Dimensional Modeling)

維度模型是資料倉庫領域另一位大師Ralph Kimall所倡導,他的《資料倉庫工具箱》是資料倉庫工程領域最流行的數倉建模經典。維度建模以分析決策的需求出發構建模型,構建的資料模型為分析需求服務,因此它重點解決使用者如何更快速完成分析需求,同時還有較好的大規模複雜查詢的響應效能。

關於數倉建設體系,這萬字長文是你要的所有答案

維度建模

典型的代表是我們比較熟知的星形模型(Star-schema),以及在一些特殊場景下適用的雪花模型(Snow-schema)。

維度建模中比較重要的概念就是 事實表(Fact table)和維度表(Dimension table)。其最簡單的描述就是,按照事實表、維度表來構建資料倉庫、資料集市。

目前在網際網路公司最常用的建模方法就是維度建模,稍後將重點講解。

3、實體建模法(Entity Modeling)

實體建模法並不是資料倉庫建模中常見的一個方法,它來源於哲學的一個流派。從哲學的意義上說,客觀世界應該是可以細分的,客觀世界應該可以分成由一個個實體,以及實體與實體之間的關係組成。那麼我們在資料倉庫的建模過程中完全可以引入這個抽象的方法,將整個業務也可以劃分成一個個的實體,而每個實體之間的關係,以及針對這些關係的說明就是我們資料建模需要做的工作。

雖然實體法粗看起來好像有一些抽象,其實理解起來很容易。即我們可以將任何一個業務過程劃分成 3 個部分,實體,事件,說明,如下圖所示:

關於數倉建設體系,這萬字長文是你要的所有答案

實體建模

上圖表述的是一個抽象的含義,如果我們描述一個簡單的事實:“小明開車去學校上學”。以這個業務事實為例,我們可以把“小明”,“學校”看成是一個實體,“上學”描述的是一個業務過程,我們在這裡可以抽象為一個具體“事件”,而“開車去”則可以看成是事件“上學”的一個說明。

三、維度建模

維度建模是目前應用較為廣泛的,專門應用於分析型資料庫、資料倉庫、資料集市建模的方法。資料集市可以理解為是一種“小型資料倉庫”。

1、維度建模中表的型別

1)事實表

發生在現實世界中的操作型事件,其所產生的可度量數值,儲存在事實表中。從最低的粒度級別來看,事實錶行對應一個度量事件,反之亦然。

事實表表示對分析主題的度量。比如一次購買行為我們就可以理解為是一個事實。

關於數倉建設體系,這萬字長文是你要的所有答案

事實與維度

圖中的訂單表就是一個事實表,你可以理解他就是在現實中發生的一次操作型事件,我們每完成一個訂單,就會在訂單中增加一條記錄。事實表的特徵:表裡沒有存放實際的內容,他是一堆主鍵的集合,這些ID分別能對應到維度表中的一條記錄。事實表包含了與各維度表相關聯的外來鍵,可與維度表關聯。事實表的度量通常是數值型別,且記錄數會不斷增加,表資料規模迅速增長。

明細表(寬表)

事實表的資料中,有些屬性共同組成了一個欄位(糅合在一起),比如年月日時分秒構成了時間,當需要根據某一屬性進行分組統計的時候,需要擷取拼接之類的操作,效率極低。如:

關於數倉建設體系,這萬字長文是你要的所有答案

為了分析方便,可以事實表中的一個欄位切割提取多個屬性出來構成新的欄位,因為欄位變多了,所以稱為寬表,原來的成為窄表。

將上述的local_time欄位擴充套件為如下6個欄位:

關於數倉建設體系,這萬字長文是你要的所有答案

又因為寬表的資訊更加清晰明細,所以也可以稱之為明細表。

2)維度表

每個維度表都包含單一的主鍵列。維度表的主鍵可以作為與之關聯的任何事實表的外來鍵,當然,維度錶行的描述環境應與事實錶行完全對應。維度表通常比較寬,是扁平型非規範表,包含大量的低粒度的文字屬性。

維度表示你要對資料進行分析時所用的一個量,比如你要分析產品銷售情況, 你可以選擇按類別來進行分析,或按區域來分析。每個類別就構成一個維度。事實表的圖中的使用者表、商家表、時間表這些都屬於維度表,這些表都有一個唯一的主鍵,然後在表中存放了詳細的資料資訊。

總的說來,在資料倉庫中不需要嚴格遵守規範化設計原則。因為資料倉庫的主導功能就是面向分析,以查詢為主,不涉及資料更新操作。事實表的設計是以能夠正確記錄歷史資訊為準則,維度表的設計是以能夠以合適的角度來聚合主題內容為準則。

2、維度建模三種模式

1)星型模式

星形模式(Star Schema)是最常用的維度建模方式。星型模式是以事實表為中心,所有的維度表直接連線在事實表上,像星星一樣。星形模式的維度建模由一個事實表和一組維表成,且具有以下特點:

維表只和事實表關聯,維表之間沒有關聯;

每個維表主鍵為單列,且該主鍵放置在事實表中,作為兩邊連線的外來鍵;

以事實表為核心,維表圍繞核心呈星形分佈。

關於數倉建設體系,這萬字長文是你要的所有答案

2)雪花模式

雪花模式(Snowflake Schema)是對星形模式的擴充套件。雪花模式的維度表可以擁有其他維度表的,雖然這種模型相比星型更規範一些,但是由於這種模型不太容易理解,維護成本比較高,而且效能方面需要關聯多層維表,效能也比星型模型要低。所以一般不是很常用。

關於數倉建設體系,這萬字長文是你要的所有答案

雪花模式

3)星座模式

星座模式是星型模式延伸而來,星型模式是基於一張事實表的,而星座模式是基於多張事實表的,而且共享維度資訊。前面介紹的兩種維度建模方法都是多維表對應單事實表,但在很多時候維度空間內的事實表不止一個,而一個維表也可能被多個事實表用到。在業務發展後期,絕大部分維度建模都採用的是星座模式。

關於數倉建設體系,這萬字長文是你要的所有答案

星座模型

3、三維度建模過程

我們知道維度建模的表型別有事實表,維度表;模式有星形模型,雪花模型,星座模型這些概念了,但是實際業務中,給了我們一堆資料,我們怎麼拿這些資料進行數倉建設呢,數倉工具箱作者根據自身60多年的實際業務經驗,給我們總結了如下四步,請務必記住!

數倉工具箱中的維度建模四步走:

關於數倉建設體系,這萬字長文是你要的所有答案

維度建模四步走

請牢記以上四步,不管什麼業務,就按照這個步驟來,順序不要搞亂,因為這四步是環環相扣,步步相連。下面詳細拆解下每個步驟怎麼做:

1)選擇業務過程

維度建模是緊貼業務的,所以必須以業務為根基進行建模,那麼選擇業務過程,顧名思義就是在整個業務流程中選取我們需要建模的業務,根據運營提供的需求及日後的易擴充套件性等進行選擇業務。比如商城,整個商城流程分為商家端,使用者端,平臺端,運營需求是總訂單量,訂單人數,及使用者的購買情況等,我們選擇業務過程就選擇使用者端的資料,商家及平臺端暫不考慮。業務選擇非常重要,因為後面所有的步驟都是基於此業務資料展開的。

2)宣告粒度

先舉個例子:對於使用者來說,一個使用者有一個身份證號,一個戶籍地址,多個手機號,多張銀行卡,那麼與使用者粒度相同的粒度屬性有身份證粒度,戶籍地址粒度,比使用者粒度更細的粒度有手機號粒度,銀行卡粒度,存在一對一的關係就是相同粒度。為什麼要提相同粒度呢,因為維度建模中要求我們,在同一事實表中,必須具有相同的粒度,同一事實表中不要混用多種不同的粒度,不同的粒度資料建立不同的事實表。並且從給定的業務過程獲取資料時,強烈建議從關注原子粒度開始設計,也就是從最細粒度開始,因為原子粒度能夠承受無法預期的使用者查詢。但是上卷彙總粒度對查詢效能的提升很重要的,所以對於有明確需求的資料,我們建立針對需求的上卷彙總粒度,對需求不明朗的資料我們建立原子粒度。

3)確認維度

維度表是作為業務分析的入口和描述性標識,所以也被稱為資料倉庫的“靈魂”。在一堆的資料中怎麼確認哪些是維度屬性呢,如果該列是對具體值的描述,是一個文字或常量,某一約束和行標識的參與者,此時該屬性往往是維度屬性,數倉工具箱中告訴我們牢牢掌握事實表的粒度,就能將所有可能存在的維度區分開,並且要確保維度表中不能出現重複資料,應使維度主鍵唯一。

4)確認事實

事實表是用來度量的,基本上都以數量值表示,事實表中的每行對應一個度量,每行中的資料是一個特定級別的細節資料,稱為粒度。維度建模的核心原則之一是同一事實表中的所有度量必須具有相同的粒度。這樣能確保不會出現重複計算度量的問題。有時候往往不能確定該列資料是事實屬性還是維度屬性。記住最實用的事實就是數值型別和可加類事實。所以可以透過分析該列是否是一種包含多個值並作為計算的參與者的度量,這種情況下該列往往是事實。

四、實際業務中數倉分層

數倉分層要結合公司業務進行,並且需要清晰明確各層職責,要保證資料層的穩定又要遮蔽對下游影響,一般採用如下分層結構:

關於數倉建設體系,這萬字長文是你要的所有答案

資料分層架構

1、資料層具體實現

使用四張圖說明每層的具體實現

資料來源層ODS

關於數倉建設體系,這萬字長文是你要的所有答案

資料來源層

資料來源層主要將各個業務資料匯入到大資料平臺,作為業務資料的快照儲存。

資料明細層DW

關於數倉建設體系,這萬字長文是你要的所有答案

資料明細層

事實表中的每行對應一個度量,每行中的資料是一個特定級別的細節資料,稱為粒度。要記住的是同一事實表中的所有度量必須具有相同的粒度。

維度表一般都是單一主鍵,少數是聯合主鍵,注意維度表不要出現重複資料,否則和事實表關聯會出現資料發散問題。

有時候往往不能確定該列資料是事實屬性還是維度屬性。記住最實用的事實就是數值型別和可加類事實。所以可以透過分析該列是否是一種包含多個值並作為計算的參與者的度量,這種情況下該列往往是事實;如果該列是對具體值的描述,是一個文字或常量,某一約束和行標識的參與者,此時該屬性往往是維度屬性。但是還是要結合業務進行最終判斷是維度還是事實。

資料輕度彙總層DM

關於數倉建設體系,這萬字長文是你要的所有答案

資料輕度彙總層

此層命名為輕彙總層,就代表這一層已經開始對資料進行彙總,但是不是完全彙總,只是對相同粒度的資料進行關聯彙總,不同粒度但是有關係的資料也可進行彙總,此時需要將粒度透過聚合等操作進行統一。

資料應用層APP

關於數倉建設體系,這萬字長文是你要的所有答案

資料應用層

資料應用層的表就是提供給使用者使用的,數倉建設到此就接近尾聲了,接下來就根據不同的需求進行不同的取數,如直接進行報表展示,或提供給資料分析的同事所需的資料,或其他的業務支撐。

五、最後

技術是為業務服務的,業務是為公司創造價值的,離開業務的技術是無意義的。所以數倉的建設與業務是息息相關的,公司的業務不同,數倉的建設數倉也是不同的,只有適合的才是最好的。

作者丨園陌

dbaplus社群歡迎廣大技術人員投稿,投稿郵箱:editor@dbaplus。cn

關注公眾號【dbaplus社群】,獲取更多原創技術文章和精選工具下載

Gdevops廣州站:解答2021運維、資料庫、金融科技亟待抉擇的三大問題