2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java项目集成kettle_项目知识学习篇———数据清洗之kettle以及集成到java项目

java项目集成kettle_项目知识学习篇———数据清洗之kettle以及集成到java项目

时间:2022-02-14 13:41:33

相关推荐

java项目集成kettle_项目知识学习篇———数据清洗之kettle以及集成到java项目

一、kettle工具下载

链接: /s/13Mx-QJkY-5dY-nDIpuZAzw 提取码: x146

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

二、kettle使用

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

2.右键DB连接 新建连接

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

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

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

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

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

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

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

三、集成到java项目

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

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

pentaho-kettle

kettle-core

8.1.0.0-365

pentaho-kettle

kettle-engine

8.1.0.0-365

pentaho

metastore

8.1.0.0-365

org.apache

commons-vfs2

2.2

com.google.guava

guava

17.0

commons-codec

commons-codec

1.10

commons-logging

commons-logging

1.1.3

oracle

ojdbc14

10.2.0.2.0

mysql

mysql-connector-java

5.1.41

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 =panyPath; //指定xml解析

System.setProperty("javax.xml.parsers.DocumentBuilderFactory",

".apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");

runKtr(filePath);

}

*/

public static void runKtr() {

// ktr文件路径

String filePath = panyPath;

// 指定xml解析

System.setProperty("javax.xml.parsers.DocumentBuilderFactory",

".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();

}

内容来源于网络如有侵权请私信删除

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。