kettle自动化的那些事儿

1、kettle介绍
java

  Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle 中有两种脚本文件,transformation 和 job,transformation 完成针对数据的基础转换,job 则完成整个工做流的控制。python

2、ETL介绍程序员

  ETL是将业务系统的数据通过抽取、清洗转换以后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一块儿,为企业的决策提供分析依据, ETL是BI(商业智能)项目重要的一个环节。spring

3、ETL实现细说sql

  其实实现ETL功能的工具不少,我熟悉并使用过的:Informatica PowerCenter、kettle、sql、PLSQL编程、python等等。shell

分别简单聊聊这些实现ETL的手段:数据库

(1)、Informatica PowerCenter编程

  此软件是商用的,网上成熟的中文资料比较少,并且版本较旧。英文资料居多,给不少初学者带来了困扰。国内最出名的大神就是杨晓东,国内的中文资料几乎全是杨晓东分享的,资料对应的版本还停留在7.6和8.5。(我当年学的时候,本身买了书,在淘宝上淘的视频,还在杨晓东的群里打酱油,通过6个月的努力,才能上手正常工做)浏览器

(2)、kettlespringboot

  此软件是开源的,纯java编写,网上文档和视频资料特别多,有不少人在博客分享本身的案例。(从第一次接触Kettle,到灵活使用,我一共花了2天时间。这主要受益于个人技术沉淀:java编程、sql、Informatica PowerCenter的使用)

(3)、sql

  一提到sql,各位感受只要是个干IT的人就会。你觉得就是select\insert\update\delete,你就实现etl了?醒醒吧铁子,你若是这样想,你永远吃不上4个菜!!

此处提到的sql,要与你工做中的业务相结合,你得吃透业务,而后编写出来的sql。你操做完sql后,你还要验证一下,结果和你想的对不对?时效如何?若是性能很差,你还要sql调优。一说调优,有些人会说百度上找啊,文章特别多。你会发现很文章,好像是近亲,天下学文一大抄啊!并且你不懂业务,你要调优纯扯淡。

举例说明:

小明饭量很大,他一顿饭吃了一只烤鸭,小明说我刚刚吃饱了,吃饱了太幸福了。

你的饭量很小,你平时每顿就吃半个馒头的。你听了小明的说法,你也吃一只烤鸭,你肚皮都撑爆了,一张嘴烤鸭都快从嘴中吐出来了。

上面的小例子说明,不一样的业务规则\数据量\访问量,对应的调优手段也不一样。其实也是有一些通用的调优方法,就从sql的写法上实现的。能够来参考个人博文:点击 oracle调优笔记(揭开传言的面纱)

(4)、PLSQL编程

  PLSQL是oracle的高级编程,若是想使用PLSQL编程实现ETL,基本要求和上面第3点sql的要求很类似。另外你要熟悉PLSQL语法,并能排除PLSQL运行时产生的Exception。(我作的是ORALCE DBA,对PLSQL编程很是熟悉,因此此处提到PLSQL。大部分数据都有本身编程,只要你熟悉均可以实现ETL)。若是你对plsql编程也感兴趣,能够参考个人博文:点击 史上最简单的数据抽取

(5)、Python

  Python是一种编程语言,它里面集成了不少数学函数、工具类,均可以帮咱们更加方便的实现ETL操做。若是你要操做的数据源是excel和csv,你就可使用pandas,太方便了。

4、kettle基本概念

  (1)ktr转换:将一个或多个数据源组装成一条数据流水线,根据业务要求,利用Kettle内部的组件,进行数据处理,最后输出到某一个地方(文件或数据库)。

image.png





  (2)kjb做业:能够调度设计好的一个或多个转换,也能够执行一些文件处理(比较\删除等),还能够往ftp上传和下载文件,发送邮箱,执行shell命令等等。

image.png     

 



举例说明:

  ktr转换:ktr是根据业务编写的,它们分别实现不的操做,ktr会有多个。ktr就是建筑工地上干活的工人们,每一个工人的技能不一样(小工、瓦匠、钢筋工、木工、塔吊司机)

  kjb做业:kjb管理多个ktr。kjb就是包工头,包工头管理多个工人。当有任务的时候,直接找包工头说,包工头就会根据任务的要求,找不一样技术的工人,来完成工做。

5、业务说明

  咱们公司的业务是多源的,有一条业务线是服务于国家医保局,根据全国各地名提供的,医院HIS\PACK\LIS\财务数据,及医保局的结算数据,进行数据分析和筛查,配合业务专家进行飞行检查,找出违规收费等问题。对医院进行管控,实现就医的合理收费,医患和气,使用最少的医保费用,干更多的事,为老百姓谋幸福。

6、工做的流程

  根据业务专家的经验,将医保中出现的各类违规收费规则,写成kettle的转换,每个转换就是一个检查规则,这样的检查规则有好几百个,部分以下图:

 image.png






这么多的转换,不可能一个一个去运行,我把每10个转换交给1个做业来管理调用,部分截图以下:

 image.png













这样的话就方便多了,我只须要调用这几十个做业,就能够对间接的调用这几百个转换了。

7、工做的困难

  最开始只有一个地区的10家医院,咱们根据地区建立数据库,把本地区的全部医院的数据保存在对应库中hive的分区表里,使用医院的医疗机构编码做为分区Key。每家医院有本身的筛查转换文件,由于转换文件中的条件会使用到各医院的医疗机构编码不一样,每家医院筛查的结果保存的路径也不一样。每家医院对应500个转换和50个做业文件,10家医院我共修改5000个做文件和500个做业文件,固然了是使用工具快速查找替换的。

  可是如今有多个地区,医院数也由最初的10家变成了100多家。 我仍是手工去替换修改的话,我当场就去世了。如今还要修改数据库链接信息,由于多个地区,对应多个数据库。后期全国的数据都上来了,要修改的转换和做业文件,太多了。我也不用活了,直接就脑梗死了。

8、解决困难

  前面提到了每一个医院都有本身的几百个筛查转换,全部医院的数据结构是不变的。能不能只保留一套通用的筛查转换文件,由于筛查规则是同样的,就是各医院的医疗机构编码、结果文件输出路径、数据库链接信息是不一样的。因而想到了可使用java调用kettle,调用kettle时传入不一样的参数,在kettle中是可使用命名参数来接收,这样就实现了程序的复用性、灵活性。

  数据库相关替换的参数有:数据库名、数据库IP、端口号、用户名、密码。

  任务相关替换的参数有:医院的医疗机构编码、做业存放的结对路径、筛查结果文件保存路径。

附上 做业和转换的 命名参数 案例,以下截图:

  (1)kjb做业 全局的命名参数

image.png

  








(2)kjb做业中调用的转换 命名参数

image.png














(3)ktr转换 全局的命名参数

image.png










(4)ktr转换 DB链接的参数

 image.png












(5)结果文件输出路径 参数

image.png










  好多年不干java开发了,如今又要动代码,想一想就头疼。但工做还要继续,日子还要过。上百度查查吧,还真查到了SpringBoot调用kettle的文章。剩下的就是动手干吧,再次化身程序员。

9、项目代码结构

image.png















10、项目代码运行

(1)、启动springboot

  InsuranceETLApplication类中,右键------>Run As----->Java Application

(2)、在浏览器上输入

http://localhost:9090/kettle/task

  (3)、控制台输出打印

 image.png










从控制台输出的信息中,能够看到如今正在调用的load_violation_data_to_hive_01做业,并输出了该做业中当前转换执行的sql语句详细信息。

就写这么多吧,若是你也在搞ETL自动化,我们能够多交流。我在开发代码时,遇到了太多的坑,一块儿学习一块儿进步!


学习累了让本身笑一下吧,告诉本身将来的生活是美好的!!!

image.png

相关文章
相关标签/搜索