使用java code 在kettle 4.x创建transformation

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.xml.XMLHandler;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransHopMeta;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.di.trans.steps.tableinput.TableInputMeta;
import org.pentaho.di.trans.steps.tableoutput.TableOutputMeta;



public class TransDemo {
    public static void main(String[] args) throws Exception {
        //初始化
        KettleEnvironment.init();
        File file = new File("C:\\Users\\Administrator\\Desktop\\123.ktr");
        //创建一个转换
        TransMeta transMeta =  createTransformation();
        //写到文件中
        writeTransformationToFile(transMeta, file);
        //执行转换
        execute(transMeta);
    }
    
    static TransMeta createTransformation(){
        DatabaseMeta in = new DatabaseMeta();
        in.setName("in");
        in.setHostname("127.0.0.1");
        in.setDBName("xe");
        in.setDBPort("1521");
        in.setUsername("abc");
        in.setPassword("abc");
        //表输出连接信息
        DatabaseMeta out = new DatabaseMeta();
        out.setName("out");
        out.setHostname("127.0.0.1");
        out.setDBName("xe");
        out.setDBPort("1521");
        out.setUsername("abc");
        out.setPassword("abc");
        //创建一个元数据
        TransMeta transMeta = new TransMeta();
        transMeta.setName("我的转换");
        transMeta.addDatabase(out);
        transMeta.addDatabase(in);
        
        //表输入
        TableInputMeta tin = new TableInputMeta();
        tin.setDatabaseMeta(in);
        String insql = "select * from source_table";
        tin.setSQL(insql);
        
        //创建step
        StepMeta inputStep = new StepMeta("从源数据表读取数据", tin);
        inputStep.setLocation(50, 50);
        inputStep.setDraw(true);
        transMeta.addStep(inputStep);
         
        //表输出
        TableOutputMeta tout = new TableOutputMeta();
        tout.setDatabaseMeta(out);
        tout.setSchemaName("abc");
        tout.setTableName("dest_table");
        
        StepMeta outputStep = new StepMeta("获取数据", tout);
        outputStep.setLocation(400, 400);
        outputStep.setDraw(true);
        transMeta.addStep(outputStep);
         
        //设置连线
        TransHopMeta hop = new TransHopMeta(inputStep, outputStep);
        transMeta.addTransHop(hop);
        
        
        return transMeta;
    }
    
    static void writeTransformationToFile(TransMeta transMeta ,File file) throws Exception{
        String xml = XMLHandler.getXMLHeader() + transMeta.getXML();
        OutputStream opt = new FileOutputStream(file);
        BufferedOutputStream bos = new BufferedOutputStream(opt);
        bos.write(xml.getBytes("utf-8"));
        bos.close();
    }
    
    static void execute(TransMeta transMeta) throws Exception{
        Trans trans = new Trans(transMeta);
        trans.execute(null); 
        trans.waitUntilFinished();
        if(trans.getErrors() > 0)
            System.out.println("执行转换出错");
        else
            System.out.println("成功执行这个转换");
    }
}

 

转载于:https://www.cnblogs.com/ming-311/p/3683239.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值