kettle的入门
来源:互联网 发布:怎么在淘宝上投诉卖家 编辑:程序博客网 时间:2024/05/22 12:25
kettle是一个用java写的开源ETL工具,工作中用到了,分享一下使用
安装:
下载解压即可:
下载地址 https://nchc.dl.sourceforge.net/project/pentaho/Data%20Integration/7.1/pdi-ce-7.1.0.0-12.zip
解压完成后,安装环境变量
vim ~/.bash_profile下编辑
编辑完成后source bash_profile即可。
进入解压目录 sh spoon.sh即可运行
运行效果如下
注意,最新版本需要JDK1.8
安装完成后就可以使用了
kettle文件有二种类型 job 和 trans(转换) ,job从类型上看应该是trans的扩展版本
job:job中可以直接调用转换
trans:
介绍一下常用的组件
设置变量
可以设置job内的全局变量,我这边直接是从配置文件读取
数据库的配置
Json格式数据的处理
java脚本
这里详细说一下,java脚本必须要实现如下的方法
public booleanprocessRow(StepMetaInterface smi, StepDataInterface sdi)throwsKettleException {
}
双击此处Main可以快速生成如上方法
可以引用额外的方法
但是你的lib下或者项目中必须要有对应的jar,否则报错
获取输出字段
Object[] r =getRow();
if(r == null) {
setOutputDone();
returnfalse;
}
r = createOutputRow(r, data.outputRowMeta.size());
新增输出字段如下
获取指定的输入字段
String zhengxinJson = get(Fields.In,"limuzhengxinJson").getString(r);
字段的过滤和修改
行转列
这个是将横表改成纵表,由于需求变更,对应的部分被我删除了,后续再补上
数据的入库
数据直接的连接
kettle的日志配置
库表的记录如下
配置文件加载,配置在命名参数里面即可
上面做好,会生成对应的job/trans文件
java的调度
文件生成好,如何在项目里调用了?
1.新增依赖
<kettle.version>8.0.0.1-67</kettle.version>
<!-- kettle -->
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>${kettle.version}</version>
<exclusions>
<exclusion>
<groupId>jug-lgpl</groupId>
<artifactId>jug-lgpl</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-vfs2</artifactId>
</exclusion>
<exclusion>
<groupId>secondstring</groupId>
<artifactId>secondstring</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<artifactId>xercesImpl</artifactId>
<groupId>xerces</groupId>
</exclusion>
<exclusion>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-js</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.verhas</groupId>
<artifactId>license3j</artifactId>
<version>1.0.7</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>metastore</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>org.pentaho.di.plugins</groupId>
<artifactId>kettle-json-plugin-core</artifactId>
<version>8.0.0.0-28</version>
</dependency>
<dependency>
<groupId>org.pentaho.di.plugins</groupId>
<artifactId>kettle-json-plugin</artifactId>
<version>8.0.0.0-28</version>
<type>zip</type>
</dependency>
<!-- kettle —>
新增仓库地址
<repository>
<id>pentaho-public</id>
<name>Pentaho Public</name>
<url>http://nexus.pentaho.org/content/groups/omni</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
新增插件地址
<pluginRepository>
<id>pentaho-public</id>
<name>Pentaho Public</name>
<url>http://nexus.pentaho.org/content/groups/omni</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
Pom文件配置好后
*/
public synchronized void callNativeTransWithParams(String[] params,String transFileName)throws Exception {
// 解决jar包冲突
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
// 设置本地的插件
StepPluginType.getInstance().getPluginFolders().add(newPluginFolder("/opt/scf/ec/provider/kettle/plugins", false, true));
// 加载插件
KettleEnvironment.init();
// 初始化系统环境变量
EnvUtil.environmentInit();
// 生成一个转换元
TransMeta transMeta = new TransMeta(transFileName);
//transMeta.setVariable();
// 转换
Trans trans = new Trans(transMeta);
// 执行
trans.execute(params);
// 等待结束
trans.waitUntilFinished();
}
/**
* 调用job文件
* callNativeJob: TODO
*
* @paramjobName
*@throwsException
* @throws
*/
public synchronized void callNativeJob(String jobName)throwsException {
// 解决jar包冲突
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
// 设置本地的插件
StepPluginType.getInstance().getPluginFolders().add(newPluginFolder("/opt/scf/ec/provider/kettle/plugins", false, true));
// 初始化
KettleEnvironment.init();
JobMeta jobMeta = new JobMeta(jobName, null);
Job job = new Job(null, jobMeta);
// 设置参数
// job.setVariable(paraname, paravalue);
job.start();
job.waitUntilFinished();
}
这里说下这二句代码:(ps,这二个问题,纠结了半天,在stackoverflow上找到了答案)
第一个是解决jar包冲突
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl”);
第二个是解决插件不存在的错误
StepPluginType.getInstance().getPluginFolders().add(newPluginFolder("/opt/scf/ec/provider/kettle/plugins", false, true));
这样我们就能在项目中调度生成的文件
kettleUtil.callNativeJob(KettleConst.KETTLE_SHOP_JOB);
我参考了网上很多的集成代码,很多已经过时了,我这个应该算是最新的,maven库依赖都是我从官网上一个一个找的
网上的maven库都不能用,以此参考
上面案例的地址:
https://github.com/krauser1991/kettle阅读全文
0 0
- kettle的入门
- Kettle入门
- Kettle 入门
- kettle入门(1)
- kettle入门(2)
- Kettle入门——Kettle基本概念
- kettle入门(一) 之kettle连接oracle rac 报listener does not currently know of sid错误的解决
- kettle etl 入门第一篇
- kettle部署和kettle的初次使用
- kettle入门(三) 之kettle连接hadoop&hdfs图文详解
- kettle入门(六) 之kettle抽取变量表名表
- Kettle 的资源库
- KETTLE 的使用
- KETTLE 的使用
- kettle 3.2的webstart
- kettle组件的效率
- kettle 的命令调用
- Kettle的一些常见问题
- Tensorflow下运行数字识别
- 2017年——迷茫的一年
- HttpServletResponse的说明
- Java运行结果返回的是@加一串乱七八糟时
- 2. Add Two Numbers
- kettle的入门
- 刷题笔记:C/C++专项练习7
- Unable to open debugger port (127.0.0.1:63777): java.net.BindException "Address already in use: JVM
- python 标准库 —— 线程与同步(threading、multiprocessing)
- <剑指offer 面试题5>替换空格(Java)
- Java/OSGi ClassLoader
- linux平台下的写文件刷新
- “QCoreApplication::applicationDirPath: Please instantiate the QApplication object first”问题
- 设计模式之——策略模式