一、背景
公司有个基于Kettle二次开发产品主要定位是做一些数据ETL的工作, 所谓的ETL就是针对数据进行抽取、转换以及加载的过程,说白了就是怎么对原始数据进行清洗,最后拿到我们需要的、符合规范的、有价值的数据进行存储或者分析的过程。
一般处理ETL的工作有几种,对于程序员来说,最直接的就是撸代码,输入数据、处理、最后输出数据。 但是大家发现其实ETL的过程其实很多过程都能复用或者说组件都相对固定, 例如数据的输入,MySQL、Kafka、文件等等方式可以作为数据源输入,输出又比如输出到MySQL、HTTP请求、Kafka、生成文件等等。 如果每次都是这样重复撸代码也是比较浪费时间。 所以像ELK中对日志的处理, Logstash其实就能做数据清洗的工作,支持input、filter、output.
当然以上是代码形式实现,那么有没有相对简单入门的ETL开源工具呢? 最好是有可视化UI界面的。 因为有时候特别是产品经理或者一些没那么负责的ETL工作,通过可视化UI进行配置流程和参数的方式就能很快地对数据进行处理。 这个就是今天要介绍的ETL工具Kettle.
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、 Linux、 Unix上运行,绿色无需安装,数据抽取高效稳定。
Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。
Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
Kettle(现在已经更名为PDI,Pentaho Data Integration-Pentaho数据集成)。
二、安装与基本使用
1、基本安装
1、必须安装jdk1.8以上的Java环境.
2、官方下载网址: Pentaho Community Edition Download | Hitachi Vantara
3、下载压缩包
4、解压运行Spoon.bat,进入主界面
2、快速体验-CSV文件格式转XLS文件格式
下面是一个快速体验的例子, 这里用到一个CSV输入组件作为数据源输入, 之后将处理完的数据(很简单,中间没有处理过程的组件), 直接将数据通过XLS组件输出,生成excel文件, 本次转换完成。
原csv文件内容:
1、拖入csv输入组件,将结果输出到XLS组件
2、配置csv组件相关信息
3、编辑excel输出组件需要提取生成的字段信息
4、crtl+s保存转换代码, 点击运行转换作业
5、查看执行结果与输出日志
6、查看生成的excel格式文件内容
3、kafka消费数据,提交到HTTP API接口
1、先准备源数据,将JSON数据写入kafka的topic
往kafka写入4条json数据,我们通过消费kafka拿到这几条数据,每条通过HTTP提交到目标接口
2、kafka输入组件、json处理组件、HTTP REST客户端组件
3、kafka组件配置信息
可视化填写kafka地址、选择要消费的topic、填写consumer名称, Options还可以选择从头消费数据还是从最新末尾消费数据等其它参数。 消费完数据后交给下一个组件进行处理
4、提交到HTTP接口组件
也是填写URL地址、请求方式、要请求的字段信息.最后查看执行结果
三、总结
总结一下使用下来的体验, 确实UI可视化界面(可视化编程)的这种方式很直观、也很方便, 做一些简单的ETL工作也得心应手,如果ETL数据的过程不是很复杂,那么我觉得使用Kettle也是没啥问题的。
但是对于复杂的ETL过程,使用Kettle我是感觉比较难受了,虽然,它支持引入脚本组件(java、javascript等编程语言插件)可以自定义对上游组件的输出数据进行自定义处理。 但是必须要非常熟悉Kettle的玩法才能把这个东西完明白,特别是数据流、数据格式,要不然玩自定义代码也是比较难以入手的。反正我自己用起来没那么爽,可能是我不太熟悉的原因。
每个公司的每个产品、项目都不一样,需求也不一样,有些公司使用这个Kettle作为生产环境的ETL工具, 有些则不使用。 没有最好的技术产品,只有合适的技术方案选择,大家可以根据自己的实际情况选择合适的ETL工具和方法.