- Hadoop構建數據倉庫實踐
- 王雪迎
- 3160字
- 2020-11-28 16:11:53
2.5 數據倉庫實施步驟
實施一個數據倉庫項目的主要步驟是:定義項目范圍、收集并確認業務需求和技術需求、邏輯設計、物理設計、從源系統向數據倉庫裝載數據、使數據可以被訪問以輔助決策、管理和維護數據倉庫。
1.定義范圍
在實施數據倉庫前,需要制定一個開發計劃。這個計劃的關鍵輸入是信息需求和數據倉庫用戶的優先級。當這些信息被定義和核準后,就可以制作一個交付物列表,并給數據倉庫開發團隊分配相應的任務。
首要任務是定義項目的范圍。項目范圍定義了一個數據倉庫項目的邊界。典型的范圍定義是組織、地區、應用、業務功能的聯合表示。定義范圍時通常需要權衡考慮資源(人員、系統、預算等)、進度(項目的時間和里程碑要求)、功能(數據倉庫承諾達到的能力)三方面的因素。定義好清晰明確的范圍,并得到所有項目干系人的一致認可,對項目的成功是非常重要的。項目范圍是設定正確的期望值、評估成本、估計風險、制定開發優先級的依據。
2.確定需求
數據倉庫項目的需求可以分為業務需求和技術需求。
(1)定義業務需求
建立數據倉庫的主要目的是為組織賦予從全局訪問數據的能力。數據的細節程度必須能夠滿足用戶執行分析的需求,并且數據應該被表示為用戶能夠理解的業務術語。對數據倉庫中數據的分析將輔助業務決策,因此,作為數據倉庫的設計者,應該清楚業務用戶是如何做決策的,在決策過程中提出了哪些問題,以及哪些數據是回答這些問題所需要的。與業務人員進行面對面的溝通,是理解業務流程的好方式。溝通的結果是使數據倉庫的業務需求更加明確。在為數據倉庫收集需求的過程中,還要考慮設計要能適應需求的變化。
(2)定義技術需求
數據倉庫的數據來源是操作型系統,這些系統日復一日地處理著各種事務活動。操作型系統大都是聯機事務處理系統。數據倉庫會從多個操作型源系統抽取數據。但是,一般不能將操作型系統里的數據直接遷移到數據倉庫,而是需要一個中間處理過程,這就是所謂的ETL過程。需要知道如何清理操作型數據,如何移除垃圾數據,如何將來自多個源系統的相同數據整合在一起。另外,還要確認數據的更新頻率。例如,如果需要進行長期的或大范圍的數據分析,可能就不需要每天裝載數據,而是每周或每月裝載一次。注意,更新頻率并不決定數據的細節程度,每周匯總的數據有可能每月裝載(當然這種把數據轉換和數據裝載分開調度的做法并不常見)。在數據倉庫設計的初始階段,需要確定數據源有哪些、數據需要做哪些轉換以及數據的更新頻率是什么。
3.邏輯設計
定義了項目的范圍和需求,就有了一個基本的概念設計。下面就要進入數據倉庫的邏輯設計階段。邏輯設計過程中,需要定義特定數據的具體內容,數據之間的關系,支持數據倉庫的系統環境等,本質是發現邏輯對象之間的關系。
(1)建立需要的數據列表
細化業務用戶的需求以形成數據元素列表。很多情況下,為了得到所需的全部數據,需要適當擴展用戶需求或者預測未來的需要,一般從主題域涉及的業務因素入手。例如,銷售主題域的業務因素可能是客戶、地區、產品、促銷等。然后建立每個業務因素的元素列表,依據也是用戶提出的需求。最后通過元素列表,標識出業務因素之間的聯系。這些工作完成后,應該已經獲得了如下的信息:原始的或計算后的數據元素列表;數據的屬性,比如是字符型的還是數字型的;合理的數據分組,比如國家、省市、區縣等分成一組,因為它們都是地區元素;數據之間的關系,比如國家、省市、區縣的包含關系等。
(2)識別數據源
現在已經有了需要的數據列表,下面的問題是從哪里可以得到這些數據,以及要得到這些數據需要多大的成本。需要把上一步建立的數據列表映射到操作型系統上。應該從最大最復雜的源系統開始,在必要時再查找其他源系統。數據的映射關系可能是直接的或間接的,比如銷售源系統中,商品的單價和折扣價可以直接獲得,而折扣百分比就需要計算得到。通常維度模型中的維度表可以直接映射到操作型源系統,而事實表的度量則映射到源數據在特定粒度級別上聚合計算后的結果。某些數據的獲得需要較高的成本,例如,用戶想要得到促銷相關的銷售數據就不那么容易,因為促銷期的定義從時間角度看是不連續的。
(3)制作實體關系圖
邏輯設計的交付物是實體關系圖(entity-relationship diagram,簡稱ERD)和對它的說明文檔(數據字典)。實體對應關系數據庫中的表,屬性對應關系數據庫中的列。ERD傳統上與高度規范化的關系模型聯系密切,但該技術在維度模型中也被廣泛使用。在維度模型的ERD中,實體由事實表和維度表組成,關系體現為在事實表中引用維度表的主鍵。因此先要確認哪些信息屬于中心事實表,哪些信息屬于相關的維度表。維度模型中表的規范化級別通常低于關系模型中的表。
4.物理設計
物理設計指的是將邏輯設計的對象集合,轉化為一個物理數據庫,包括所有的表、索引、約束、視圖等。物理數據庫結構需要優化以獲得最佳的性能。每種數據庫產品都有自己特別的優化方法,這些優化對查詢性能有極大的影響。比較通用的數據倉庫優化方法有位圖索引和表分區。
第1章中的“分析型系統的數據庫設計”已經提到過位圖索引和表分區。位圖索引對索引列的每個不同值建立一個位圖。和普通的B樹索引相比,位圖索引占用的空間小,創建速度快。但由于并發的DML操作會鎖定整個位圖段的大量數據行,所以位圖索引不適用于頻繁更新的事務處理系統。而數據倉庫對最終用戶來說是一個只讀系統,其中某些維度的值基數很小,這樣的場景非常適合利用位圖索引優化查詢。遺憾的是有些數據庫管理系統如MySQL,還沒有位圖索引功能。
大部分數據庫系統都可以對表進行分區。表分區是將一個大表按照一定的規則分解成多個分區,每個表分區可以定義獨立的物理存儲參數。將不同分區存儲到不同的磁盤上,查詢表中數據時可以有效分布I/O操作,緩解系統壓力。分區還有一個很有用的特性,叫做分區消除。查詢數據的時候,數據庫系統的優化器可以通過適當的查詢條件過濾掉一些分區,從而避免掃描所有數據,提高查詢效率,這就是分區消除。
除了性能優化,數據倉庫系統的可擴展性也非常重要。簡單地說,可擴展性就是能夠處理更大規模業務的特性。從技術上講,可擴展性是一種通過增加資源,使服務能力得到線性擴展的能力。比方說,一臺服務器在滿負荷時可以為一萬個用戶同時提供服務,當用戶數增加到兩萬時,只需要再增加一臺服務器,就能提供相同性能的服務。成功的數據倉庫會吸引越來越多的用戶訪問。隨著時間的推移,數據量會越來越大,因此在做數據倉庫物理設計時,出于可擴展性的考慮,應該把對硬件、軟件、網絡帶寬的依賴降到最低。第3章會詳細討論數據倉庫在Hadoop上的擴展性問題。
5.裝載數據
這個步驟實際上涉及整個ETL過程。需要執行的任務包括:源和目標結構之間建立映射關系;從源系統抽取數據;對數據進行清洗和轉換;將數據裝載進數據倉庫;創建并存儲元數據。
6.訪問數據
訪問步驟是要使數據倉庫的數據可以被使用,使用的方式包括:數據查詢、數據分析、建立報表圖表、數據發布等。根據采用的數據倉庫架構,可能會引入數據集市的創建。通常,最終用戶會使用圖形化的前端工具向數據庫提交查詢,并顯示查詢結果。訪問步驟需要執行以下任務:
● 為前端工具建立一個中間層。在這個中間層里,把數據庫結構和對象名轉化成業務術語,這樣最終用戶就可以使用與特定功能相關的業務語言同數據倉庫交互。
● 管理和維護這個業務接口。
● 建立和管理數據倉庫里的中間表和匯總表。建立這些表完全是出于性能原因。中間表一般是在原始表上添加過濾條件獲得的數據集合,匯總表則是對原始表進行聚合操作后的數據集合。這些表中的記錄數會遠遠小于原始表,因此前端工具在這些表上的查詢會執行得更快。
7.管理維護
這個步驟涵蓋在數據倉庫整個生命周期里的管理和維護工作。這步需要執行的任務包括:確保對數據的安全訪問、管理數據增長、優化系統以獲得更好的性能、保證系統的可用性和可恢復性等。