数据清洗之kettle以及集成到java项目

一、kettle工具下载

链接: https://pan.baidu.com/s/13Mx-QJkY-5dY-nDIpuZAzw 提取码: x146

数据清洗之kettle以及集成到java项目

pdi-ce-8.1.0.0.zip就是kettle软件   下载之后解压     进入文件夹根目录点击Spoon.bat就能开启客户端

 

 二、kettle使用

数据清洗之kettle以及集成到java项目

  1.需要连接上两个数据库   一个是你想要copy的库    还有一个是你自己的库    我这里是需要从一个oracle库拿到数据    然后放入到我这边的mysql数据库

  2.右键DB连接   新建连接

数据清洗之kettle以及集成到java项目

3.我这里使用的是oracle和mysql需要两个连接包   在我网盘链接里有  ojdbc14-10.2.0.2.0.jar和mysql-connector-java-5.1.41.jar     拷贝放入到kettle的lib下上一步就可连接成功

4.然后就是两个库的关联映射  点击文件---新建----转换   将以下两个  表输入和插入/更新拖到转换之中   用shift将两个连接起来   效果如下

数据清洗之kettle以及集成到java项目数据清洗之kettle以及集成到java项目

 

数据清洗之kettle以及集成到java项目

 

5.点击表输入  连接上你想要拷贝数据库的源数据库   获取sql语句就是查询你想要的表的数据

数据清洗之kettle以及集成到java项目

 

6.点击 插入更新  连接上你的本地数据库   浏览找到对应表  关联上两个表的唯一标示id  类似主键关联  kettle根据这个判断插入还是更新

然后下面关联上你想要更新的字段点确定就可以跑起来了

数据清洗之kettle以及集成到java项目

7.这样你就可以从一个库同步数据到你的库    你可以在你本机windows下运行也可以在linux系统下部署kettle  然后可以新建job来调用转换  实现定时更新数据

保存这个转换你可以得到一个.ktr文件  纯Java编写的可以集成到Java项目之中

 

 三、集成到java项目

 1.以上 的方式可以拿到数据   不过部署到linux系统由于kettle有点大   再去服务器中调用   想想还是算了   还是集成到Java项目中更合理

 

2.集成到java项目需要几个包

<!-- kettle相关jar包 -->
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>8.1.0.0-365</version>
</dependency>

<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>8.1.0.0-365</version>
</dependency>

<dependency>
<groupId>pentaho</groupId>
<artifactId>metastore</artifactId>
<version>8.1.0.0-365</version>
</dependency>

<dependency>
<groupId>org.apache</groupId>
<artifactId>commons-vfs2</artifactId>
<version>2.2</version>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>17.0</version>
</dependency>

<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>

<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>

<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.2.0</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>

<!-- kettle jar包结束 -->

3.jar包我分享的网盘有   国内镜像没有kettle相关包  可以把我的包加入你maven的本地仓库中就好   有些是没用的  根据上面我给的pom加就好

 

4.创建一个service类   调用kettle的转换生成的.ktr文件就可以集成到java中  然后我们可以使用spring定时调度框架Task定时调用这个类就实现了定时更新数据  是不是很方便啊  嘿嘿嘿

@Service("getCompanyInfoService")
public class GetCompanyInfoService {

/*

//main方法用于测试
 public static void main(String[] args) {

//ktr文件路径 String filePath =CompanyAndVehicleInfo.companyPath; //指定xml解析

 System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
 runKtr(filePath)
;

                }

*/

public static void runKtr() {
// ktr文件路径
String filePath = CompanyAndVehicleInfo.companyPath;
// 指定xml解析
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
try {
// 初始化
KettleEnvironment.init();
// 创建ktr元对象
TransMeta transMeta = new TransMeta(filePath);
// 创建ktr
Trans trans = new Trans(transMeta);
// 执行ktr
trans.execute(null);
// 等待执行完毕
trans.waitUntilFinished();
// 判断执行是否出错
if (trans.getErrors() > 0) {
System.err.println("文件执行出错!!!!!!!!");
}

} catch (KettleException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

5.Task类

@Component
@EnableScheduling
public class CompanyAndCycleTask {
@Autowired
private GetCompanyInfoService getCompanyInfoService;

// 设置每天2.00
@Scheduled(cron = "0 0 2 * * ?")
@Scheduled(fixedRate = 1000 * 60 * 10)
public void getCompanyInformation() {
getCompanyInfoService.runKtr();

}

 

我的博客园地址:https://www.cnblogs.com/unrulywind/