ETL工具一一kettle的使用

1、ETL及其常用工具

ETL:Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL是将业务系统的数据经过抽取、清洗转换后加载到数据仓库的过程。

ETL详细介绍:https://www.cnblogs.com/yjd_hycf_space/p/7772722.html

ETL常用工具:
1、informatica、Datastage
information专业的ETL工具,收费,价格比Datastage便宜一点,适合大规模的ETL项目,Datastage是IBM公司的ETL工具,也要收费,适合大规模的ETL项目,这两个都是分客户端和服务端的,因为收费速度比较快,比较稳定

2、Talend
java编写的,分为开源版和企业版,按照以后也可以界面化操作,不过只能job,没有transform,说实话没用过,只是看了下,感觉适合大型项目,操作有点复杂

3、Kettle
​ kettle是基于Java的ETL工具,只需要jvm环境就可以使用,并且是免费开源的,可跨平台,扩展性比较好,提供界面化操作,操作还比较简单

2、kettle的下载安装
2.1 kettle简介

kettle家族目前包括4个产品:Spoon Pan Chef Kitchen
Spoon:kettle的界面化操作,可以通过图形界面来操作ETL的转换过程
Pan:允许批量运行由Spoon设计的ETL转换,Pan是一个后台执行的程序,没有图形界面
Chef:允许创建任务(job),任务通过允许每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。任务通过允许每个转换,任务,脚本等等,任务将会被检查,看是否正确的执行。
Kitchen:允许批量使用由Chef设计的任务,Kitchen是一个后台运行的程序

2.2 kettle下载安装

下载地址:https://sourceforge.net/projects/pentaho/files/Data Integration/
kettle绿色安装,下载kettle的zip包,解压即可使用,下面就是解压以后的安装目录,其中lib文件夹中放的都是jar包,如果kettle要链接mysql配置,需要将数据库连接驱动包放到这里,要引用自定义java代码jar包也放到这里
image-20200817111033232Windows系统直接运行Spoon.bat文件,就可以打开运行spoon可视化界面,通过这个图形界面可以进行你想做的ETL操作。界面如下:
image-20200817113205066kettle的控件有2种,分为:作业(job)和转换(Transform)

转换:主要是针对数据的各种处理,一个转换可以包含多个步骤(Step),我目前的操作都是根据转换完成的。

作业:更加关心更为宏观的数据处理,比如文件和目录操作等等。一个作业可以包含多个作业项(Job Entry)。作业和转换均可作为一个作业项,也就是说,一个作业可以包含多个子作业和转换。一个作业中的作业项之间是顺序执行的。对于一个作业项来说,只有当该作业项之前的所有作业项执行完毕后,才会执行该作业项。

3、kettle的使用
3.1 kettle之转换的基本概念

image-20200817142629946新建了一个转换后会有主对象树和核心对象这两个
主对象树:

  • DB连接是数据库的连接,这里我新建了一个mysql的连接命名为user
  • Steps(步骤):是这个转换的步骤,我在这里创建了三个步骤,表输入 / java代码 / 插入更新
  • Hops(节点连接):是每个步骤之间的连接,创建连接以后是一个串行的结构,执行了表输入拿到数据 ----> 在执行java代码,对数据进行处理 -----> 处理完以后执行更新数据步骤

image-20200817143342443
这张表中展示的是所有的核心对象中的控件,上面的步骤都是一个个控件,表输入是输入控件中的,java代码是脚本控件,插入/更新是输出控件。

3.2 输入控件的使用

image-20200817144436111

上面是所有的输入控件中包含的步骤,可以进行csv文件和Excel文件的输入等等,功能还是很强大

简单案例:输入一个csv文件

image-20200817144955473

选择文件 ------> 新建 --------> 转换 -------> ctrl+s保存重命名

image-20200817145346681

选择 -------> 核心对象 -------> 输入 --------> 双击csv文件输入控件,在右边就会出现csv文件输入的步骤

image-20200817145518204image-20200817145618875

  • 1、选择csv文件输入右键选中编辑步骤,弹出CSV文件输入弹窗
  • 2、浏览选择要输入的文件
  • 3、选择文件后获取字段会自动识别文件中的字段填充到上图的表中
  • 4、点击预览,预览文件中指定行数的数据
  • 5、点击确定保存数据
3.3 输出控件的使用

image-20200817151316341

以上是输出控件中包含的,可以输出excel文件,输出表,插入/更新表,输出配置文件都可以

输出步骤必须在输入步骤后面,因为一定要有输入流以后才能输出数据,否则不能输出数据

简单案例:输入一个csv文件后,输出Excel文件 ,输入步骤参考上面

image-20200817151834789

image-20200817152027119

image-20200817152306049

  • 点击输出 ------> 双击Excel输出 ------> 右边出现Excel输出步骤后
  • 按住shift键,鼠标右键建立csv文件输入和Excel输出的节点连接,选择主输出步骤
  • 右键Excel输出,选择编辑步骤 --------> 浏览指定输出文件目录 -------> 点击确认保存
  • 点击运行会执行这个转换,如果报错会在日志中输出报错信息
3.4 脚本控件的使用

image-20200817152437134

脚本控件可以写java代码sql脚本还有JavaScript代码,我常用的就是java脚本

简单案例:添加java脚本对数据进行转换,这里也是需要先使用输入控件获取数据,然后java脚本对数据进行处理,我直接讲java脚本处理,就省略掉前面输入的步骤

image-20200817153316578

image-20200817153924771

  • 点击脚本 ------> 双击java代码 -------> 选中java代码右键选择编辑步骤
  • 点击展开Code Snippits ------> 点击展开Common use ------> 点击Main,出现右边的代码块
  • 这是一个processRow()方法,在这里面根据模板添加自己的java代码,处理数据,上面的框框就是我自定义的java代码,通过code字段是否为空,给newcode字段赋值
  • 下面是在数据流中新建了一个字段newcode,String类型,上面的代码就是给newcode的赋值
  • 完成代码后点击测试类,如果弹出上面的弹窗说明代码没问题,可以选择预览数据,如果报错会弹出报错信息
3.5 案例1

根据我们时间的因为需求,将tb_product_cash_sale_sku新增三个未税价格字段,并且根据不同的公司现在是含税价还是不含税价,及其税率,计算出另外三个价格

思路:1、在表中新建三个不含税字段,创建输入表控件,将数据输入到流中

​ 2、创建java脚本,在数据流中新建含税价和未税价共6个字段,然后用java代码根据公司重新计算每一个价格并赋值给数据流中新建的价格字段

​ 3、创建插入/更新步骤,将数据库中的价格字段重新对应数据流中新建的价格字段进行更新操作

步骤:

  • 1、新建转换以后, 创建数据库连接

image-20200817155400434

image-20200817155700385

现在对表操作,新建完转换以后要创建数据库连接,选择mysql连接,主机名称是mysql的主机IP,数据库名称是要连接的数据库的名称,下面就是mysql的端口,用户名和密码,连接方式使用的是jdbc连接池,这里需要注意的是连接mysql之前要在kettle的lib文件夹下放入mysql连接驱动jar包,点击测试会告知是否连接成功,以及连接失败的报错原因

image-20200817160303641

选择选项可以配置其他数据库连接参数,这些参数可以影响读取和写入表的速度

  • 2、创建输入表步骤,在编辑步骤中获取tb_product_cash_sale_sku数据

image-20200817160712284

点击获取SQL查询语句选择要输入的表,这个sql是自动填充的,如果要连表查询,这里可以写自定义sql获取数据,框框中的三个字段是新增的未税价格,后期存储的就是未税的价格

  • 3、创建java脚本,并且创建输入表和java脚本直接的节点连接

    image-20200817162202979

    在数据流中新建6个字段,重新保存价格,上面的java代码是根据公司不同计算了每个公司的6种价格,并赋值给数据流中新创建的这几个字段,上面是未税价格,下面是对应的含税价

  • 4、创建插入/更新步骤

    image-20200817161357436

  • 目标表:选择要修改的表

  • 提交记录数据:是每次修改提交的数据,默认值是1000,因为这张表数据有4万多,我设置5万,一次性提交

  • 用来查询的关键字:是根据那个字段锁定数据并更新数据,这里选定的是id

  • 流字段:是输入流中的字段,也包含java代码中新建的字段都是数据流中的字段

  • 表字段:是目标表中的字段

我只修改了价格字段,所以上面其他字段都没变,值是将6个价格字段重新赋值更新为,我在java代码那里新建的6个数据流字段

kettle管理工具专门为kettle这款优秀的ETL工具开发的web端管理工具。项目简介kettle作为非常优秀的开源ETL工具得到了非常广泛的使用,一般的使用的都是使用客户端操作管理,但问题是当投入生产环境使用时,动辄上百或几百个job需要管理,这时在使用客户端管理已经很难完成了。我所知道的解决方案有用命令行的调用的,操作麻烦,总之还是很难用啦,还有就是开发web端管理工具kettle自带了一个web端管理工具,界面极其简陋不说,还很难用,基本无法投入生产环境使用,其他没留意到还有没有较好对众多job进行管理的工具。基于以上情况,和我近两年的kettle定制开发与使用经验。我设计并开发了这款kettle web端管理工具。本系统当前支持oracle和mysql项目功能job运行参数设置,可以在页面上设置作业运行参数,每次运行作业时会用设置的参数覆盖默认值,这个很多人用不上。定时设置,操作界面与kettle中的开始控件界面一致,这个可能是最优用的功能之一。作业的运行与停止,核心功能就不说了。实时查看作业运行日志,最大显示行数可以配置,这个功能看起来不起眼,实际应该是很有用的。后台有一个作业专门完成将运行的作业日志写入日志文件,文件按天分文件夹存放,日志文件大小可以配置,若觉得占用空间,可以设计一个作业进行定时清理以前的日志文件,后续会提供该作业。也可以配置为不写日志文件。作业的运行状态会定时反映到管理界面,我们可以通过多种条件筛选我们需要的作业进行批量运行或停止。本系统是基于数据库资源库设计的,暂时不考虑支持文件资源库。本系统还附带了一个kettle插件,类似kettle已有的自定义类控件(可以在转换中写java代码)。该控件的设计时为了避免每一个需求都去开发一个kettle控件,从后台元数据管理到操作界面设计。该控件采用灵活的JSON传递参数,然后继承一个基类就可以完成一个任务了,就是说基于该控件,只需要开发一个具体的操作类就可以了。有兴趣可以看一下,详细介绍参看:http://www.cnblogs.com/majinju/p/5767046.html。界面截图主界面定时设置界面参数设置界面运行日志查看界面平台级日志,支持查询下载项目介绍主页:kettle-manager主页 标签:Kettle  ETL工具框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值