java集成kettle:配置资源库,并执行资源库中保存的转换

首先配置资源库

1.安装kettle7.1

2.将mysql-connector-java-5.1.46.jar复制到D:\Program Files\kettle7.1\data-integration\lib目录下

3.配置kettle资源库

 

 

 

 

上图就是在cgmrepositorydb数据库中初始化建立表格呢。需要建立1分钟左右。 

密码也是admin 

 

然后我们创建一个名称为fromto的转换

输入就是D:/from.txt 输出就是D:/to.txt

 那么这个转换就在数据库中了  

 在数据库中的结构如下:

 那么如何以树形目录结构查询fromto转换在哪里呢? 

 发现fromto在根目录下。因为fromto转换在数据块中的ID_DIRECTORY=0

 

 现在我们要使用java代码去读取kettle资源数据库中存储的fromto转换,并执行这个换行

项目结构如下

 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文件如下

 

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.Trans;
import org.pentaho.di.trans.TransMeta;

/**
 * @author cgm
 * @date 2019年7月5日
 */
public class KettleTest {
    public static void main(String[] args) throws KettleException {

        KettleDatabaseRepository obj = RepositoryCon();
        if (obj != null) {// 资源库连接成功
            runTrans(obj, "fromto");// 调用指定的tansformation
        }
    }

    /**
     * 配置资源库环境 并接连接的资源库
     * 
     * @return
     * @throws KettleException
     */
    public static KettleDatabaseRepository RepositoryCon() throws KettleException {
        // 初始化
        KettleEnvironment.init();
        // 数据库连接元对象
        // (kettle数据库连接名称(KETTLE工具右上角显示),资源库类型,连接方式,IP,数据库名,端口,用户名,密码) //cgmRepositoryConn
        DatabaseMeta databaseMeta = new DatabaseMeta("cgmRepository", "mysql", "Native(JDBC)", "127.0.0.1",
            "cgmrepositorydb", "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;
        }
    }

    /**
     * 调用Transformation示例
     * 
     * @param rep
     * @param transName
     */
    public static void runTrans(KettleDatabaseRepository rep, String transName) {

        try {
            // 根据指定的字符串路径 找到目录,在 r_transformation中id_directory=0的代表根目录
            RepositoryDirectoryInterface dir = rep.findDirectory("/");
            // 根据转换名称获取转换id
            // 这个值就是从SELECT ID_TRANSFORMATION FROM `r_transformation` where name='fromto';来的
            ObjectId id = rep.getTransformationID(transName, dir);
            System.out.println("------ObjectId=" + id);
            // 根据转换id查询与其关联的step和hop
            // select name from r_step where ID_STEP=(SELECT ID_STEP_FROM FROM `r_trans_hop` where
            // ID_TRANSFORMATION='1');
            // select name from r_step where ID_STEP=(SELECT ID_STEP_TO FROM `r_trans_hop` where ID_TRANSFORMATION='1');
            TransMeta transMeta = rep.loadTransformation(id, null);
            //
            Trans trans = new Trans(transMeta);
            trans.execute(null);// 执行转换
            trans.waitUntilFinished(); // 等待转换执行结束
            if (trans.getErrors() != 0) {
                System.out.println("Error");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
 

运行结果如下:

 发现D:/to.txt中文件内容和D:/from.txt内容一致

代码示例: https://download.csdn.net/download/cgm625637391/11289885 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cgm625637391

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

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

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

打赏作者

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

抵扣说明:

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

余额充值