• 0
  • 0
分享

摘要:

测试数据在项目开发、测试过程中占据着重要的作用,随着我行信息系统建设速度的加快,软件更新速度的不断提升,对数据交付时间和数据格式的要求也越来越高。对于数据库大表来说,无论是脱敏还是导出的速度,往往不能满足实际需要,Kettle作为业内最著名的开源ETL(数据抽取)工具,可直接对数据库表进行操作并以多种格式进行导出,格式规范,效率较高,能很好的满足使用过程中的需要。本文对kettle在实际中具体的使用与实践进行重点介绍。

1、常用ETL工具现状简介

ETL是Extract-Transform-Load的简写,用来描述将数据从源端经过抽取(extract)、转换(transform)、加载(load)到目的端得过程。当数据来自不同的主机,若单独使用SQL语句进行处理的话,效率就会比较低,当处理海量数据的时候还会占用较多的数据库资源,影响数据库的性能,另外还需要整理成统一的格式,也比较麻烦。这些问题就可以用ETL工具进行解决,具有支持异构连接、图形界面操作方便、处理速度快等优点。目前业内口碑较好的ETL工具有Datastage、Infomatica、Kettle。Datastage由IBM公司开发,目前是业内最专业的商用ETL工具,Infomatica也是专业的ETL商业工具软件,Kettle由纯Java编写,是最著名的开源ETL工具产品,下图是三种工具的比较。

1.png

2、开源数据抽取工具kettle介绍

2.1 Kettle架构

Kettle是一个由Java编写组件化的集成系统,是一个开源的ETL工具,可以跨平台运行,包括如下几个主要部分:

(1)Spoon:图形化界面工具(GUI方式),Spoon允许你通过图形界面来设计Job和Transformation,可以保存为文件或者保存在数据库中。也可以直接在Spoon图形化界面中运行Job和Transformation,

(2)Pan:Transformation执行器(命令行方式),Pan用于在终端执行Transformation,没有图形界面。

(3)Kitchen:Job执行器(命令行方式),Kitchen用于在终端执行Job,没有图形界面。

(4)Carte:嵌入式Web服务,用于远程执行Job或Transformation,Kettle通过Carte建立集群。

(5)Encr:Kettle用于字符串加密的命令行工具,如:对在Job或Transformation中定义的数据库连接参数进行加密。

2.png

2.2 基本概念

(1)Transformation:定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比Job粒度更小一级的容器,我们将任务分解成Job,然后需要将Job分解成一个或多个Transformation,每个Transformation只完成一部分工作。

(2)Step:是Transformation内部的最小单元,每一个Step完成一个特定的功能。

(3)Job:负责将Transformation组织在一起进而完成某一工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个Job都完成了,也就说明这项任务完成了。

(4)Job Entry:Job Entry是Job内部的执行单元,每一个Job Entry用于实现特定的功能,如:验证表是否存在,发送邮件等。可以通过Job来执行另一个Job或者Transformation,也就是说Transformation和Job都可以作为Job Entry。

(5)Hop:用于在Transformation中连接Step,或者在Job中连接Job Entry,是一个数据流的图形化表示。

3.png

3 部署环境搭建

本文采用Windows2012作为Kettle部署环境,SUSE12作为数据库环境,采用Oracle作为连接数据库。

3.1 kettle安装

Kettle由Java语言编写,首先要配置?Java?语言的软件开发工具包JDK,ORACLE官网下载JDK安装包,并配置环境变量,本文不再赘述。

从kettle官https://community.hitachivantara.com/docs/DOC-1009855下载kettle工具包,本文采用8.2.0.0-342版本。配置环境变量,找到kettle存放路径,在环境变量里新建系统变量添加kettle的安装路径。完成后将下载好的kettle工具包解压到安装路径中,找到spoon.bat文件,kettle是免安装的,所以直接双击运行即可。

3.2 配置连接数据库

使用jdbc连接oracle数据库,将数据库的监听打开,并复制oracle安装目录下对应的jar包放在Spoon目录下即可(本文为D:\pdi-ce-8.2.0.0-342\data-integration\lib)。重新启动Spoon,点击数据库连接,进行配置,可以看到连接成功了,如图所示。

4.png

4 Kettle使用实践与应用

Kettle主要分为作业和转换两个主要的功能,进行了试用如下。

4.1 转换

转换就是针对数据的各种处理,一个转换里可以包含多个步骤。

(1)数据的抽取

5.png

左侧newfile选择新建一个转换,核心对象栏,输入选择表输入直接向右拖拽即可,输出选择文本文件输出,如图所示。

6.png

表输入栏编辑数据库连接,前面已经介绍过,获取SQL查询语句也就是需要抽取的表;文本文件输出栏可以对输出文本文件的文件位置、文件名称、字段分隔符、以及字段进行编辑。完成后直接点击左上右三角运行,可以通过下面的执行结果导航栏查看执行日志,可以看到数据抽取速度每秒可达到2万5千行左右,如图所示。可以简单估算使用kettle进行数据表到文件的抽取,一小时能抽取约1一亿条数据左右,这相对从数据库直接抽取来说是比较快的。

7.png

当然在输入栏中还可以选择Excel输入、文本文件输入、生成随机数、生成随机的信用卡号、获取系统信息等;同样在输出栏中也可以根据前面所选择的输入选择输出,包括Excel输出、SQL文件输出、表输出、插入/更新等。例如:连接数据库将表输出为其他数据库的另一张表(前提要把新表建好)

1.png

将表内容抽出来插入到表中(按id识别,id存在则更新数据,不存在则插入数据)。

2.png3.png

也可以生成信用卡号或随机数以表输出(同样要建好数据表相应的字段)

4.png

(2)数据转换

如何进行输入输出前面已经介绍过,也可以对数据进行转换操作后再输出,根据需要选择左侧导航栏转换中的功能,如图流程2和3所示,可以对输入的表进行字符串的替换和将字段值设置为常量的操作。

5.png

6.png

流程2和3中操作步骤基本一样,点击获取字段得到输入表的所有字段信息,值替换栏中输入想要替换的值以及在字符串替换中直接选择使用替换的字段值,完成后选择对应的输出,这里选择文本文件输出,点击节点连接使之生效,之后运行这个转换即可。

除了单一转换外,kettle也支持多步骤的进行操作,如图流程1所示,表输入之后可以先增加一常量列,可以自定义常量列的字段类型与数值,然后可以编辑字段列的数值范围,根据字段的取值进行自定义,接着可以按字段进行排序,最后自定义进行文本文件输出,如图所示。

7.png8.png

最后运行这个转换,每个功能右上角出现绿标,表示执行成功且没有错误,可以在对应目录下查看执行出的文本文件,如图所示。

9.png

(3)流程、统计与应用

前面介绍了单一功能的使用,根据实际情况的需要,kettle也可以对多功能进行组合操作,如图所示。

10.png

转换由脚本(执行SQL脚本)—输入(表输入)—应用(替换NULL值)—流程(过滤记录)—统计(数据采用)—输出(Excel输出)组成。

1.png

以PACOBREINFO 表为例,首先对表进行更新操作后按需要抽取表中数据,记录数量限制里选择抽取1万条,如果数据中包含NULL值可以替换掉NULL值为固定值。

接着可以根据需要过滤记录,这里选择PCB_SUM大于200000000.0的值发送到下一步,接着进行数据的随机采样,从100条数据中随机抽取10条,最后输出到Excel中,运行这个转换,打开Excel检查输出的结果,可以看到是符合转换的后预期结果的,如图所示。

2.png

在转换中还有很多其他的功能,既可以单一功能进行使用也可以多功能多步骤进行组合在一起使用,以满足实际使用的需要,这里不再一一列举。

3.png

4.2 作业

和转换相比,作业是更加高级的操作。包含多个作业项,一个作业项代表一项工作,转换也是一个作业项(脚本、文件管理、邮件等),如图所示。

4.png

新建转换然后添加作业项,选择Start为开始,以成功为结束并发送邮件。

5.png

添加使用过的“流程、统计与应用”的转换,转换后将生成的Excel以SFTP上传,输入对应的ip、用户名、密码和文件目录,最后执行作业,成功后会以邮件告知。

6.png

可以看到在每个作业项右上角出现绿色的对勾,表明执行成功没有报错,转换完成后将会D盘0722目录下生成Excel文件并会将文件上传到指定的机器上。

7.png

同时也可以对作业进行定时执行操作,点击Start作业项,选择重复按钮,这里选择以8分钟为时间间隔,也就是8分钟重复执行一次作业。

8.png

可以通过执行结果栏中的作业度量选项查看详细的执行历史,如图所示:

9.png

4.3 实际对比应用

通过以上的实践可以看出Kettle可以配置连接多种数据库并进行操作最后实现数据的导出,在日常的数据脱敏工作中可以将数据库中脱敏后的表数据以文本形式导出,而且格式规范,方便后续项目组使用,以实际Oracle数据库中CMEVALURELACOLL表为例,表中数据量约为4500万行,以下是实际使用中的效率对比情况。

10.png

可以看出若在实际项目中,对数据输出格式没有要求,可以采用select into脱敏+数据泵导出这种方式进行脱敏导出交付,效率最高;若使用方必须要使用可识别的文本格式数据,虽然select into脱敏+spool导出时间效率上较Kettle导出+python文本脱敏快一些,但使用Kettle导出后的文本格式较spool更为规范,能很好的满足使用过程中的需求,所以使用Kettle导出+python文本脱敏这种方式最优。

5 总结

本文对当前主流ETL工具进行了分析和比较,并对开源工具Kettle的整体架构、基本概念进行介绍,搭建了连接Oracle数据库的使用环境,对使用功能进行了实践。通过Kettle连接Oracle数据库,可以对数据库表进行DML操作并且可以进行抽取、转换以多种格式输出,同时将多个工作项组成一个作业,可以重复运行,提升了复用效率。同时利用Kettle在实际应用中进行了对比,在实际场景中利用Kettle导出+python文本脱敏的方式,速度较快,格式规范,效率较高,节省时间,能很好的满足使用过程中的需求。为测试数据的导出交付提供了参考,具有一定的借鉴意义。


版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   这个问题其实困扰了我很久,不是很理解很多团队选择JMeter进行接口测试。在最近的面试过程中,发现不论是中级岗,还是高级测试,90%的团队用的都是JMeter。它明明是个性能测试工具呀。不是说JMeter不能用来做接口测试,但是它的局限性明显了。这就好比汤匙明明是用来喝汤的,但是你就是要用来吃面,还美其名曰:可以同时搞定面和汤,不好吗?反正笔者是没想明白。  作为一个当下普及性相当广的测试工具,JMeter有它自身的优势,总结下大约有以下几点:  · 易用性:JMeter上手简单,大部分操作都有对应的元件帮你完成,并且是开源的,社区接受度高。有多少用JMeter的人逛过JMeter社区? ...
            0 0 616
            分享
          •   随着科技时代的进步和智能手机的普及,现代人离不开手机已经是常态化,一旦手机不在身边便会失去安全感。提到安全一词,我们在使用手机app软件时,安全至关重要,软件里包含的个人信息、资料等等都和安全挂钩,那么在软件测试中移动app安全测试应该怎么做呢?  1、代码审计  通过代码走读的方式测试源代码的安全性,常用的代码检查方法有数据流、控制流、信息流等,通过这些测试方法与安全规则库进行匹配,进而发现潜在的安全漏洞。静态代码检查方法主要是在编码阶段进行测试,尽可能早地发现安全性问题。  2、动态渗透测试  需要借助工具或手工来模拟的输入方式,对应用软件进行安全性测试,进而发现系统中的安全性问题。该...
            0 0 564
            分享
          •   据报道,皮尤研究中心的一项调查显示,Twitter的用户们仍然在使用这个社交媒体平台,但自从去年年底埃隆·马斯克完成对该公司的收购后,在上面发帖的人正在变得越来越少。  当地时间周三,这份调查的作者表示:“研究中心对该网站用户实际行为的新分析发现,马斯克收购前最活跃的用户(按推文量排序为前20%的用户),在收购后的几个月里出现了明显的发帖量下降趋势。在收购完成之后,这些用户每月的平均推文数量下降了约25%。”  此外,调查显示,在过去一年中使用过Twitter的美国成年人中,约有60%的人表示他们最近已经中断了这项服务,四分之一的人表示他们一年后不会再使用Twitter。  新的数据凸显了...
            0 0 853
            分享
          •   安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程,其主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力,安全指标不同,测试策略也不同。  但安全是相对的,安全性测试并不能最终证明应用程序是安全的,而只能验证所设立策略的有效性,这些对策是基于威胁分析阶段所做的假设而选择的。例如,测试应用软件在防止非授权的内部或外部用户的访问或故意破坏等情况时的运作。  软件安全是软件领域中一个重要的子领域,系统安全性测试包括应用程序和操作系统两个方面的安全性。而系统安全性又包括两个方面的测试:一是软件漏洞,设计上的缺陷或程...
            0 1 1957
            分享
          •        大多数情况下,开发的接口都不是给开发这个接口的人用的,所以如果没有接口文档,别人就无法有哪些接口可以调用,即使知道了接口的 URL,也很难知道接口需要哪些参数,即使知道了这些参数,也可能无法理解这些参数的含义。因此接口文档应该是项目必不可少的配置。       编写接口文档有很多种方式,最为简单直接的方式就是打开一个记事本或者 word 文档,将接口的详细信息和用法写下来,别人就可以参考这个文档来调用接口。这样做虽然简单,但弊端也很明显:一是需要写大量的描述文字,非常枯燥,但其实这些信息在代码中已有体...
            12 12 2827
            分享
      • 51testing软件测试圈微信