`

KETTLE JAVA API学习

 
阅读更多
/**KETTLE是一个开源的ETL工具,运行本程序,应该确保在SQL Server中有相应数据库asop2,asop3,在asop2中有表department_user,但在表 asop3中有没有表test2均行。(相应的数据库名,表名,用户名,密码可看程序修改)。另外,应该在spoon.bat中打开后建立存储库与asop2及asop3两个连接(连接名应与数据库名一致)。感觉KETTLE没有转化不同数据类型的数据,这一点上应该没有Beeload好吧。**/

package test;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import be.ibridge.kettle.core.Const;
import be.ibridge.kettle.core.LogWriter;
import be.ibridge.kettle.core.NotePadMeta;
import be.ibridge.kettle.core.database.Database;
import be.ibridge.kettle.core.database.DatabaseMeta;
import be.ibridge.kettle.core.exception.KettleException;
import be.ibridge.kettle.core.util.EnvUtil;
import be.ibridge.kettle.trans.StepLoader;
import be.ibridge.kettle.trans.Trans;
import be.ibridge.kettle.trans.TransHopMeta;
import be.ibridge.kettle.trans.TransMeta;
import be.ibridge.kettle.trans.step.StepMeta;
import be.ibridge.kettle.trans.step.StepMetaInterface;
import be.ibridge.kettle.trans.step.selectvalues.SelectValuesMeta;
import be.ibridge.kettle.trans.step.tableinput.TableInputMeta;
import be.ibridge.kettle.trans.step.tableoutput.TableOutputMeta;
import org.eclipse.swt.dnd.Transfer;

public class TransBuilder {


//用于SQL Server的测试

public static final String[] databasesXML = {
"<?xml version=/"1.0/" encoding=/"UTF-8/"?>" + "<connection>"
+ "<name>asop2</name>" + "<server>localhost</server>"
+ "<type>MSSQL</type>" + "<access>Native</access>"
+ "<database>asop2</database>" + "<port>1433</port>"
+ "<username>sa</username>"
+ "<password>password1234</password>" + "</connection>",

"<?xml version=/"1.0/" encoding=/"UTF-8/"?>" + "<connection>"
+ "<name>asop3</name>" + "<server>localhost</server>"
+ "<type>MSSQL</type>" + "<access>Native</access>"
+ "<database>asop3</database>" + "<port>1433</port>"
+ "<username>sa</username>"
+ "<password>password1234</password>" + "</connection>" };


/** //用于Oracle的测试
public static final String[] databasesXML = {
"<?xml version=/"1.0/" encoding=/"UTF-8/"?>" + "<connection>"
+ "<name>asop2</name>" + "<server>localhost</server>"
+ "<type>MSSQL</type>" + "<access>Native</access>"
+ "<database>asop2</database>" + "<port>1433</port>"
+ "<username>sa</username>"
+ "<password>password1234</password>" + "</connection>",

"<?xml version=/"1.0/" encoding=/"UTF-8/"?>" + "<connection>"
+ "<name>oracledb</name>" + "<server>localhost</server>"
+ "<type>oracle</type>" + "<access>Native</access>"
+ "<database>oracledb</database>" + "<port>1521</port>"
+ "<username>system</username>"
+ "<password>password</password>" + "</connection>" };
**/

public static final TransMeta buildCopyTable(String transformationName,
String sourceDatabaseName, String sourceTableName,
String[] sourceFields, String targetDatabaseName,
String targetTableName, String[] targetFields)
throws KettleException {
LogWriter log = LogWriter.getInstance();
EnvUtil.environmentInit();
try {
// Create a new transformation...
TransMeta transMeta = new TransMeta();
transMeta.setName(transformationName);
// Add the database connections
for (int i = 0; i < databasesXML.length; i++) {
DatabaseMeta databaseMeta = new DatabaseMeta(databasesXML[i]);
transMeta.addDatabase(databaseMeta);
}
DatabaseMeta sourceDBInfo = transMeta
.findDatabase(sourceDatabaseName);
DatabaseMeta targetDBInfo = transMeta
.findDatabase(targetDatabaseName);
// Add a note
String note = "Reads information from table [" + sourceTableName
+ "] on database [" + sourceDBInfo + "]" + Const.CR;
note += "After that, it writes the information to table ["
+ targetTableName + "] on database [" + targetDBInfo + "]";
NotePadMeta ni = new NotePadMeta(note, 150, 10, -1, -1);
transMeta.addNote(ni);
// create the source step...
String fromstepname = "read from [" + sourceTableName + "]";
TableInputMeta tii = new TableInputMeta();
tii.setDatabaseMeta(sourceDBInfo);
String selectSQL = "SELECT " + Const.CR;
for (int i = 0; i < sourceFields.length; i++) {
if (i > 0)
selectSQL += ", ";
else
selectSQL += " ";
selectSQL += sourceFields[i] + Const.CR;
}
selectSQL += "FROM " + sourceTableName;
tii.setSQL(selectSQL);
StepLoader steploader = StepLoader.getInstance();
String fromstepid = steploader.getStepPluginID(tii);
StepMeta fromstep = new StepMeta(log, fromstepid, fromstepname,
(StepMetaInterface) tii);
fromstep.setLocation(150, 100);
fromstep.setDraw(true);
fromstep.setDescription("Reads information from table ["
+ sourceTableName + "] on database [" + sourceDBInfo + "]");
transMeta.addStep(fromstep);
// add logic to rename fields
// Use metadata logic in SelectValues, use SelectValueInfo...
SelectValuesMeta svi = new SelectValuesMeta();
svi.allocate(0, 0, sourceFields.length);
//改名,那如何改类型啊
for (int i = 0; i < sourceFields.length; i++) {
svi.getMetaName()[i] = sourceFields[i];
svi.getMetaRename()[i] = targetFields[i];

}
String selstepname = "Rename field names";
String selstepid = steploader.getStepPluginID(svi);
StepMeta selstep = new StepMeta(log, selstepid, selstepname,
(StepMetaInterface) svi);
selstep.setLocation(350, 100);
selstep.setDraw(true);
selstep.setDescription("Rename field names");
transMeta.addStep(selstep);
TransHopMeta shi = new TransHopMeta(fromstep, selstep);
transMeta.addTransHop(shi);
fromstep = selstep;
// Add the TableOutputMeta step...
String tostepname = "write to [" + targetTableName + "]";
TableOutputMeta toi = new TableOutputMeta();
toi.setDatabase(targetDBInfo);
toi.setTablename(targetTableName);
toi.setCommitSize(200);
toi.setTruncateTable(true);
String tostepid = steploader.getStepPluginID(toi);
StepMeta tostep = new StepMeta(log, tostepid, tostepname,
(StepMetaInterface) toi);
tostep.setLocation(550, 100);
tostep.setDraw(true);
tostep.setDescription("Write information to table ["
+ targetTableName + "] on database [" + targetDBInfo + "]");
transMeta.addStep(tostep);
// Add a hop between the two steps...
TransHopMeta hi = new TransHopMeta(fromstep, tostep);
transMeta.addTransHop(hi);
// OK, if we're still here: overwrite the current transformation...
return transMeta;
} catch (Exception e) {
throw new KettleException(
"An unexpected error occurred creating the new transformation",
e);
}
}

public static void main(String[] args) throws Exception {
EnvUtil.environmentInit();
// Init the logging...
LogWriter log = LogWriter.getInstance("TransBuilder.log", true,
LogWriter.LOG_LEVEL_DETAILED);

// Load the Kettle steps & plugins
StepLoader stloader = StepLoader.getInstance();
if (!stloader.read()) {
log.logError("TransBuilder",
"Error loading Kettle steps & plugins... stopping now!");
return;
}

// The parameters we want, optionally this can be
String fileName = "NewTrans.xml";
String transformationName = "Test Transformation";
String sourceDatabaseName = "asop2";
String sourceTableName = "department_user";
String sourceFields[] = { "department_id", "login_name", "title",
"name" };







String targetDatabaseName = "asop3"; //SQL Server中
//String targetDatabaseName = "oracledb"; //orcale中
String targetTableName = "test2";



String targetFields[] = { "department", "username", "title", "fullname2" };
// Generate the transformation.
TransMeta transMeta = TransBuilder.buildCopyTable(transformationName,
sourceDatabaseName, sourceTableName, sourceFields,
targetDatabaseName, targetTableName, targetFields);
// Save it as a file:
String xml = transMeta.getXML();
DataOutputStream dos = new DataOutputStream(new FileOutputStream(
new File(fileName)));
dos.write(xml.getBytes("UTF-8"));
dos.close();
System.out.println("Saved transformation to file: " + fileName);
// OK, What's the SQL we need to execute to generate the target table?
String sql = transMeta.getSQLStatementsString();
// Execute the SQL on the target table:
DatabaseMeta dbMeta = transMeta.findDatabase(targetDatabaseName);
Database targetDatabase = new Database(dbMeta);
targetDatabase.connect();
targetDatabase.execStatements(sql);
System.out.println("执行的SQL语句是:"+sql);
// Now execute the transformation...
Trans trans = new Trans(log, transMeta);
trans.execute(null);
trans.waitUntilFinished();
// For testing/repeatability, we drop the target table again
//targetDatabase.execStatement("drop table " + targetTableName);
targetDatabase.disconnect();
}

}

分享到:
评论

相关推荐

    Kettle java API

    Kettle java API Kettle java API

    kettle3.2.0 java API

    kettle3.2.0 java API kettle3.2.0 java API

    开发技术:KETTLE JAVA API 开发实战记录.doc

    开发技术:KETTLE JAVA API 开发实战记录 开发技术:KETTLE JAVA API 开发实战记录 开发技术:KETTLE JAVA API 开发实战记录

    Kettle API - Java调用示例

    对向前兼容性的推荐 :如果想要动态地创造Transformation (例如:从元数据),使用XML文件方法(KTR)而不是使用API。 XML文件兼容Kettle所有版本,同样对job有效的。 下面的例子进行以下操作: 1创建Transformation ...

    java调用kettle提供的API实现数据抽取DEMO

    通过调用kettle的API接口,实现将一个库的数据转移到另一个数据库中。附件中同时提供了抽取需要的jar包

    利用kettle的api运用Java代码完成数据转换到excel和数据库源码

    利用kettle的api运用Java代码完成数据转换到excel和数据库源码,自己看了2天kettle的源码,写的2个简单小例子,供大家参考,网上搜这个资料太少了!希望其他人也能上传些相关资料!

    java调用kettle_api_jar包依赖.zip

    java 调用 kettle api 所需jar包依赖。

    Kettle_API_-_Java调用示例

    Kettle_API_-_Java调用示例,通过JAVA调用Kettle,实现功能。

    kettle 4.4API

    kettle 4.4API,对初学者了解kettle内核很有帮助,欢迎下载。

    Kettle 4.4.0 API

    Kettle 4.4版本的Java API。 Kettle 4.4版本的Java API。 Kettle 4.4版本的Java API。 Kettle 4.4版本的Java API。 Kettle 4.4版本的Java API。 Kettle 4.4版本的Java API。

    Kettle 7.1.0 API (CHM格式)

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的...

    pentaho kettle中文开发手册

    pentaho kettle中文开发手册

    Kettle java开发需要的jar包

    jar包列表(参考 kettle java二次开发demo http://bbs.csdn.net/topics/390369075) avalon-framework-4.1.3.jar commons-collections-3.2.jar commons-io-1.4.jar commons-lang-2.4.jar commons-logging-1.1.jar ...

    kettle_7.1_api文档.rar

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的...

    Kettle-API FOR java

    英文版的API说明

    java kettle api pom maven jar

    java调用kettle例子,包含kettle的jar包,maven安装方法,简单的java示例。

    Kettle 4.4.0_API CHM格式

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的...

    KettleAPI-Java调用示例.pdf

    KettleAPI-Java调用示例.pdf

    java调用kettle需要的jar包

    kettle是一个纯java编写的etl工具,同时提供了相关api供java进行调用。速度是很快的10000笔/S速度。本资料提供的是java调用kettle需要的jar包

Global site tag (gtag.js) - Google Analytics