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源创计划”,欢迎正在阅读的你也加入,一块儿分享。网络

相关文章
相关标签/搜索