數據倉庫建模與ETL的實踐技巧

1、Data倉庫的架構前端

  Data倉庫(Data Warehouse DW)是爲了便於多維分析和多角度展示而將Data按特定的模式進行存儲所創建起來的關係型Datcbase,它的Data基於OLTP源Systam。Data倉庫中的Data是細節的、集成的、面向主題的,以OLAPSystam的分析需求爲目的。安全

  Data倉庫的架構模型包括了星型架構與雪花型架構兩種模式。星型架構的中間爲事實表,四周爲維度表,相似星星;而相比較而言,雪花型架構的中間爲事實表,兩邊的維度表能夠再有其關聯子表,從而表達了清晰的維度層次關係。性能優化

  從OLAPSystam的分析需求和ETL的處理效率兩方面來考慮:星型結構聚合快,分析效率高;而雪花型結構明確,便於與OLTPSystam交互。所以,在實際項目中,咱們將綜合運用星型架構與雪花型架構來設計Data倉庫。服務器

  那麼,下面咱們就來看一看,構建企業級Data倉庫的流程。架構

  2、構建企業級Data倉庫五步法分佈式

  (一)、肯定主題工具

  即肯定Data分析或前端展示的主題。例如:咱們但願分析某年某月某一地區的啤酒銷售狀況,這就是一個主題。主題要體現出某一方面的各分析角度(維度)和統計數value型Data(量度)之間的關係,肯定主題時要綜合考慮。性能

  咱們能夠形象的將一個主題想象爲一顆星星:統計數value型Data(量度)存在於星星中間的事實表;分析角度(維度)是星星的各個角;咱們將經過維度的組合,來考察量度。那麼,「某年某月某一地區的啤酒銷售狀況」這樣一個主題,就要求咱們經過時間和地區兩個維度的組合,來考察銷售狀況這個量度。從而,不一樣的主題來源於Data倉庫中的不一樣子集,咱們能夠稱之爲Data集市。Data集市體現了Data倉庫某一方面的信息,多個Data集市構成了Data倉庫。大數據

  (二)、肯定量度優化

  在肯定了主題之後,咱們將考慮要分析的技術指標,諸如年銷售額之類。它們通常爲數value型Data。咱們或者將該Data彙總,或者將該Data取次數、獨立次數或取最大最小value等,這樣的Data稱爲量度。

  量度是要統計的指標,必須事先選擇恰當,基於不一樣的量度能夠進行復雜關鍵性能指標(KPI)等的設計和計算。

  (三)、肯定事實Data粒度

  在肯定了量度以後,咱們要考慮到該量度的彙總狀況和不一樣維度下量度的聚合狀況。考慮到量度的聚合程度不一樣,咱們將採用「最小粒度原則」,即將量度的粒度設置到最小。

  例如:假設目前的Data最小記錄到秒,即Datcbase中記錄了每一秒的交易額。那麼,若是咱們能夠確認,在未來的分析需求中,時間只須要精確到天就能夠的話,咱們就能夠在ETL處理過程當中,按天來彙總Data,此時,Data倉庫中量度的粒度就是「天」;反過來,若是咱們不能確認未來的分析需求在時間上是否須要精確到秒,那麼,咱們就須要遵循「最小粒度原則」,在Data倉庫的事實表中保留每一秒的Data,以便往後對「秒」進行分析。

  在採用「最小粒度原則」的同時,咱們沒必要擔憂海量Data所帶來的彙總分析效率問題,由於在後續創建多維分析模型(CUBE)的時候,咱們會對Data提早進行彙總,從而保障產生分析結果的效率。關於創建多維分析模型(CUBE)的相關問題,咱們將在下期欄目中予以闡述。

  (四)、肯定維度

  維度是指分析的各個角度。例如咱們但願按照時間,或者按照地區,或者按照產品進行分析,那麼這裏的時間、地區、產品就是相應的維度。基於不一樣的維度,咱們能夠看到各量度的彙總狀況,也能夠基於全部的維度進行交叉分析。

  這裏咱們首先要肯定維度的層次(HierarChy)和級別(Level。咱們在時間維度上,按照「年-季度-月」造成了一個層次,其中「年」、「季度」、「月」成爲了這個層次的3個級別;同理,當咱們創建產品維度時,咱們能夠將「產品大類-產品子類-產品」劃爲一個層次,其中包含「產品大類」、「產品子類」、「產品」三個級別。

  那麼,咱們分析中所用到的這些維度,在Data倉庫中的存在形式是怎樣的呢?

 咱們能夠將3個級別設置成一張Data表中的3個字段,好比時間維度;咱們也可使用三張表,分別保存產品大類、產品子類、產品三部分Data,好比產品維度。

  另外,value得一提的是,咱們在創建維度表時要充分使用代理鍵。代理鍵是數value型的ID號碼(例如每張表的第一個字段),它惟一標識了每一維度成員。更重要的是,在聚合時,數value型字段的匹配和比較,JOIN效率高,便於聚合。同時,代理鍵對緩慢變化維度有着重要的意義,在原Data主鍵相同的狀況下,它起到了對新Data與歷史Data的標識做用。

  在此,咱們不妨談一談維度表隨時間變化的問題,這是咱們常常會遇到的狀況,咱們稱其爲緩慢變化維度。

  好比咱們增長了新的產品,或者產品的ID號碼修改了,或者產品增長了一個新的屬性,此時,維度表就會被修改或者增長新的記錄行。這樣,咱們在ETL的過程當中,就要考慮到緩慢變化維度的處理。對於緩慢變化維度,有三種狀況:

  一、緩慢變化維度第一種TYPE:

  歷史Data須要修改。這種狀況下,咱們使用UPDATEmethod來修改維度表中的Data。例如:產品的ID號碼爲123,後來發現ID號碼錯了,須要改寫成456,那麼,咱們就在ETL處理時,直接修改維度表中原來的ID號碼爲456。

  二、緩慢變化維度第二種TYPE:

  歷史Data保留,新增Data也要保留。這時,要將原Data更新,將新Data插入,咱們使用UPDATE / INSERT。好比:某一員工2005年在A部門,2006年時他調到了B部門。那麼在統計2005年的Data時就應該將該員工定位到A部門;而在統計2006年Data時就應該定位到B部門,而後再有新的Data插入時,將按照新部門(B部門)進行處理,這樣咱們的作法是將該維度成員列表加入標識列,將歷史的Data標識爲「過時」,將目前的Data標識爲「當前的」。另外一種method是將該維度打上時間戳,即將歷史Data生效的時間段做爲它的一個屬性,在與原始表匹配生成事實表時將按照時間段進行關聯,這種method的好處是該維度成員生效時間明確。

  三、緩慢變化維度第三種TYPE:

  新增Data維度成員改變了屬性。例如:某一維度成員新加入了一列,該列在歷史Data中不能基於它瀏覽,而在目前Data和未來Data中能夠按照它瀏覽,那麼此時咱們須要改變維度表屬性,即加入新的字段列。那麼,咱們將使用存儲過程或程式生成新的維度屬性,在後續的Data中將基於新的屬性進行查看。

  (五)、建立事實表

  在肯定好事實Data和維度後,咱們將考慮加載事實表。

  在公司的大量Data堆積如山時,咱們想看看裏面到底是什麼,結果發現裏面是一筆筆生產記錄,一筆筆交易記錄… 那麼這些記錄是咱們將要創建的事實表的原始Data,即關於某一主題的事實記錄表。

  咱們的作法是將原始表與維度表進行關聯,生成事實表。注意在關聯時有爲空的Data時(Data源髒),須要使用外鏈接,鏈接後咱們將各維度的代理鍵取出放於事實表中,事實表除了各維度代理鍵外,還有各量度Data,這未來自原始表,事實表中將存在維度代理鍵和各量度,而不該該存在描述性信息,即符合「瘦高原則」,即要求事實表Data條數儘可能多(粒度最小),而描述性信息儘可能少。

  若是考慮到擴展,能夠將事實表加一惟一標識列,覺得了之後擴展將該事實做爲雪花型維度,不過不須要時通常建議不用這樣作。

  事實Data表是Data倉庫的核心,須要精心維護,在JOIN後將獲得事實Data表,通常記錄條數都比較大,咱們須要爲其設置複合主鍵和索引,以呈現Data的完整性和基於Data倉庫的查詢性能優化。事實Data表與維度表一塊兒放於Data倉庫中,若是前端須要鏈接Data倉庫進行查詢,咱們還須要創建一些相關的中間彙總表或物化視,以方便查詢。

  3、什麼是ETL

  在Data倉庫的構建中,ETL貫穿於項目始終,它是整個Data倉庫的生命線,包括了Data清洗、整合、convert、加載等各個過程。若是說Data倉庫是一座大廈,那麼ETL就是大廈的根基。ETL抽取整合Data的好壞直接影響到最終的結果展示。因此ETL在整個Data倉庫項目中起着十分關鍵的做用,必須擺到十分重要的位置。

  ETL是Data抽取(ExtraCt)、convert(Transform)、加載(Load )的簡寫,它是指:將OLTPSystam中的Data抽取出來,並將不一樣Data源的Data進行convert和整合,得出一致性的Data,而後加載到Data倉庫中。

  那麼,在這一convert過程當中,咱們就完成了對Data格式的更正、對Data字段的合併、以及新增指標的計算三項操做。相似地,咱們也能夠根據其餘需求,完善Data倉庫中的Data。

  簡而言之,經過ETL,咱們能夠基於源Systam中的Data來生成Data倉庫。ETL爲咱們搭建了OLTPSystam和OLAPSystam之間的橋樑。

  4、項目實踐技巧

  (一)、準備區的運用

  在構建Data倉庫時,若是Data源位於一臺服務器上,Data倉庫在另外一臺服務器端,考慮到Data源Server端訪問頻繁,而且Data量大,須要不斷更新,因此能夠創建準備區Datcbase。先將Data抽取到準備區中,而後基於準備區中的Data進行處理,這樣處理的好處是防止了在原OLTPSystam中頻繁訪問,進行Data計算或排序等操做。

  例如咱們能夠按照天將Data抽取到準備區中,基於Data準備區,咱們將進行Data的convert、整合、將不一樣Data源的Data進行一致性處理。Data準備區中將存在原始抽取表、convert中間表和臨時表以及ETL日誌表等。

  (二)、時間戳的運用

  時間維度對於某一事實主題來講十分重要,由於不一樣的時間有不一樣的統計Data信息,那麼按照時間記錄的信息將發揮很重要的做用。在ETL中,時間戳有其特殊的做用,在上面提到的緩慢變化維度中,咱們可使用時間戳標識維度成員;在記錄Datcbase和Data倉庫的操做時,咱們也將使用時間戳標識信息。例如:在進行Data抽取時,咱們將按照時間戳對OLTPSystam中的Data進行抽取,好比在午夜0:00取前一天的Data,咱們將按照OLTPSystam中的時間戳取GETDATE到GETDATE減一天,這樣獲得前一天Data。

  (三)、日誌表的運用

  在對Data進行處理時,不免會發生Data處理錯誤,產生出錯信息,那麼咱們如何得到出錯信息並及時修正呢? method是咱們使用一張或多張Log日誌表,將出錯信息記錄下來,在日誌表中咱們將記錄每次抽取的條數、處理成功的條數、處理失敗的條數、處理失敗的Data、處理時間等等。這樣,當Data發生錯誤時,咱們很容易發現問題所在,而後對出錯的Data進行修正或從新處理。

  (四)、使用調度

  在對Data倉庫進行增量更新時必須使用調度,即對事實Data表進行增量更新處理。在使用調度前要考慮到事實Data量,肯定須要多長時間更新一次。好比但願按天進行查看,那麼咱們最好按天進行抽取,若是Data量不大,能夠按照月或半年對Data進行更新。若是有緩慢變化維度狀況,調度時須要考慮到維度表更新狀況,在更新事實Data表以前要先更新維度表。

  調度是Data倉庫的關鍵環節,要考慮縝密。在ETL的流程搭建好後,要按期對其運行,因此調度是運行ETL流程的關鍵步驟。每一次調度除了寫入Log日誌表的Data處理信息外,還要使用發送Email或報警服務等,這樣也方便的技術人員對ETL流程的把握,加強了安全性和Data處理的準確性。

  5、總結

  構建企業級Data倉庫須要簡單的五步,掌握了這五步的method,咱們能夠構建一個強大的Data倉庫。然而,每一步都有很深的內容須要研究與挖掘,尤爲在實際項目中,咱們要綜合考慮。例如:若是Data源的髒Data不少,在搭建Data倉庫以前咱們首先要進行Data清洗,以剔除掉不須要的信息和髒Data。

  ETL是OLTPSystam和OLAPSystam之間的橋樑,是Data從源Systam流入Data倉庫的通道。在Data倉庫的項目實施中,它關係到整個項目的Data質量,因此馬虎不得,必須將其擺到重要位置,將Data倉庫這一大廈的根基築牢。


相關參考書推薦:

一、數據倉庫工具箱(第3版)——維度建模權威指南數據管理書籍大數據應用與技術叢書維度建模技術教程

http://s.click.taobao.com/K1TNrXx

二、【正版】數據倉庫(原書第4版)

http://s.click.taobao.com/q6HNrXx

三、數據倉庫工具箱 第3版維度建模權威指南維度建模技術教程計算機教材 電子商務 客戶關係管理清華大學出版社

http://s.click.taobao.com/AhLNrXx

四、正版】數據倉庫應用指南數據倉庫與商務智能最佳實踐

http://s.click.taobao.com/mVCNrXx

五、社交網站的數據挖掘與分析(原書第2版)(老鼠書,第1版曾獲2011年Jolt生產效率大獎)

http://s.click.taobao.com/S0HNrXx

六、大數據技術全解:基礎、設計、開發與實踐(三分虛擬技術,七分分佈式管理,十二分楊巨龍 書店 數據挖掘、數據倉庫書籍暢銷書

http://s.click.taobao.com/fu4NrXx

七、數據倉庫與數據挖掘教程 第2版清華出版社 

http://s.click.taobao.com/h97NrXx

八、數據倉庫(原書第4版)(決戰大數據時代!IT技術人員必備)

http://s.click.taobao.com/OY1NrXx

九、數據挖掘:概念與技術(原書第3版)

http://s.click.taobao.com/JMwbpXx

十、大數據 互聯網大規模數據挖掘與分佈式處理 第2版 大數據搜索引擎技術書籍 數據挖掘參考書籍 計算機教材暢銷書籍

http://s.click.taobao.com/uVlbpXx

十一、數據挖掘導論(完整版)/圖靈計算機科學叢書 陳封能等著

http://s.click.taobao.com/zylbpXx

相關文章
相關標籤/搜索