java集成kettle:删除资源库中的转换

该博客围绕Kettle工具展开,目标是删除资源库中名为cgmTransName的转换。介绍了项目的pom.xml依赖配置,展示了KettleTest.java代码,包含连接资源库、创建并保存转换、删除转换等操作,最终成功删除指定转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计目标:删除资源库中名字叫的cgmTransName转换

首先参考https://blog.youkuaiyun.com/cgm625637391/article/details/95047724 

项目结构:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>www.test.com</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>

        <dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>kettle-core</artifactId>
            <version>7.1.0.0-12</version>
        </dependency>
        <dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>kettle-dbdialog</artifactId>
            <version>7.1.0.0-12</version>
        </dependency>

        <dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>kettle-engine</artifactId>
            <version>7.1.0.0-12</version>
        </dependency>

        <dependency>
            <groupId>pentaho</groupId>
            <artifactId>metastore</artifactId>
            <version>7.1.0.0-12</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-vfs2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-vfs2</artifactId>
            <version>2.2</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>pentaho-releases</id>
            <name>Kettle</name>
            <url>https://nexus.pentaho.org/content/groups/omni/</url>
        </repository>
        <!-- 阿里云maven仓库 -->
        <repository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
</project>

KettleTest.java

package test;

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.repository.ObjectId;
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.TransHopMeta;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.di.trans.steps.insertupdate.InsertUpdateMeta;
import org.pentaho.di.trans.steps.tableinput.TableInputMeta;

/**
 *  * @author cgm  * @date 2019年7月8日  
 */
public class KettleTest {

    public static void main(String[] args) throws Exception {
        KettleDatabaseRepository kettleDatabaseRepository = repositoryCon();
        createAndSaveTrans(kettleDatabaseRepository);
        // 这一步执行之前资源库里面有一个叫做cgmTransName的转换
        delTrans(kettleDatabaseRepository);
        // 执行完毕之后资源库里面没有叫做cgmTransName的转换了
    }

    /**
     *  * 连接到资源库  
     */
    private static KettleDatabaseRepository repositoryCon() throws KettleException {
        // 初始化环境
        if (!KettleEnvironment.isInitialized()) {
            try {
                KettleEnvironment.init();
            } catch (KettleException e) {
                e.printStackTrace();
            }
        }
        // 数据库连接元对象
        // (kettle数据库连接名称(KETTLE工具右上角显示),资源库类型,连接方式,IP,数据库名,端口,用户名,密码) //cgmRepositoryConn
        DatabaseMeta databaseMeta = new DatabaseMeta("cgmRepository", "mysql", "Native(JDBC)", "127.0.0.1",
            "cgmrepositorydb?useSSL=false", "3306", "root", "root");
        // 数据库形式的资源库元对象
        KettleDatabaseRepositoryMeta kettleDatabaseRepositoryMeta = new KettleDatabaseRepositoryMeta();
        kettleDatabaseRepositoryMeta.setConnection(databaseMeta);
        // 数据库形式的资源库对象
        KettleDatabaseRepository kettleDatabaseRepository = new KettleDatabaseRepository();
        // 用资源库元对象初始化资源库对象
        kettleDatabaseRepository.init(kettleDatabaseRepositoryMeta);
        // 连接到资源库
        kettleDatabaseRepository.connect("admin", "admin");// 默认的连接资源库的用户名和密码
        if (kettleDatabaseRepository.isConnected()) {
            System.out.println("连接成功");
            return kettleDatabaseRepository;
        } else {
            System.out.println("连接失败");
            return null;
        }
    }

    /**
     * 创建转换并把转换保存到资源库
     * 
     * @throws Exception
     */
    public static void createAndSaveTrans(KettleDatabaseRepository kettleDatabaseRepository) throws Exception {
        TransMeta transMeta = generateTrans();
        System.out.println("transMeta=" + transMeta);
        saveTrans(kettleDatabaseRepository, transMeta);
        System.out.println("saveTrans success");
    }

    /**
     *  * 定义一个转换,但是还没有保存到资源库  *   * @return  * @throws KettleException  
     */
    private static TransMeta generateTrans() throws KettleException {
        TransMeta transMeta = createTrans();
        // 创建步骤1并添加到转换中
        StepMeta step1 = createStep1(transMeta);
        transMeta.addStep(step1);
        // 创建步骤2并添加到转换中
        StepMeta step2 = createStep2(transMeta);
        transMeta.addStep(step2);
        // 创建hop连接并添加hop
        TransHopMeta TransHopMeta = createTransHop(step1, step2);
        transMeta.addTransHop(TransHopMeta);
        return transMeta;
    }

    /**
     *  * 创建步骤:(输入:表输入)  *   * @param transMeta  * @return  
     */
    private static StepMeta createStep1(TransMeta transMeta) {
        // 新建一个表输入步骤(TableInputMeta)
        TableInputMeta tableInputMeta = new TableInputMeta();
        // 设置步骤1的数据库连接
        tableInputMeta.setDatabaseMeta(transMeta.findDatabase("fromDbName"));
        // 设置步骤1中的sql
        tableInputMeta.setSQL("SELECT id1 as id2 ,name1 as name2 FROM from_user");
        // 设置步骤名称
        StepMeta step1 = new StepMeta("step1name", tableInputMeta);
        return step1;
    }

    /**
     *  * 创建转换  *   * @return  
     */
    private static TransMeta createTrans() {
        TransMeta transMeta = new TransMeta();
        // 设置转化的名称
        transMeta.setName("cgmTransName");
        // 添加转换的数据库连接
        transMeta.addDatabase(new DatabaseMeta("fromDbName", "mysql", "Native(JDBC)", "127.0.0.1",
            "fromdb?useSSL=false", "3306", "root", "root"));
        transMeta.addDatabase(new DatabaseMeta("toDbName", "mysql", "Native(JDBC)", "127.0.0.1", "todb?useSSL=false",
            "3306", "root", "root"));
        return transMeta;
    }

    /**
     *  * 创建步骤:(输出:插入/更新)  *   * @param transMeta  * @return  
     */
    private static StepMeta createStep2(TransMeta transMeta) {
        // 新建一个插入/更新步骤
        InsertUpdateMeta insertUpdateMeta = new InsertUpdateMeta();
        // 设置步骤2的数据库连接
        insertUpdateMeta.setDatabaseMeta(transMeta.findDatabase("toDbName"));
        // 设置目标表
        insertUpdateMeta.setTableName("to_user");
        // 设置用来查询的关键字
        insertUpdateMeta.setKeyLookup(new String[] {"id2"});
        insertUpdateMeta.setKeyCondition(new String[] {"="});
        insertUpdateMeta.setKeyStream(new String[] {"id2"});
        insertUpdateMeta.setKeyStream2(new String[] {""});// 一定要加上
        // 设置要更新的字段
        String[] updatelookup = {"id2", "name2"};
        String[] updateStream = {"id2", "name2"};
        Boolean[] updateOrNot = {false, true};
        // 设置表字段
        insertUpdateMeta.setUpdateLookup(updatelookup);
        // 设置流字段
        insertUpdateMeta.setUpdateStream(updateStream);
        // 设置是否更新
        insertUpdateMeta.setUpdate(updateOrNot);
        // 设置步骤2的名称
        StepMeta step2 = new StepMeta("step2name", insertUpdateMeta);
        return step2;
    }

    /**
     *  * 创建节点连接  *   * @param step1  * @param step2  * @return  
     */
    private static TransHopMeta createTransHop(StepMeta step1, StepMeta step2) {
        // 设置起始步骤和目标步骤,把两个步骤关联起来
        TransHopMeta transHopMeta = new TransHopMeta(step1, step2);
        return transHopMeta;
    }

    /**
     *  * 保存转换到资源库  *   * @param kettleDatabaseRepository  * @param transMeta  * @throws Exception  
     */
    private static void saveTrans(KettleDatabaseRepository kettleDatabaseRepository, TransMeta transMeta)
        throws Exception {
        RepositoryDirectoryInterface dir = kettleDatabaseRepository.loadRepositoryDirectoryTree().findDirectory("/");
        transMeta.setRepositoryDirectory(dir);
        kettleDatabaseRepository.save(transMeta, null);
    }

    /**
     * 删除转换
     * 
     * @param kettleDatabaseRepository
     * @throws KettleException
     */
    private static void delTrans(KettleDatabaseRepository kettleDatabaseRepository) throws KettleException {
        RepositoryDirectoryInterface directory = kettleDatabaseRepository.findDirectory("/");
        // 根据转换名称查询转换Id
        ObjectId id = kettleDatabaseRepository.getTransformationID("cgmTransName", directory);
        // 删除转换
        kettleDatabaseRepository.deleteTransformation(id);
    }

}

完毕

去资源库中查看已经找不到名字叫的cgmTransName转换了

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgm625637391

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值