ETL(大數據)測試實戰篇(一)

進入大數據測試領域已有近1年時間,今天特地梳理了在項目實踐中針對大數據測試方面的一些有效流程和方法,但願與君共勉~

今日分享的文章內容,主要包含:
  • 測試數據準備
  • etl測試計劃執行

0一、測試數據準備

分析目標表中所依賴的源表,中間表(將中間表依賴的源表所有梳理出來),查詢對應源表的分區:
(1)、選擇全部源表共有的分區從生產拉取數據;
[1]、選擇的分區須要保證是全量的數據源;
[2]、須要選擇2至3個分區數據進行拉取,1個分區用於初始化,1個用於增量,根據需求判斷是否須要執行2個及以上的增量task計劃;

(2)、從prod同步數據至beta命令:
[1]、sudo su - test(切換至test用戶)
[2]、cd /home/q/www/tools(進入指定的同步腳本目錄下)
[3]、python test_table_sync.py -T 'test.t_test_oas_resv_name_ful(dt=2019-11-24)' -f Prod -t Beta(執行同步腳本命令從生產拉取數據至beta)


數據同步過程當中可能會遇到的問題以下:
1)、須要同步的表不存在
解決方法:
step1:進入生產的etl服務器(l-etl1.test.com)
sudo su - test(切換至test用戶)
test(進入test客戶端)
show create table test.t_test_oas_resv_name_ful;(查看生產環境該表的建表語句)

step2:拿到step1中的建表語句;

step3:進入beta的etl服務器(l-etl1.test.beta.com)
sudo su - test(切換至test用戶)
test(進入test客戶端)
手動執行step2中複製的建表語句
再次執行命令:
python test_table_sync.py -T 'test.t_test_oas_resv_name_ful(dt=2019-11-24)' -f Prod -t Beta


2)、須要同步的表的對應的分區不存在
解決方法:
step1:進入生產的etl服務器(l-etl1.test.com)
sudo su - test
test
show partitions test.t_test_oas_resv_name_ful;

step2:查看step1中最後1個命令的結果,確認須要同步的分區真實不存在後,須要換其餘存在的分區進行同步,同時其餘源表也須要按新選擇的分區進行同步數據;

step3:再次執行命令如下命令
python test_table_sync.py -T 'test.t_test_oas_resv_name_ful(dt=2019-11-24)' -f Prod -t Beta


3)、須要同步的表非分區表
解決方法:
step1:進入生產的etl服務器(l-etl1.test.com)
sudo su - test
test
show partitions test.t_test_oas_resv_name_ful;【該命令可查看出該表是不是分區表】

step2:由step1中確認爲非分區表後,再次執行命令(去掉dt='2019-11-24') ppython test_table_sync.py -T 'test.t_test_oas_resv_name_ful' -f Prod -t Beta


4)、網絡超時
解決方法:
step1:稍後重試(被動方式)
step2:若是稍後重試依然不成功,可找對應的開發同事協助幫忙解決


5)、其餘問題待持續更新

Tips:
<1>、梳理目標表所依賴的源表的方法有:
[1]、手動梳理法:在目標表中搜索關鍵字「from和join」,找到關鍵字後面對應的表名,若是是mid的中間表還須要去該表繼續按照搜索關鍵字的方法查找出全部依賴的源表
           
[2]、自動梳理法:若是代碼功底不錯,能夠本身分析目標表的結構並寫出分析所依賴源表的腳本去自動解析出全部依賴的源表。再或者公司已有現成的解析依賴表的腳本,能夠和對應的開發同事溝通下,避免重複造輪子。
               
用腳本分析的方法須要注意腳本在解析時沒有bug,且適用於當前須要解析的目標表的結構,不然可能解析不全或錯誤。

<2>、從生產拉取數據的緣由:不少公司爲節約機器資源,數據源的數據都是直接收集至生產,供數據分析使用,不會在測試環境再搭建一套環境再收集一份源數據。因此測試環境須要測試時,是須要從生產同步數據的,開發時使用的數據源也是生產的,因此保證了數據的一致性。

<3>、分區須要保證是全量的數據源緣由:例如,傳統的酒店行業,一個品牌下可能有不少家連鎖酒店,公司技術中心須要對品牌下各家酒店的訂單數據做分析,這時就須要保證目標分區內每家酒店的數據都是全的,不能只有其中幾家酒店的數據,不然數據分析結果的準確性將會受到影響。

<4>、數據同步完成後,需使用以下命令查詢數據量,來確保數據同步成功:
select count(1) from test.t_test_oas_resv_name_ful where dt='2019-11-24';
若是數據查詢結果不爲0,則說明從生產同步至beta的數據同步成功。

至此,測試數據準備完成。



0二、etl測試計劃執行

一、新表提測或表字段變動時建表
(1)、新表提測:依據提測單中的etl流程,找到項目對應的建表sql文件,進入beta環境的etl服務器(l-etl1.test.beta.com)下:
step1:sudo su - test
step2:test
step3:將建表sql文件的建表語句內容複製後粘貼至test命令行下執行,若是提示ok,無異常報錯,說明建表成功

(2)、表字段變動:進入beta環境的etl服務器(l-etl1.test.beta.com)下:
step1:sudo su - test
step2:test
step3:drop table if exists table_name(須要字段變動的表);
step4:將建表sql文件的建表語句內容複製後粘貼至test命令行下執行,若是提示ok,無異常報錯,說明建表成功

二、初始化
使用的初始化腳本:
/home/q/www/test-data-etl/etl_task/scripts/common/test_data_init.sh
【該腳本通常項目內部會有現成的,直接用就行,不過建議在使用前要詳細去閱讀該shell腳本的內容,清楚的知道該腳本是如何工做的】

三、增量
執行命令:
step1:cd $TASK_HOME/test/resort/task/test_oas_resort_test_room_stat_df
step2:runtask  -d20191124
說明:runtask命令實際調用的是:/home/q/www/test-platform-etljet/bin下的runtask腳本,在使用以前也須要清楚的知道這個runtask腳本的工做原理,以便在執行etl計劃時出現問題,測試工程師可先自行定位。

下期將繼續分享ETL(大數據)測試實戰內容,敬請期待喲!

往期回顧python


淺談ETL測試(二)sql


淺談ETL(大數據)測試(一)
shell


Python大數據正態分佈之箱型圖上下限值計算
服務器


Python實現大數據收集至Excel微信

本文分享自微信公衆號 - 無量測試之道(gh_858a1aa25a6d)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。網絡

相關文章
相關標籤/搜索