商業智能平臺研究(九) ETL 中的數據質量控制
商業智能平臺研究(九) ETL 中的數據質量控制數據質量一直是ETL工具的一個高級特性,為了解釋清楚這個問題,讓我們看看oracle的商業ETL工具Oracle Warehouse Builder 在數據質量上是如何管理的
oracle在官方網站上有一篇專門介紹如何使用oracle warehouse builder的文章,地址為http://www.oracle.com/technology/pub/articles/rittman-owb.html?
rssid=rss_otn_articles?msgid=4931461 , 是mark rittman所寫,rittman公司本身也是一個專業的oracle 數據倉庫 和商業智能方面的顧問公司,在oracle 方面非常的有發言權,如果你對oracle和數據倉庫,或者oracle商業智能有興趣的話,可以看一下上面的這篇文章,本文所有圖片引自上面的這篇文 章。
ETL難以成功有以下幾個難點:
1 . 數據倉庫的數據來自于多個數據源,所以數據的一致性很難得到保證,很多情況下需要一種硬性的標準來決定數據的取舍問題.
2 . 數據格式問題,例如數據缺失,超出數據范圍,無效數據格式等等。
3 . 出現錯誤之后沒有正確的處理問題,導致數據的質量不斷的下降。
4 . 數據一致性問題,處于數據庫性能考慮,有時候可能會有意的去掉一些外間或者檢查約束。
5 . 業務邏輯問題.由于數據庫在最初設計時就不夠嚴格和謹慎。
我們怎么判斷數據的質量好壞的呢,一般用戶拿原有系統的顯示方式查看某一查詢條件的數據與用商業智能報表所產生出來的數據進行對比,看有多大的出入,這個 可能需要原先系統有足夠的能力顯示這些數據并且商業智能工具的報表有足夠強大的查詢和報表展示能力,或者是用商業智能的報表與OLAP運行出來的報表進行 對比,看有多大的出入,出入一般都是會存在的,因為數據不可能完全的準確,但是一定要搞清楚哪里數據出現了問題,并且盡量不要讓這些誤差擴大到用戶無法接 受的地步,否則就認為BI失敗了。(咋同是一個工具做出來的,數據的出入就這么大呢?)
oracle warehouse builder 提供三個特性來使ETL的過程簡單
1 . Graphical Data Profiler 可以查看數據的結構,語義,內容,異常,和大綱,數據規則 , 這就是在前一篇說的,kettle的數據管理沒有oracle warehouse builder 強大的特性.kettle也提供查看表結構,column的結構,但是它不會判斷一個column是不是主鍵或外鍵,一個字符串的最小長度是多少,最大長 度是多少,一個整數的長度是多少,一個double的精度是多少。
2 . Correction Wizard 把數據規則應用到你的ETL過程中,自動映射并更正,清理,轉化數據, 相當于oracle warehouse builder 提供一些默認的值來幫助你更快的創建映射規則,這個功能也比kettle強大。
3 . Data Auditor 獲取數據規則并監控數據轉換的過程。kettle也提供數據監控的機制,并把log記入下來,并告訴你重復的記錄數,讀寫多少條記錄,更新拒絕多少條記錄,時間,速度,步驟是否成功等信息.
oracle warehouse builder 提供查看選中表的結構信息和數據信息

數據歸檔編輯器有很多面板。這些面板顯示已歸檔的對象和歸檔的結果。為了方便解釋,可以將整個面板分成6個部分,分別是左上角的面板(有兩個tab)叫做 1號面板,左邊中間的property面板,叫做2號面板,左下角的monitor面板,叫做3號面板,右上角的Profile Results Canvas 面板(有10個tab),叫4號面板,右邊中間的Data Grid Panal ,叫5號面板,右下角的Data Rule Panal ,叫6號面板。
1號面板顯示已歸檔的表、視圖、物化視圖(oracle 10g新加的特性)、外部表、維度和事實等對象以及已經創建的任何更正模塊的詳細信息。
2號面板顯示與數據歸檔關聯的屬性的列表。使用該屬性列表,您可以優化數據歸檔的參數;啟用或禁用某些數據歸檔組件并啟用選定表的數據規則歸檔。
3號面板是監視器面板。該面板顯示已提交的所有歸檔作業的進度。數據歸檔需要時間,所以可以在后臺完成的作業,同時執行其他 Oracle Warehouse Builder 任務;當作業完成時,Oracle Warehouse Builder 會發出通知,kettle 在執行監控上提供的信息比oracle warehouse builder 多一些,包括速度和時間,還可以看到你啟動多少線程組和線程,線程進行到那一步都顯示的出來。
4號面板提供最多的信息,所以分成了10格tab,包含大量歸檔結果匯總的tab,
5號面板顯示數據的統計信息,某一個column出現的值,出現的次數,占的百分比,有了這個功能,如果出現了錯誤的數據,將可以更容易的看到和清除.
6號面板顯示數據規則.




其中4號面板有10個tab,其中有幾個tab非常有用.(看上面的圖)
Data Type tab詳細說明表中每列的列名,數據格式,主要的數據類型,主要的數據類型所占的百分比,數據的長度,最大值和最小值,主要的長度,主要的長度所占的百分 比,類型的精度。其中所謂的主要長度類型在Date那一列為40%,可見有些值為空,它不光列出最小值和最大值,而且還有主要值的長度和它所占百分比,統 計方面功能比較強大,這種初步的數據統計不知道算不算接近于OLAP分析,功能上比kettle強大些.
Unique Key tab顯示檢測到唯一鍵或主鍵的所有列。該選項卡還顯示唯一值的數量多得足以建議刪除或更正非唯一行時可以定義唯一鍵的列。你可以看到圖中有Six Sigma 列。這是一個 1 到 7 之間的數字,它指明“每千個的缺陷”數量,即對象中未能通過唯一約束的行。
Profile Object tab 相當于kettle中的 sql 編輯器 ,顯示所有的數據并加上查詢條件。
Domain tab 為歸檔對象的每列顯示建議的域,以及數據與該域的一致程度。域就是列的一組允許的值,Oracle Warehouse Builder 認為出現兩次或以上值的列就叫域。從圖上看到,PACK_COUNT , PROD_ID , PROD_NAME 都是唯一性比較高的列,所以沒有domain,這個面板同樣也有 Six Sigma 值。
創建數據轉化規則
在它給出的例子中,MANUF_COUNTRY的國家列包含Not Known , Canada ,USA , UK 和 Mexico ,它想把所有的England轉化為 UK , 在Product 表中,把所有REORDER_YN為 'N' 的記錄刪掉,并使MARKET_SEGMENT 表的所有值為 ' Economy ' 或 ' Executive ' .
當你完成了數據規則的建立后,在實際轉換的過程中,有可能出現你沒有考慮到的情況,oracle warehouse builder 提出了三種操作,
Igore 這個不用解釋吧.
Report 在一個新建的ERR$$$表中記錄下這條記錄。數據繼續轉化。
Cleanse 應用轉化規則來清理數據.
如果沒有什么特殊的原因,一般最好不要使用第一種策略,你即不知道有沒有數據處錯了,也不知道有多少數據出錯了,這樣很容易讓你的數據誤差越來越大,第二 種Report策略能讓我們知道那些數據出錯了,并記錄下來,當我們需要找到數據誤差原因的時候,或者我們需要更正這些數據誤差的時候有依據。當然如果我 們真正的清楚數據轉換規則的話,第三種策略是最好的,把這種誤差消失在ETL的過程之中.
其中對于應用了數據轉化規則的列,oracle warehouse builder 又提供四種策略來使數據達到我們想要的程度,

1 . Remove ,把我們認為滿足特定數據條件的數據刪除,例子中就是要把REORDER_YN = Y 的數據刪掉。
2 . Similarity Match 把不在我們規定的域內的數據自動更改為最接近的值,這個值是oracle 用特定算法算出來的,我不清楚到底是怎么樣的規則。不過我猜是不是按照字典的順序來排序,誰接近就轉化成誰,比如有applet,book ,orange ,如果要轉化book的話,就把book轉化為applet,因為b 開頭的單詞比o 開頭的單詞離的近一些,中文的話可能不會支持吧。當然,這只是我猜的.具體是怎么樣只有問那些高手了.
3 . Soundex Match oracle有一個函數叫做SOUNDEX , 它是應用以下規則,保留首字母,把所有的元音 a , e , i , o , u 和 w , y 刪掉。把剩下的字符串按如下數字相加
b , f , p ,v =1
c, g, j, k, q, s, x, z = 2
d, t = 3
l = 4
m, n = 5
r = 6
如果兩個或兩個以上有相同的數字接近原來的值(在第一步之前),或者接近除去h 和 w 的值 , 忽略掉除第一個字母以外的數字. 返回4個字節。格式大概如下:
SELECT name, SOUNDEX(namecol) FROM test;
SELECT * FROM test WHERE SOUNDEX(namecol) = SOUNDEX('SMITH');
以上例子摘自http://www.psoug.org/reference/string_func.html,如果你對算法有疑問可以自己去看看。
4 . Custom 使用自定義的轉化規則來清理數據,大多數時候都是使用這種方式。例子中的把MANUF_COUNTRY 的 England 轉化為 UK 就是這種情況。
在你進行數據轉化之后,你對數據的質量滿意了,你可以設置Data Auditor 來監控以后傳入的數據的質量

Data Auditor 使用定義的數據規則,生成關于數據的一致程度的統計報告,然后將其存儲在錯誤記錄表中。還可以對 Data Auditor 進行編程,指定 Data Auditor 在分數低于一定的閾值后向您發出通知,然后在特定情況運行清理映射來清理數據。運行該清理映射后,可以對 Data Auditor 進行編程,使其僅在設計分數高于特定級別或 Six Sigma 值時才繼續進行余下的 ETL 過程,避免將錯誤數據載入數據倉庫,使數據倉庫的質量能夠得到保證。
ETL是非常重要的一步,往往一個項目的成敗就是看ETL過程的成功與否.選用一個好的ETL工具會讓項目更加的有信心.
下一篇介紹ETL的各種工具.