之前发布过一篇关于ETL的文章,无奈被人说太简单。。。。唉,小编也是刚接触啊,自然不能那么高深,所以只是对学习的过程做了记录转换为文章分享给大家,如果对你有帮助,不要吝啬点赞+转发,如果对你没有帮助,那就请转身离开。。。。或者你写一篇更详细的给我,我申请红包给你(邪恶的笑~)
好啦,回归正题,这次作为补充在详细介绍下。ETL是什么?其实ta指的是一个过程,就是大数据中对数据处理的过程(抓取>转换>装载),并不是一个技术!
小编也是慢慢的学习大数据测试的知识,一直有个问题也困扰着我,就是怎么能判定数据的正确性?是,可以有多种手段去判定,但没办法保证100%的正确吧?(明白的朋友可以告诉我哈~)
反正,总而言之ETL测试的核心就是要保证数据的正确性、一致性,其他都是浮云~
常见的ETL测试方法(主要就是对数据处理中的各个关键点进行验证)
那么,怎么测试呢?莫急,看~
1、数据量。这个应该不用多说,你从源头拿来多少,存到目标表里又是多少,是否一致,是否正确
2、转换。主要是对数据格式的合法性进行验证。参考点为:
- 源中的时间、数值、字符等数据的处理,是否符合数据仓库规则,是否进行统一的转换
- 是否有超出维表或者业务值域的范围
- 是否捕获字段空值,或者需要对空值进行替换为其他含义值的处理
- 主键是否唯一
- 特殊符号或者乱码符号的处理规则
- 脏数据的处理
3、抽样。在转换完成之后要对转换之后的关键字段验证,还有源表和目标表的映射是否正确
4、加载。这块比较麻烦,有全量加载(先清空再插入)和增量加载(目标表仅更新源表变化的数据)。选择哪种方式要看实际的系统是怎么设计的,没有标准。实际应用中,增量加载用的比较多,下面我们就说说ta。
触发增量加载的方式(此处内容部分来自于网络的收集,自己做了下总结)
触发器方式
在要抽取的表上建立需要的触发器,一般要建立插入、修改、删除三个触发器,每当源表中的数据发生变化,相应的触发器就会将变化的数据写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除。
优点:数据抽取的性能高,ETL 加载规则简单,速度快,不需要修改业务系统表结构,可以实现数据的递增加载。
缺点:要求业务表建立触发器,对业务系统有一定的影响,容易对源数据库有倾入。
时间戳方式
在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。当进行数据抽取时,通过比较上次抽取时间与时间戳字段的值来决定抽取哪些数据。
有的数据库的时间戳支持自动更新,即表的其它字段的数据发生改变时,自动更新时间戳字段的值。有的数据库不支持时间戳的自动更新,这就要求业务系统在更新业务数据时,手工更新时间戳字段。
优点:同触发器方式一样。
缺点:时间戳维护需要由业务系统完成,对业务系统也有很大的倾入性(加入额外的时间戳字段),特别是对不支持时间戳的自动更新的数据库,还要求业务系统进行额外的更新时间戳操作;另外,无法捕获对时间戳以前数据的delete和update 操作,在数据准确性上受到了一定的限制。
全表删除插入方式
这个就比较好理解了,每次ETL 操作均删除目标表数据,由ETL 全新加载数据。
优点:ETL 加载规则简单,速度快。
缺点:不可以实现数据的递增加载
全表比对的方式
ETL 工具事先为要抽取的表建立一个结构类似的临时表,该临时表记录源表主键以及根据所有字段的数据计算出来,每次进行数据抽取时,对源表和临时表进行的比对,如有不同,进行Update 操作,如目标表没有存在该主键值,表示该记录还没有,即进行Insert 操作。
优点:对已有系统表结构不产生影响,不需要修改业务操作程序,所有抽取规则由ETL完成,管理维护统一,可以实现数据的递增加载,没有风险。
缺点:ETL 比对较复杂,设计较为复杂,速度较慢。与触发器和时间戳方式中的主动通知不同,全表比对方式是被动的进行全表数据的比对,性能较差。当表中没有主键或唯一列且含有重复记录时,全表比对方式的准确性较差。
PS:说了这么多,可能会有朋友问那用什么进行ETL测试啊!答案:手工或ETL测试工具Informatica或Hivetest(后续有机会我们会介绍该工具如何使用,如果有朋友很熟悉了,也欢迎投稿给我们哈)
原文地址:http://blog.51cto.com/xqtesting/2067848