天天看点

大数据测试之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提供的原生接口,开发一些内部的工具进行相关监控。