文档章节

记 java 调用 ETL 工具 kettle 作业

skhuhu
 skhuhu
发布于 2016/09/29 17:27
字数 838
阅读 207
收藏 0
点赞 0
评论 0
  1. import org.pentaho.di.core.database.DatabaseMeta;  
  2. import org.pentaho.di.core.exception.KettleException;  
  3. import org.pentaho.di.core.logging.LogWriter;  
  4. import org.pentaho.di.core.util.EnvUtil;  
  5. import org.pentaho.di.job.Job;  
  6. import org.pentaho.di.job.JobEntryLoader;  
  7. import org.pentaho.di.job.JobMeta;  
  8. import org.pentaho.di.repository.Repository;  
  9. import org.pentaho.di.repository.RepositoryDirectory;  
  10. import org.pentaho.di.repository.RepositoryMeta;  
  11. import org.pentaho.di.repository.UserInfo;  
  12. import org.pentaho.di.trans.StepLoader;  
  13. import org.pentaho.di.trans.Trans;  
  14. import org.pentaho.di.trans.TransMeta;  
  15.   
  16. /** 
  17.  * Java调用Kettle示例代码 
  18.  *  
  19.  * @author 李文锴 
  20.  * @since 2012-8-14 下午03:50:00 
  21.  *  
  22.  */  
  23. public class KettleTest {  
  24.   
  25.     public static void main(String[] args) throws KettleException {  
  26.         String filename = "voucher.ktr";  
  27.         // callNativeTrans(filename);  
  28.         // executeTrans();  
  29.         // executeJobs();  
  30.         callNativeTransWithParam(filename);  
  31.         System.out.println("ok");  
  32.     }  
  33.   
  34.     /** 
  35.      * 调用本地的转换文件 
  36.      *  
  37.      * @Description: 
  38.      * @param transFileName 
  39.      * @throws KettleException 
  40.      * @author 李文锴 
  41.      * @since:2012-8-15 下午02:58:41 
  42.      */  
  43.     public static void callNativeTrans(String transFileName) throws KettleException {  
  44.         // 初始化  
  45.         EnvUtil.environmentInit();  
  46.         StepLoader.init();  
  47.         // 转换元对象  
  48.         TransMeta transMeta = new TransMeta(transFileName);  
  49.         // 转换  
  50.         Trans trans = new Trans(transMeta);  
  51.         // 执行转换  
  52.         trans.execute(null);  
  53.         // 等待转换执行结束  
  54.         trans.waitUntilFinished();  
  55.     }  
  56.   
  57.     /** 
  58.      * 调用本地的转换文件(带参数) 
  59.      *  
  60.      * @Description: 
  61.      * @param transFileName 
  62.      * @throws KettleException 
  63.      * @author 李文锴 
  64.      * @since:2012-8-15 下午02:58:54 
  65.      */  
  66.     public static void callNativeTransWithParam(String transFileName) throws KettleException {  
  67.         // 初始化  
  68.         EnvUtil.environmentInit();  
  69.         StepLoader.init();  
  70.         // 转换元对象  
  71.         TransMeta transMeta = new TransMeta(transFileName);  
  72.         // 转换  
  73.         Trans trans = new Trans(transMeta);  
  74.         String[] params = {};  
  75.         // 执行转换  
  76.         trans.execute(params);  
  77.         // 等待转换执行结束  
  78.         trans.waitUntilFinished();  
  79.   
  80.     }  
  81.   
  82.     /** 
  83.      * 执行存储在数据库资源库中的转换 
  84.      *  
  85.      * @Description: 
  86.      * @throws KettleException 
  87.      * @author 李文锴 
  88.      * @since:2012-8-15 下午02:59:14 
  89.      */  
  90.     public static void executeTrans() throws KettleException {  
  91.         // 初始化  
  92.         EnvUtil.environmentInit();  
  93.         StepLoader.init();  
  94.         // 日志  
  95.         LogWriter log = LogWriter.getInstance("TransTest.log", true, LogWriter.LOG_LEVEL_DEBUG);  
  96.         // 用户  
  97.         UserInfo userInfo = new UserInfo();  
  98.         userInfo.setLogin("admin");  
  99.         userInfo.setPassword("admin");  
  100.         // 数据库连接元对象(连接名称,不必与kettle中配置的保持一致:数据库类型:连接方式(kettle支持的连接方式):资源库IP:资源库实例名:资源库端口:资源库用户名:资源库用户密码)  
  101.         DatabaseMeta connection = new DatabaseMeta("", "Oracle", "Native", "192.168.3.232", "NSDEV", "1521", "nstcsa3441", "671468");  
  102.         // 资源库元对象  
  103.         RepositoryMeta repinfo = new RepositoryMeta();  
  104.         repinfo.setConnection(connection);  
  105.         // 资源库  
  106.         Repository rep = new Repository(log, repinfo, userInfo);  
  107.         // 连接资源库  
  108.         rep.connect("");  
  109.         // 资源库目录对象  
  110.         RepositoryDirectory dir = new RepositoryDirectory(rep);  
  111.         // 转换元对象  
  112.         TransMeta transMeta = new TransMeta(rep, "凭证(N9->EVC2)", dir);  
  113.         // 转换  
  114.         Trans trans = new Trans(transMeta);  
  115.         // 执行转换  
  116.         trans.execute(null);  
  117.         // 等待转换执行结束  
  118.         trans.waitUntilFinished();  
  119.     }  
  120.   
  121.     /** 
  122.      * 执行本地的任务文件 
  123.      *  
  124.      * @Description: 
  125.      * @param jobFileName 
  126.      * @throws KettleException 
  127.      * @author 李文锴 
  128.      * @since:2012-8-15 下午02:59:34 
  129.      */  
  130.     public static void callNativeJob(String jobFileName) throws KettleException {  
  131.         // 初始化  
  132.         EnvUtil.environmentInit();  
  133.         JobEntryLoader.init();  
  134.         StepLoader.init();  
  135.         // 日志  
  136.         LogWriter log = LogWriter.getInstance("TransTest.log", true, LogWriter.LOG_LEVEL_DETAILED);  
  137.         // job元对象  
  138.         JobMeta jobMeta = new JobMeta(log, jobFileName, null);  
  139.         // job  
  140.         Job job = new Job(log, StepLoader.getInstance(), null, jobMeta);  
  141.         jobMeta.setInternalKettleVariables(job);  
  142.         // 执行job  
  143.         job.execute();  
  144.         // 等待job执行结束  
  145.         job.waitUntilFinished();  
  146.     }  
  147.   
  148.     /** 
  149.      * 执行数据库资源库中的任务 
  150.      *  
  151.      * @Description: 
  152.      * @throws KettleException 
  153.      * @author 李文锴 
  154.      * @since:2012-8-15 下午02:59:45 
  155.      */  
  156.     public static void executeJobs() throws KettleException {  
  157.         // 初始化  
  158.         EnvUtil.environmentInit();  
  159.         JobEntryLoader.init();  
  160.         StepLoader.init();  
  161.         // 日志  
  162.         LogWriter log = LogWriter.getInstance("TransTest.log", true, LogWriter.LOG_LEVEL_DETAILED);  
  163.         // 用户  
  164.         UserInfo userInfo = new UserInfo();  
  165.         userInfo.setLogin("admin");  
  166.         userInfo.setPassword("admin");  
  167.         // 数据库连接元对象  
  168.         DatabaseMeta connection = new DatabaseMeta("", "Oracle", "Native", "192.168.3.232", "NSDEV", "1521", "nstcsa3441", "671468");  
  169.         // 资源库元对象  
  170.         RepositoryMeta repinfo = new RepositoryMeta();  
  171.         repinfo.setConnection(connection);  
  172.         // 资源库  
  173.         Repository rep = new Repository(log, repinfo, userInfo);  
  174.         // 连接资源库  
  175.         rep.connect("");  
  176.         // 资源库目录对象  
  177.         RepositoryDirectory dir = new RepositoryDirectory(rep);  
  178.         // 步骤加载对象  
  179.         StepLoader steploader = StepLoader.getInstance();  
  180.         // job元对象  
  181.         JobMeta jobmeta = new JobMeta(log, rep, "4.账户每日余额", dir);  
  182.         // job  
  183.         Job job = new Job(log, steploader, rep, jobmeta);  
  184.         // 执行job  
  185.         job.execute();  
  186.         // 等待job执行结束  
  187.         job.waitUntilFinished();  
  188.   
  189.     }  
  190.   
  191. }  

 

kettle 6.0 初始方法变动 

/**
 * 调用本地的转换文件
 */
public static void callNativeTrans(String transFileName) throws KettleException {
    // 初始化
    KettleEnvironment.init();
    // 转换元对象
    TransMeta transMeta = new TransMeta(transFileName);
    // 转换
    Trans trans = new Trans(transMeta);
    // 执行转换
    trans.execute(null);
    // 等待转换执行结束
    trans.waitUntilFinished();

    if (trans.getErrors() > 0) {
        throw new RuntimeException(
                "There were errors during transformation execution.");
    }
}

/**
 * 调用本地的转换文件(带参数)
 *
 */
public static void callNativeTransWithParam(String transFileName) throws KettleException {
    // 初始化
    KettleEnvironment.init();
    // 转换元对象
    TransMeta transMeta = new TransMeta(transFileName);
    // 转换
    Trans trans = new Trans(transMeta);
    String[] params = {};
    // 执行转换
    trans.execute(params);
    // 等待转换执行结束
    trans.waitUntilFinished();

    if (trans.getErrors() > 0) {
        throw new RuntimeException(
                "There were errors during transformation execution.");
    }
}

本文转载自:http://blog.csdn.net/scorpio3k/article/details/7869196

共有 人打赏支持
skhuhu
粉丝 7
博文 10
码字总数 521
作品 0
程序员
阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习 ⋅ 04/25 ⋅ 0

Kettle在linux安装后,spoon启动闪退,如何解决?

os:CentOS release 6.9 (Final) java:JDK108 KETTLE:pdi-ce-7.1.0.0-12 配置好环境变量,启动spoon.sh, 页面闪现就退掉,试过两种方法: 1. vim spoon.sh 修改java参数 if [ -z "$PENTAH...

gs0325 ⋅ 04/28 ⋅ 0

kettle下转移mongo中数据到mysql中

Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。作为一个数据抽取工具,在建立数据仓库的过程中,免不了需要从不同的数据源中抽取到集中的...

gsying1474 ⋅ 2017/01/06 ⋅ 0

Java研发大学毕业后为何找不到理想的工作

现在大学生在大学学习Java技术,毕业后直接工作,我想在大家心里这只是再平常不过的事情了,可是为啥刚一毕业的Java应聘工程师会遭到各个研发企业的拒绝,这是刚毕业的每个大学生心中的疑虑,...

我爱编程学习 ⋅ 06/07 ⋅ 0

ETL for Oracle to PostgreSQL 2 - Pentaho Data Integrator (PDI, kettle)

标签 PostgreSQL , Oracle , ETL , Pentaho Data Integrator , PDI , kettle 背景 原文 https://wiki.postgresql.org/wiki/MigratingfromonedatabasetoanotherwithPentahoETL Migration (sc......

德哥 ⋅ 05/06 ⋅ 0

热修复与插件化基础——Java与Android虚拟机

一、Java虚拟机(JVM) 1、JVM整体结构 使用javac将java文件编译成class文件。 类加载器(ClassLoader)将class字节码加载进JVM对应的内存中。 JVM将内存分配给方法区、堆区、栈区、本地方式...

CSDN_LQR ⋅ 05/13 ⋅ 0

Linux后台运行java -jar

问题描述 我打好的jar包,放在服务器上之后,在windows里面用xshell打开一个连接,然后运行java -jar 。。。。执行这个jar文件,当我关闭这个链接的时候为什么程序停止了呢? 打开XShell连接...

汪纬 ⋅ 04/12 ⋅ 0

Oracle Java Mission Control 帮助

缩写 含义 JDK Java 开发工具包 JDP Java Discovery Protocol JFR Java 飞行记录器 JMC Java Mission Control JMX Java Management Extensions JVM Java 虚拟机 MBean 托管 Bean (Java) RCP ......

光斑 ⋅ 04/27 ⋅ 0

ETL for Oracle to PostgreSQL 1 - Oracle Data Integrator (ODI)

标签 PostgreSQL , Oracle , ETL , Oracle Data Integrator , ODI 背景 原文 https://www.cdata.com/kb/tech/postgresql-jdbc-odi.rst 正文 ETL PostgreSQL in Oracle Data Integrator This ......

德哥 ⋅ 05/06 ⋅ 0

编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting ⋅ 06/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 16分钟前 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部