ETL-kettle通过java代码传递参数,调用job调用转换

定义变量,以表输入为例,定义变量名称为${变量名},这里用test为变量名。并且勾选sql语句变量

package demo;

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.repository.RepositoryDirectoryInterface;
import org.pentaho.di.repository.kdr.KettleDatabaseRepository;
import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

public class KettleTest {
    public static void runWithDb() throws Exception {
        KettleEnvironment.init();
        //创建DB资源库
        KettleDatabaseRepository repository=new KettleDatabaseRepository();
        DatabaseMeta databaseMeta=new DatabaseMeta("kettle","mysql","jdbc","localhost","kettle_repository","3306","root","root");
        //选择资源库
        KettleDatabaseRepositoryMeta kettleDatabaseRepositoryMeta=new KettleDatabaseRepositoryMeta("kettle","kettle","Transformation description",databaseMeta);
        repository.init(kettleDatabaseRepositoryMeta);
        //连接资源库
        repository.connect("admin","admin");
        RepositoryDirectoryInterface directoryInterface=repository.loadRepositoryDirectoryTree();
        //选择转换
//        TransMeta transMeta=repository.loadTransformation("测试随机数",directoryInterface,null,true,null);
//        Trans trans=new Trans(transMeta);
//        trans.execute(null);
//        trans.waitUntilFinished();//等待直到数据结束
//        if(trans.getErrors()>0){
//            System.out.println("transformation error");
//        }else{
//            System.out.println("transformation successfully");
//        }
        // 选择job 这里采用job
        JobMeta jobMeta = repository.loadJob("random", directoryInterface, null, null);
        Job job = new Job(repository, jobMeta);
        // 向Job 脚本传递参数,脚本中获取参数值:${参数名}
        // job.setVariable(paraname, paravalue);
        job.setVariable("test", "jing_vehicle_result_mapping");    //变量名称key-value
        job.start();
        job.waitUntilFinished();
        if (job.getErrors() > 0) {
            throw new Exception(
                    "There are errors during job exception!(执行job发生异常)");
        }
    }

    public static void main(String[] args) throws Exception {
        KettleTest.runWithDb();
    }

}

 

左上角编辑中,可以查看变量名称

然后运行代码。可以看到响应的文件就已经写入的数据。

代码中需要引用相应的jar包

jar包在kettle工具文件下一个叫lib的文件夹中可以查找获得。

posted @ 2018-11-24 14:33  缘来是妳啊  阅读(411)  评论(0编辑  收藏  举报