首先配置资源库
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