一、背景
ETL 工具很多年前都听过,一直没有深入研究,虽然项目很多地方用到数据交换,为了赶工都是团队简单实现;最近再做一款类似 BI 的产品,之前那种简单实现肯定满足不了需求了,此时才深入了解ETL,看到开源 Kettle 工具,下载并体验一番,感觉很棒,同时也参考了竞品,感觉这个工具体积比较大、部署也很复杂,是个客户端模式,结合产品需要才有了想在此基础进行二次开发的想法,主要利用其核心引擎提供的API功能,自己产品独立完成前端(web)页面,实现ETL功能;不知道有没有和我想法一致的小伙伴一块进行探究!
经过两天的熟悉,进行小试牛刀,完成了一个简单的集成
二、开发环境
SpringBoot+myBatis+ kettle 7.0.0.2-52
三、具体实现
实现目标:通过Kettle客户端生成一个转化,主要实现将 csv 文件数据转化为sql语句
1、第一步:生成转化文件
2.第二部:在 java 项目中执行该转化
创建IDEA中springBoot项目,在 pom 文件依赖
<properties>
<java.version>1.8</java.version>
<kettle.version>7.0.0.2-52</kettle.version>
</properties>
<!--kettle dependency start-->
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-dbdialog</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho</groupId>
<artifactId> meta store</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-ui-swt</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho</groupId>
<artifactId>pentaho-vfs-browser</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-sap-plugin</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-json-plugin</artifactId>
<version>${kettle.version}</version>
</dependency>
<!--<dependency>-->
<!--<groupId>pentaho</groupId>-->
<!--<artifactId>pentaho-big-data-plugin</artifactId>-->
<!--<version>7.1.0.0-12</version>-->
<!--</dependency>-->
<dependency>
<groupId>pentaho</groupId>
<artifactId>pentaho-big-data-kettle-plugins-hdfs</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho</groupId>
<artifactId>pentaho-big-data-impl-cluster</artifactId>
<version>${kettle.version}</version>
</dependency>
<!--kettle dependency end-->
注意repositories设置,否则无法正确依赖
<repositories>
<repository>
<id>pentaho-releases</id>
<name>Kettle</name>
<url>
</repository>
<!-- 阿里云maven仓库 -->
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
在java项目代码中执行转化
@ Rest Controller
@RequestMapping("trans")
public class TransGraphController {
@ResponseBody
@RequestMapping(method= RequestMethod.POST, value="run")
public String run() throws KettleException {
// 初始化
KettleEnvironment.init();
// 加载文件
TransMeta transMeta = new TransMeta("D:/temp/test.ktr");
Trans trans = new Trans(transMeta);
trans.prepareExecution(null);
trans.startThreads();
// 等待执行完毕
trans.waitUntilFinished();
return "ok";
}
}
四、实现效果
在postman里调用接口进行测试
虽然很简单,也算是开启了二开,离真正的需求还很远,有兴趣的小伙伴们一起加入吧!