天天看點

大資料測試之ETL測試

一.什麼是ETL

ETL,是英文 Extract-Transform-Load 的縮寫,用來描述将資料從來源端經過抽取(extract)、互動轉換(transform)、加載(load)至目的端的過程。ETL一詞較常用在資料倉庫,但其對象并不限于資料倉庫(來自百度百科)。通俗的講,ETL就是對資料倉庫的大量原始資料進行清洗、轉化、合并資料和部分聚合統計,進而直接得到部分基礎标簽并且為部分标簽的挖掘做好資料準備。

ETL是大資料開發中的重要一環,通常來說資料倉庫引入的資料源往往都存在各種問題,異常資料會影響挖掘的準确性,而源資料中的部分資料太過分散也不适合挖掘直接使用,需先用經過簡單的聚合統計才能使用,ETL過程會将資料源中的各種問題分析後找出來,對各種異常資料進行過濾清洗,對一些格式不統一的資料做統一的格式轉化,對于一些行為進行聚合統計得到指定行為的制定時間段内的行為次數等,得到的整理後的資料才能用于挖掘。

二.ETL測試

ETL測試通過有以下幾種測試類型:

1.表資料量對比測試

通過對比處理前後的資料量變化,驗證ETL開發過程中是否有代碼錯誤導緻資料丢失,這種直接對比量表資料量的比較适用資料倉庫底層僅做資料過濾和資料轉化時,不太适合聚合過程的測試。

2.統計值總量對比測試

這種測試方法适用于對部分表進行聚合統計前後做資料無損驗證。舉個例子,挖掘同學在挖掘購物偏好時一般會向ETL同學送出需求,要求把源資料零散的檢視和購買等行為聚合統計為某類目在一天内的通路、購買次數,這種情況由于聚合過程存在,源表和結果表資料量必然不同,此時可通過統計源表的數量總量對比結果表SUM(行為次數)的方式來確定聚合過程中是否有資料量損失。

部分聚合統計過程可能缺失存在正常的損失資料,這種情況下也需要對比源表和結果表資料,分析這種損失是否合理。

3.資料清洗測試

這種情況首先需要分析出那些資料是異常資料,舉一些例子:ip、imei、郵箱、mac位址等這些資訊本身是有規則的,可以考慮使用對應的正則來判斷是否存在符合相應規範,不符合的資料視為異常資料清洗掉,又如部分資料中存在明顯的亂碼等數也是屬于異常資料,測試過程可通過統計源表符合規則的資料總量和結果表的資料量對比,判斷資料異常資料是否過濾正常

4.資料轉化測試

由于各業務的資料源對于各種字段的格式并不統一,是以數倉在ETL開發過程中會對字段的格式做統一處理。例如時間字段,有些業務使用時間戳,有些業務使用日期時間格式,這些資料數倉會按照數倉定義的規範做相關資料轉化,測試過程可通過極值、平均值且對比源表資料的方式驗證轉化是否正确。

5.枚舉字段驗證(例如:年齡、性别、學曆、職業)等:

枚舉字段主要驗證兩方面:通過group by 找出全部枚舉值,判斷枚舉分布是否符合常識(如大姨媽類軟體男女比為8比2,通過認為違背常識)、是否存在異常枚舉(異常枚舉需過濾);驗證ETL開發過程是否将各業務各自定義枚舉值是否映射為數倉标準的枚舉值,如将某業務性别的中的0,1,2分别映射為F,M,null

6.敏感字段加密驗證

驗證敏感資訊是否有做加密操作,加密後的資料是否可正常解密等

7.數字字段的極值驗證

驗證部分數值字段最大最小平均值等,是否符合常識,比如商品收藏數為負數,通常這種資料需過濾

8.抽樣測試驗證

9.字段邏輯驗證

通過字段本身一些互斥屬性也可以發現部分資料源異常或者ETL開發過程中導緻的異常,舉例如下:

枚舉類型的字段檢視枚舉分布:

性别分布:檢視性别分布,根據産品使用者人員的特點分析性别是否合理

地域分布:檢視網民的省份分布,省份分布可以參考網上的中國網民省份排名

活躍小時段:一般來說大部分産品淩晨使用者不太活躍,活躍時間也有規律,要結合具體産品(如辦公産品應該是上班時間活躍,休閑産品午休時間可能更活躍)

年齡分布:90年後的使用者應該是個峰值

學曆比例:結合社會情況看

作業系統:安卓 ios pc結合實際産品應該有合理的比例

字段本身的邏輯性:

購物訂單本身不應該同一時間出現多次

統計數:通過檢視數量判斷正常否,比如一天購物次數如果超過100,是不是需要查下是不是正常

新聞類目、音樂歌手和語種、考拉類目和品牌被使用者觸發的總次數排行,可以結合實際情況看看是否合理

手機裝置、汽車、美妝、家電的品牌和型号可以看被觸達的排行,結合實際情況分析是否合理

有多個裝置(或車)的id占總id數的比例(理論上有但是不應該太高)

字段之間的邏輯關系:

ip和城市對應關系

訂單的商品單價和訂單總價的計算關系

七天活躍城市和30天活躍城市相等的數量占總使用者數的比例,一般來說這種比例應該很高,隻有少數出差的人才會是不同的

裝置型号和裝置品牌的對應關系抽查

車型号和車品牌的對應關系抽查

字段之間的互斥關系:

地域與時間互斥:如同一個時間在不同城市

職業和年齡互斥:比如學生一般小于25

年齡和是否有小孩:18歲一下一般不會有小孩兒

三.資料監控

測試上線完成後,叢集會對相關任務進行日常排程刷資料,由于網絡、傳輸等各個環節都可能出問題進而導緻資料跑不出來,是以已上線的表需要通過監控的方式來保證後續的資料正常。

資料監控可以考慮通過使用hive提供的原生接口,開發一些内部的工具進行相關監控。