1. 程式人生 > >java通過kettle的API呼叫已經建立好的轉換(transformation)或任務(job)

java通過kettle的API呼叫已經建立好的轉換(transformation)或任務(job)

目前在做一個專案,需要用到資料清洗,因為kettle是開源的,所以就選擇了它。目前遇到的困難是,在建立好轉換(transformation)或任務(job)後,需要整合到java程式碼中,以便和其他功能結合。由於網上很多例子的kettle版本是4.x以及5.0左右的,而kettle 6.0版本較之前有了很大改動,這些java程式碼已經不適合用於kettle 6.0了。經過在網上查資料、加QQ群詢問以及在論壇裡查詢資料和提問之後,終於解決了如何讓java通過kettle 6.0版本呼叫轉換和job。

1,需要哪些jar包

kettle開頭的包都需要,也許這個專案有些包不用,但最好加進去。另外guava、metastore和mysql-connector包也是必須的,不然程式會報錯。其他包自己看著加入吧

2,在spoon上建立轉換或job

在這裡就不敘述了,我有時間會在另一篇部落格中記錄如何使用spoon上的控制元件建立轉換和job。有需要可以看看。

3,java程式碼示例

<span style="font-size:18px;">package com.fan.custom;

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

public class ExistTrans {

	public static void runTransformation() {
		try {
			String filename = "C:\\Users\\Francis\\Desktop\\table.ktr";
			// StepLoader.init();
			// EnvUtil.environmentInit();
			KettleEnvironment.init();
			TransMeta transMeta = new TransMeta(filename);
			Trans trans = new Trans(transMeta);

			trans.execute(null); // You can pass arguments instead of null.
			trans.waitUntilFinished();
			if (trans.getErrors() > 0) {
				throw new RuntimeException(
						"There were errors during transformation execution.");
			}
		} catch (KettleException e) {
			// TODO Put your exception-handling code here.
			System.out.println(e);
		}
	}

	public static void main(String[] args) {

		runTransformation();
	}
}
</span>