图灵学院java架构师-vip-【ETL工具讲解】
鉴于有些公司对于ETL的使用比较多,但是网上这方面的知识又比较少故产生了本次的文章对于ETL的工具kettle的讲解。
1.ETL的定义
ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。顾名思义,简单的来说ETL就是数据转移。
2.kettle工具介绍
kettle工具是由java编写的一个数据迁移的工具,既然是用java编写那么jdk环境一定是缺不了的。需要相应jdk版本环境的支持。(鉴于有些朋友在使用kettle的同时也在使用其他需要jdk版本的软件,两个版本不一样的情况,这里给读者提供一个简便的方法不用配置kettle的电脑jdk相应的环境变量,这句话只用于理解,实际的操作是在kettle的启动文件中将path临时配置上所需要的jdk版本),如下图:笔者用惯老版本了一直没有更新,新版本是一样的操作方式。
3.kettle的JNDI
jndi相信大家都知道这个是配置数据源的文件,将自己需要用到的数据源配置在其文件中用于kettle进行ktr具体操作时,选择数据源使用。后面会详细讲解在ktr作业中的使用。
4.kettle工具的简单使用及一些模块的介绍
这是一个比较常规的数据迁移流程,这个流程被job流程包含,job流程可以包含job流程,但是ktr作业不能包含job流程,相应步骤间的箭头黑色为无条件(及不管前面步骤是否结果为真,都会向后执行,就是前面步骤报错了也会执行后面步骤),相应步骤间的箭头绿色为有条件(及当前面执行结果为真,后面的步骤才能执行,就是前面报错了后面都执行不了了)。
在其中配置kettle工具的环境变量,其中配置的变量可以在整个工具中通过${变量名}来获取。
这部分是具体ktr可以放许多东西,存储过程、输入、输出、sql脚本等。
编辑数据源连接地址建议是这个配置的。
kettle大概的操作就是这样了,但是他的功能很强大不只是sql方面,对于存储过程、邮件、excel等都有较好的支持。各种小模块就需要大家多多使用学习啦,主要的操作都是一样的。
5.kettle在平时怎么简化工作
笔者在项目组中是主要负责ETL这部分的,从开始的不会到慢慢的学习了很多。日常工作中因为正规的业务操作ETL大多情况下是不需要变更的。所以这部分的应用和简化笔者平时工作的情况是;有需求需要跟业务获取相应的业务基础数据,虽然这部分数据系统是有功能可以配置的,但是业务大大还是比较懒惰的,想让开发在升级的时候就将这些数据给他们配置好了。所以就需要给业务提供个Excel模板收集数据后,笔者这边编写对应的ETL脚本去解析excel再通过多个ETL脚本将数据进行润色之后生成所需要的表数据,然后到处insert语句就完成了这部分工作。这方面的需求还是比较多的,比写java代码解析excel在通过代码润色数据效率高了很多。(附带:可以将kettle的报错通过邮件发送给相应的人员,用于平时定位报错信息,有相应的模块进行更改,但是笔者比较懒惰(哈哈,程序猿懒惰感觉是好事,会想简便的方法来简化工作),将kettle的核心jar包更改了重新打包的,其中有个配置文件可以配置报错信息发送的邮箱等。这个读者可以自己研究下,不用看class文件,可以去找下配置文件更改下。)
6.kettle在正式环境的使用
现在项目大多都是部署在linux环境下的 所以以linux环境为例讲解。将软件部署安装在linux环境任意目录下即可(简易放到公司软件统一文件夹中好管理。),ETL脚本放到对应目录即可,ETL升级是不用重启服务器的。在linux环境下经常会应用到定时任务,在凌晨或者一个时间段执行数据转换的任务。
linux环境下键入crontab -e命令添加.sh定时任务,此时linux方面的小知识点不会的读者,去百度下看下contab的讲解就好啦。
相应的定时任务规定了特定的时间去执行这个命令。
/home/weblogic/ETL/Kettle3.2/kitchen.sh -file=/home/weblogic/ETL/sales/sales/SalesToMid/sendRepirdNo.kjb 2>&1 >> /home/weblogic/ETL/logs/SalesToMid/sendRepirdNo_$(date -d "today" +"%Y%m%d_%H%M%S").log
这个命令可以分为三部分 第一部分是使用kettle的kitchen.sh命令工具去执行第二部分sendRepirdNo.kjb数据转换流程,第三部分就是将控制台打印追加输出到一个log文件用于后期排查问题。
7.总结
笔者第一次编写技术方面的文章,有很多词语用词可能不足,技术条理性还需要加强。希望大家通过这边文章能够对ETL有个初步的认识和对kettle工具的基本使用。工具大家要多使用那些模块就能很熟练。笔者会继续努力做出更好的文章。谢谢大家阅读。