BI項目中ETL設計與思考【轉】

BI項目中ETL設計與思考【轉】數據庫


ETL是將業務系統的數據通過抽取、清洗轉換以後加載到數據倉庫的過程,目的是將企業中的分散、零亂、標準不統一的數據整合到一塊兒,爲企業的決策提供分析的依據。 ETL是BI項目重要的一個環節,BI項目中,一般狀況下ETL會花掉整個項目的1/3的時間,ETL設計的好壞直接關接到BI項目的成敗。

ETL的設計分三部分:數據抽取、數據的清洗轉換、數據的加載。在設計ETL的時候咱們也是從這三部分出發。數據的抽取是從各個不一樣的數據源抽取到ODS中(這個過程也能夠作一些數據的清洗和轉換),在抽取的過程當中須要挑選不一樣的抽取方法,儘量的提升ETL的運行效率。ETL三個部分中,花費時間最長的是T(清洗、轉換)的部分,通常狀況下這部分工做量是整個ETL的2/3。數據的加載通常在數據清洗完了以後直接寫入DW中去。服務器

ETL的實現有多種方法,經常使用的有三種,一種是藉助ETL工具如Oracle的OWB,SQL server 2000的DTS,SQL Server2005的SSIS服務,informatic等實現,一種是SQL方式實現,另一種是ETL工具和SQL相結合。前兩種方法各有各的優缺點,藉助工具能夠快速的創建起ETL工程,屏蔽了複雜的編碼任務,提升的速度,下降的難度,可是缺乏靈活。SQL的方法優勢是靈活,提升ETL運行效率,可是編碼複雜,對技術要求比較高。第三種是綜合了前面二種的優勢,會極大的提升ETL的開發速度和效率。ide

1、數據的抽取
這一部分須要在調研階段作大量的工做,首先要搞清楚數據是從幾個業務系統中來,各個業務系統的數據庫服務器運行什麼DBMS,是否存在手工數據,手工數據量有多大。是否存在非結構化的數據等等當收集完這些信息以後才能夠進行數據抽取的設計。
一、對於與存放DW的數據庫系統相同的數據源處理方法
這一類數源在設計比較容易,通常狀況下,DBMS(SQLServer,Oracle)都會提供數據庫連接功能,在DW數據庫服務器和原業務系統之間創建直接的連接關係就能夠寫Select 語句直接訪問。
二、對於與DW數據庫系統不一樣的數據源的處理方法。
對於這一類數據源通常狀況下也能夠經過ODBC的方式創建數據庫連接,如SQL Server和Oracle之間。若是不能創建數據庫連接,能夠有兩種方式完成,一種是經過將源數據,經過工具將數據導出成.txt或者是.xls文件,而後再將這些源系統文件導入到ODS中。另一種方法經過程序接口來完成。工具

三、對於文件類型數據源(.txt,.xls),能夠培訓業務人員利用數據庫工具將這些數據導入到指定的數據庫,而後從指定的數據庫抽取。或者能夠藉助工具實現,如SQL SERVER 2005 的SSIS服務的平面數據源和平面目標等組件導入ODS中去。編碼

四、增量更新的問題
對於數據量大的系統,必須考慮增量抽取。通常狀況,業務系統會記錄業務發生的時間,咱們能夠用來做增量的標誌,每次抽取以前首先判斷ODS中記錄最大的時間,而後根據這個時間去業務系統取大於這個時間全部的記錄。利用業務系統的時間戳,通常狀況下,業務系統沒有或者部分有時間戳。spa


2、數據的清洗轉換
通常狀況下,數據倉庫分爲ODS、DW兩部分,一般的作法是從業務系統到ODS作清洗,將髒數據和不完整數據過濾掉,在從ODS到DW的過程當中轉換,進行一些業務規則的計算和聚合。設計

一、數據清洗
數據清洗的任務是過濾那些不符合要求的數據,將過濾的結果交給業務主管部門,確認是否過濾掉仍是由業務單位修正以後再進行抽取。不符合要求的數據主要是有不完整的數據、錯誤的數據、重複的數據三大類。
A、不完整的數據,這一類數據主要是一些應該有的信息缺失,如供應商的名稱,分公司的名稱,客戶的區域信息缺失、業務系統中主表與明細表不能匹配等,對於這一類數據,過濾出來,按缺失的內容分別寫入不一樣Excel文件向客戶提交,要求在規定的時間內補全。補全後才寫入數據倉庫。
B、錯誤的數據,這一類錯誤產生的緣由是業務系統不夠健全,在接收輸入後沒有進行判斷直接寫入後臺數據庫形成的,好比數值數據輸成全角數字字符,字符串數據後面有一個回車,日期格式不正確,日期越界等,這一類數據也要分類,對於相似於全角字符、數據先後有不面見字符的問題只能寫SQL的方式找出來,而後要求客戶在業務系統修正以後抽取,日期格式不正確的或者是日期越界的這一類錯誤會致使ETL運行失敗,這一類錯誤須要去業務系統數據庫用SQL的方式挑出來,交給業務主管部門要求限期修正,修正以後再抽取。
c、重複的數據,對於這一類數據,特別是維表中會出現這種狀況,將重複的數據的記錄全部字段導出來,讓客戶確認並整理。 
數據清洗是一個反覆的過程,不可能在幾天內完成,只有不斷的發現問題,解決問題。對因而否過濾,是否修正通常要求客戶確認,對於過濾掉的數據,寫入Excel文件或者將過濾數據寫入數據表,在ETL開發的初期能夠天天向業務單位發送過濾數據的郵件,促使他們儘快的修正錯誤,同時也能夠做爲未來驗證數據的依據。數據清洗須要注意的是不要將有用的數據過濾掉了,對於每一個過濾規則認真進行驗證,並要用戶確認。日誌

二、數據轉換
數據轉換的任務主要進行不一致的數據轉換、數據粒度的轉換、一些商務規則的計算。
A、不一致數據轉換,這個過程是一個整合的過程,將不一樣業務系統的相同類型的數據統一,好比同一個供應商在結算系統的編碼是XX0001,而在CRM中編碼是YY0001,這樣在抽取過來以後統一轉換成一個編碼。
B、數據粒度的轉換 業務系統通常存儲很是明細的數據,而數據倉庫中數據是用來分析的,不須要很是明細的數據,通常狀況下,會將業務系統數據按照數據倉庫粒度進行聚合。
C、商務規則的計算 不一樣的企業有不一樣的業務規則,不一樣的數據指標,這些指標有的時候不是簡單的加加減減就能完成,這個時候須要在ETL中將這些數據指標計算好了以後存儲在數據倉庫中,供分析使用。orm

3、ETL日誌、警告發送。
一、ETL日誌 
ETL日誌分爲三類,一類是執行過程日誌,這一部分日誌是在ETL執行過程當中每執行一步的記錄,記錄每次運行每一步驟的起始時間,影響了多少行數據,流水帳形式。一類是錯誤日誌當某個模塊出錯的時候寫錯誤日誌,記錄每次出錯的時間,出錯的模塊以及出錯的信息等。第三類日誌是整體日誌,只記錄ETL開始時間,結束時間是否成功信息。若是
使用ETL工具,ETL工具會自動產生一些日誌,這一類日誌也能夠做爲ETL日誌的一部分。記錄日誌的目的是隨時能夠知道ETL運行狀況,若是出錯了,出錯在那裏。
二、警告發送
ETL出錯了,不只要與ETL出錯日誌並且要向系統管理員發送警告,發送警告的方式多種,通常經常使用的就是給系統管理員發送郵件,並附上出錯的信息,方便管理員排查錯誤。server

ETL是BI項目的關鍵部分,也是一個長期的過程,只有不斷的發現問題並解決問題,才能使ETL運行效率更高,爲項目後期開發提供準確的數據。

相關文章
相關標籤/搜索