kettle的入门

kettle是一个用java写的开源ETL工具,工作中用到了,分享一下使用

安装:
下载解压即可:

解压完成后,安装环境变量
vim ~/.bash_profile下编辑
编辑完成后source bash_profile即可。
进入解压目录 sh spoon.sh即可运行
运行效果如下
注意,最新版本需要JDK1.8

安装完成后就可以使用了
kettle文件有二种类型 job 和 trans(转换) ,job从类型上看应该是trans的扩展版本
job:job中可以直接调用转换
trans:


介绍一下常用的组件
设置变量
可以设置job内的全局变量,我这边直接是从配置文件读取
数据库的配置
Json格式数据的处理
java脚本
这里详细说一下,java脚本必须要实现如下的方法
public boolean processRow (StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
}

双击此处Main可以快速生成如上方法

可以引用额外的方法
但是你的lib下或者项目中必须要有对应的jar,否则报错
获取输出字段
 Object[] r = getRow ();
  if (r == null) {
    setOutputDone ();
    return false;
  }
  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>
    <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>
    <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
*
* @param jobName
* @throws Exception
* @throws
*/
public synchronized void callNativeJob(String jobName) 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() ;
       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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值