【讀書筆記】《 Hadoop構(gòu)建數(shù)據(jù)倉庫實踐》第1章

02-《 Hadoop構(gòu)建數(shù)據(jù)倉庫實踐》.jpg

第1章 數(shù)據(jù)倉庫簡介

1.1 什么是數(shù)據(jù)倉庫

Inmon將數(shù)據(jù)倉庫描述為一個面向主題的、集成的、隨時間變化的、非易失的數(shù)據(jù)集合,用于支持管理者的決策過程。

1.3 數(shù)據(jù)倉庫架構(gòu)

1.3.2 主要數(shù)據(jù)倉庫架構(gòu)

在數(shù)據(jù)倉庫技術(shù)演化過程中,產(chǎn)生了幾種主要的架構(gòu)方法,包括數(shù)據(jù)集市架構(gòu)、Inmon企業(yè)信息工廠架構(gòu)、Kimball數(shù)據(jù)倉庫架構(gòu)和混合型數(shù)據(jù)倉庫架構(gòu)。

1. 數(shù)據(jù)集市架構(gòu)

數(shù)據(jù)集市是按主題域組織的數(shù)據(jù)集合,用于支持部門級的決策。有兩種類型的數(shù)據(jù)集市:獨立數(shù)據(jù)集市和從屬數(shù)據(jù)集市。

獨立數(shù)據(jù)集市集中于部門所關(guān)心的單一主題域,數(shù)據(jù)以部門為基礎(chǔ)部署,無須考慮企業(yè)級別的信息共享與集成。例如,制造部門、人力資源部門和其他部門都各自有他們自己的數(shù)據(jù)集市。獨立數(shù)據(jù)集市從一個主題域或一個部門的多個事務(wù)系統(tǒng)獲取數(shù)據(jù),用以支持特定部門的業(yè)務(wù)分析需要。一個獨立數(shù)據(jù)集市的設(shè)計既可以使用實體關(guān)系模型,也可以使用多維模型。數(shù)據(jù)分析或商業(yè)智能工具直接從數(shù)據(jù)集市查詢數(shù)據(jù),并將查詢結(jié)果顯示給用戶。一個典型的獨立數(shù)據(jù)集市架構(gòu)如圖1-2所示。

圖1-2 獨立數(shù)據(jù)集市架構(gòu)

另外一種數(shù)據(jù)集市是從屬數(shù)據(jù)集市。如Bill Inmon所說,從屬數(shù)據(jù)集市的數(shù)據(jù)來源于數(shù)據(jù)倉庫。數(shù)據(jù)倉庫里的數(shù)據(jù)經(jīng)過整合、重構(gòu)、匯總后傳遞給從屬數(shù)據(jù)集市。從屬數(shù)據(jù)集市的架構(gòu)如圖1-3所示。

圖1-3 從屬數(shù)據(jù)集市架構(gòu)

2. Inmon企業(yè)信息工廠架構(gòu)(CIF)

圖1-4 Inmon企業(yè)信息工廠架構(gòu)

● 企業(yè)級數(shù)據(jù)倉庫:是該架構(gòu)中的核心組件。正如Inmon數(shù)據(jù)倉庫所定義的,企業(yè)級數(shù)據(jù)倉庫是一個細節(jié)數(shù)據(jù)的集成資源庫。其中的數(shù)據(jù)以最低粒度級別被捕獲,存儲在滿足三范式設(shè)計的關(guān)系數(shù)據(jù)庫中。

三范式定義

(1) 第一范式(1NF)

數(shù)據(jù)庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構(gòu)成,包括整型、實數(shù)、字符型、邏輯型、日期型等。

例如,電話的字段就可能不符合第一正規(guī)化,因為每個人可能有一個以上的電話需要記錄,這時最簡單的做法就是將字段增加,不要用電話當字段名稱,用家里電話、手機、辦公室電話、分機號碼、宿舍電話等。

(2) 第二范式(2NF)

規(guī)則是符合第一范式,而且沒有部分主鍵功能決定其他屬性的現(xiàn)象,也就是主鍵之外的其他屬性都完全的功能相依于主鍵。

假定選課關(guān)系表為SelectCourse(學(xué)號,姓名,年齡,課程名稱,成績,學(xué)分),關(guān)鍵字為組合關(guān)鍵字(學(xué)號,課程名稱),因為存在如下決定關(guān)系:(學(xué)號,課程名稱)→(姓名,年齡,成績,學(xué)分)。

這個數(shù)據(jù)庫表不滿足第二范式,因為存在如下決定關(guān)系:

(課程名稱)→(學(xué)分),即知道課程,就可以知道該課程的學(xué)分。

(學(xué)號)→(姓名,年齡),即知道了學(xué)號,就可以知道該學(xué)生的姓名和年齡。

① 數(shù)據(jù)冗余

同一門課程由n個學(xué)生選修,“學(xué)分”就重復(fù)n?1次;同一個學(xué)生選修了m門課程,姓名和年齡就重復(fù)了m?1次。

② 更新異常

若調(diào)整了某門課程的學(xué)分,數(shù)據(jù)表中所有行的“學(xué)分”值都要更新,否則會出現(xiàn)同一門課程學(xué)分不同的情況。

③ 插入異常

假設(shè)要開設(shè)一門新的課程,暫時還沒有人選修。這樣,由于還沒有“學(xué)號”關(guān)鍵字,課程名稱和學(xué)分也無法記錄入數(shù)據(jù)庫。

④ 刪除異常

假設(shè)一批學(xué)生已經(jīng)完成課程的選修,這些選修記錄就應(yīng)該從數(shù)據(jù)庫表中刪除。但是,與此同時,課程名稱和學(xué)分信息也被刪除了。很顯然,這也會導(dǎo)致插入異常。

把選課關(guān)系表SelectCourse改為如下三個表。

學(xué)生:Student(學(xué)號,姓名,年齡)

課程:Course(課程名稱,學(xué)分)

選課關(guān)系:SelectCourse(學(xué)號,課程名稱,成績)

這樣的數(shù)據(jù)庫表是符合第二范式的,消除了數(shù)據(jù)冗余、更新異常、插入異常和刪除異常。

(3) 第三范式(3NF)

在第二范式的基礎(chǔ)上,數(shù)據(jù)表中如果不存在非關(guān)鍵字段對任一候選關(guān)鍵字段的傳遞函數(shù)依賴則符合第三范式。

所謂傳遞函數(shù)依賴,指的是如果存在“A→B→C”的決定關(guān)系,則C傳遞函數(shù)依賴于A。因此,滿足第三范式的數(shù)據(jù)庫表應(yīng)該不存在如下依賴關(guān)系:關(guān)鍵字段→非關(guān)鍵字段x→非關(guān)鍵字段y。

假定學(xué)生關(guān)系表為Student(學(xué)號,姓名,年齡,所在學(xué)院,學(xué)院地點,學(xué)院電話),關(guān)鍵字為單一關(guān)鍵字“學(xué)號”,因為存在如下決定關(guān)系:

(學(xué)號)→(姓名,年齡,所在學(xué)院,學(xué)院地點,學(xué)院電話)

這個數(shù)據(jù)庫是符合2NF的,但是不符合3NF,因為存在如下決定關(guān)系:

(學(xué)號)→(所在學(xué)院)→(學(xué)院地點,學(xué)院電話)

把學(xué)生關(guān)系表分為如下兩個表。

學(xué)生:(學(xué)號,姓名,年齡,所在學(xué)院);

學(xué)院:(學(xué)院,地點,電話)。

(4) BCNF范式

BCNF范式(Boyce/Codd Normal Form),是由R.F.Boycy和E.F. Codd共同提出的,可以算成是第三正則化的補充,規(guī)則是符合第三正則化原則,并且沒有非主鍵屬性可以功能性決定部分主鍵的現(xiàn)象。

假設(shè)有一個表R,其中的屬性有A,B,C,D,E,以A和B為復(fù)合主鍵,R={A,B,C,D,E},如果存在有非主鍵屬性,比如說C可以功能性決定B,C→B,而B是主鍵的一部分,這時第三正則化是沒有辦法分辨出來這種錯誤的,所以有BCNF正則化規(guī)則來把關(guān),同樣地,BCNF正則化的方法也是將原來的表拆開,成立一個新的關(guān)聯(lián)表R1來裝C→B,R1={C,B},但原來的表R還是以(A,B)為復(fù)合主鍵,以B為外鍵關(guān)聯(lián)到新的表去,以保留原有的信息。

R={A,B,D,E},R1={C,B},R.B=R1.B

3. Kimball數(shù)據(jù)倉庫架構(gòu)

Kimball數(shù)據(jù)倉庫架構(gòu)如圖1-5所示。

圖1-5 Kimball數(shù)據(jù)倉庫架構(gòu)

對比上一張圖可以看到,Kimball與Inmon兩種架構(gòu)的主要區(qū)別在于核心數(shù)據(jù)倉庫的設(shè)計和建立。Kimball的數(shù)據(jù)倉庫包含高粒度的企業(yè)數(shù)據(jù),使用多維模型設(shè)計,這也意味著數(shù)據(jù)倉庫由星型模式的維度表和事實表構(gòu)成。分析系統(tǒng)或報表工具可以直接訪問多維數(shù)據(jù)倉庫里的數(shù)據(jù)。在此架構(gòu)中的數(shù)據(jù)集市也與Inmon中的不同。這里的數(shù)據(jù)集市是一個邏輯概念,只是多維數(shù)據(jù)倉庫中的主題域劃分,并沒有自己的物理存儲,也可以說是虛擬的數(shù)據(jù)集市。

4.混合型數(shù)據(jù)倉庫架構(gòu)

混合型數(shù)據(jù)倉庫架構(gòu)如圖1-6所示。

圖1-6 混合型數(shù)據(jù)倉庫架構(gòu)

所謂的混合型結(jié)構(gòu),指的是在一個數(shù)據(jù)倉庫環(huán)境中,聯(lián)合使用Inmon和Kimball兩種架構(gòu)。從架構(gòu)圖可以看到,這種架構(gòu)將Inmon方法中的數(shù)據(jù)集市部分替換成了一個多維數(shù)據(jù)倉庫,而數(shù)據(jù)集市則是多維數(shù)據(jù)倉庫上的邏輯視圖。使用這種架構(gòu)的好處是,既可以利用規(guī)范化設(shè)計消除數(shù)據(jù)冗余,保證數(shù)據(jù)的粒度足夠細;又可以利用多維結(jié)構(gòu)更靈活地在企業(yè)級實現(xiàn)報表和分析。

1.3.3 操作數(shù)據(jù)存儲

操作數(shù)據(jù)存儲又稱為ODS,是Operational Data Store的簡寫,其定義是這樣的:一個面向主題的、集成的、可變的、當前的細節(jié)數(shù)據(jù)集合,用于支持企業(yè)對于即時性的、操作性的、集成的全體信息的需求。

對比1.1節(jié)中數(shù)據(jù)倉庫的定義不難看出,操作型數(shù)據(jù)存儲在某些方面具有類似于數(shù)據(jù)倉庫的特點,但在另一些方面又顯著不同于數(shù)據(jù)倉庫。

● 像數(shù)據(jù)倉庫一樣,是面向主題的。

● 像數(shù)據(jù)倉庫一樣,其數(shù)據(jù)是完全集成的。

● 數(shù)據(jù)是當前的,這與數(shù)據(jù)倉庫存儲歷史數(shù)據(jù)的性質(zhì)明顯不同。ODS具有最少的歷史數(shù)據(jù)(一般是30天到60天),而盡可能接近實時地展示數(shù)據(jù)的狀態(tài)。

● 數(shù)據(jù)是可更新的,這是與靜態(tài)數(shù)據(jù)倉庫又一個很大的區(qū)別。ODS就如同一個事務(wù)處理系統(tǒng),當新的數(shù)據(jù)流進ODS時,受其影響的字段被新信息覆蓋。

● 數(shù)據(jù)幾乎完全是細節(jié)數(shù)據(jù),僅具有少量的動態(tài)聚集或匯總數(shù)據(jù)。通常將ODS設(shè)計成包含事務(wù)級的數(shù)據(jù),即包含該主題域中最低粒度級別的數(shù)據(jù)。

● 在數(shù)據(jù)倉庫中,幾乎沒有針對其本身的報表,報表均放到數(shù)據(jù)集市中完成;與此不同,在ODS中,業(yè)務(wù)用戶頻繁地直接訪問ODS。

1.4 抽取-轉(zhuǎn)換-裝載

前面已經(jīng)多次提到了ETL一詞,它是Extract、Transform、Load三個英文單詞首字母的簡寫,中文意為抽取、轉(zhuǎn)換、裝載。ETL是建立數(shù)據(jù)倉庫最重要的處理過程。

● 抽?。簭牟僮餍蛿?shù)據(jù)源獲取數(shù)據(jù)。

● 轉(zhuǎn)換:轉(zhuǎn)換數(shù)據(jù),使之轉(zhuǎn)變?yōu)檫m用于查詢和分析的形式和結(jié)構(gòu)。

● 裝載:將轉(zhuǎn)換后的數(shù)據(jù)導(dǎo)入到最終的目標數(shù)據(jù)倉庫。

建立一個數(shù)據(jù)倉庫,就是要把來自于多個異構(gòu)的源系統(tǒng)的數(shù)據(jù)集成在一起,放置于一個集中的位置用于數(shù)據(jù)分析。

1.4.1 數(shù)據(jù)抽取

1.邏輯抽取

有兩種邏輯抽取類型:全量抽取和增量抽取。

2.物理抽取

依賴于選擇的邏輯抽取方法和能夠?qū)υ聪到y(tǒng)所做的操作和所受的限制,存在兩種物理數(shù)據(jù)抽取機制:直接從源系統(tǒng)聯(lián)機抽取或者間接從一個脫機結(jié)構(gòu)抽取數(shù)據(jù)。這個脫機結(jié)構(gòu)有可能已經(jīng)存在,也可能需要由抽取程序生成。

(1)聯(lián)機抽取

數(shù)據(jù)直接從源系統(tǒng)抽取。抽取進程或者直連源系統(tǒng)數(shù)據(jù)庫,訪問它們的數(shù)據(jù)表,或者連接到一個存儲快照日志或變更記錄表的中間層系統(tǒng)。注意這個中間層系統(tǒng)并不需要必須和源系統(tǒng)物理分離。

(2)脫機抽取

數(shù)據(jù)不從源系統(tǒng)直接抽取,而是從一個源系統(tǒng)以外的過渡區(qū)抽取。過渡區(qū)可能已經(jīng)存在(例如數(shù)據(jù)庫備份文件、關(guān)系數(shù)據(jù)庫系統(tǒng)的重做日志、歸檔日志等),或者抽取程序自己建立。應(yīng)該考慮以下的存儲結(jié)構(gòu):

3.變化數(shù)據(jù)捕獲

抽取處理需要重點考慮增量抽取,也被稱為變化數(shù)據(jù)捕獲,簡稱CDC。假設(shè)一個數(shù)據(jù)倉庫系統(tǒng),在每天夜里的業(yè)務(wù)低峰時間從操作型源系統(tǒng)抽取數(shù)據(jù),那么增量抽取只需要過去24小時內(nèi)發(fā)生變化的數(shù)據(jù)。變化數(shù)據(jù)捕獲也是建立準實時數(shù)據(jù)倉庫的關(guān)鍵技術(shù)。

常用的變化數(shù)據(jù)捕獲方法有時間戳、快照、觸發(fā)器和日志四種。

1.4.2 數(shù)據(jù)轉(zhuǎn)換

數(shù)據(jù)轉(zhuǎn)換一個最重要的功能是清洗數(shù)據(jù),目的是只有“合規(guī)”的數(shù)據(jù)才能進入目標數(shù)據(jù)倉庫。

另一方面,由于某些業(yè)務(wù)和技術(shù)的需要,也需要進行多種數(shù)據(jù)轉(zhuǎn)換,例如下面的情況:

● 只裝載特定的數(shù)據(jù)列。例如,某列為空的數(shù)據(jù)不裝載。

● 統(tǒng)一數(shù)據(jù)編碼。例如,性別字段,有些系統(tǒng)使用的是1和0,有些是‘M’和‘F',有些是‘男’和‘女’,統(tǒng)一成‘M’和‘F'。

● 自由值編碼。例如,將‘Male’改成‘M'。

● 預(yù)計算。例如,產(chǎn)品單價 * 購買數(shù)量 = 金額。

● 基于某些規(guī)則重新排序以提高查詢性能。

● 合并多個數(shù)據(jù)源的數(shù)據(jù)并去重。

● 預(yù)聚合。例如,匯總銷售數(shù)據(jù)。

1.4.3 數(shù)據(jù)裝載

ETL的最后步驟是把轉(zhuǎn)換后的數(shù)據(jù)裝載進目標數(shù)據(jù)倉庫。這步操作需要重點考慮兩個問題,一是數(shù)據(jù)裝載的效率問題,二是一旦裝載過程中途失敗了,如何再次重復(fù)執(zhí)行裝載過程。

1.4.5 常見ETL工具

傳統(tǒng)大的軟件廠商一般都提供ETL工具軟件,如Oracle的OWB和ODI、微軟的SQLServer Integration Services、SAP的Data Integrator、IBM的InfoSphereDataStage、Informatica等。

這里簡單介紹另外一種開源的ETL工具——Kettle。

還有dataX(DataX 是阿里巴巴集團內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具/平臺),Sqoop,canal(阿里巴巴旗下的一款開源項目,純Java開發(fā)),kettle。

更多內(nèi)容請各大平臺直接購買書籍,支持作者創(chuàng)作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容