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

  • 格式:doc
  • 大小:102.00 KB
  • 文档页数:20

前言:为什么要用Kettle和KETTLE JA V A API?Kettle是什么?kettle:是一个开源ETL工具。

kettle提供了基于java的图形化界面,使用很方便,kettle的ETL工具集合也比较多,常用的ETL工具都包含了。

为什么使用KETTLE JA V A API:就像kettle文档所说:KETTLE JA V A API :Program your own Kettle transformation,kettle提供了基于JA V A的脚步编写功能,可以灵活地自定义ETL过程,使自行定制、批量处理等成为可能,这才是一个程序员需要做的工作,而不仅是象使用word一样操作kettle用户界面。

KETTLE JA V A API 实战操作记录:一、搭建环境:到http://www.kettle.be网站下载kettle的源码包,加压缩,例如解压缩到d:\kettle目录二、打开eclipse,新建一个项目,要使用jdk1.5.0,因为kettle的要使用System.getenv(),只有在jdk1.5.0才被支持。

提起getenv(),好像有一段几起几落的记录,曾一度被抛弃,现在又被jdk1.5支持了。

三、建一个class :TransBuilder.java,可以把d:\kettle\ extra\TransBuilder.java 的内容原样拷贝到你的TransBuilder.java里。

四、根据需要编辑源码。

并需要对原程序进行如下修改,在头部增加:import org.eclipse.swt.dnd.Transfer;//这个包被遗漏了,原始位置kettle根目录\libswt\win32\swt.jar//add by chq()on 2006.07.20(后来发现,不必加这个引用,因为编译时不需要)五、编译准备,在eclipse中增加jar包,主要包括(主要依据extra\TransBuilder.bat):\lib\kettle.jar\libext\CacheDB.jar\libext\SQLBaseJDBC.jar\libext\activation.jar\libext\db2jcc.jar\libext\db2jcc_license_c.jar\libext\edtftpj-1.4.5.jar\libext\firebirdsql-full.jar\libext\firebirdsql.jar\libext\gis-shape.jar\libext\hsqldb.jar\libext\ifxjdbc.jar\libext\javadbf.jar\libext\jconn2.jar\libext\js.jar\libext\jt400.jar\libext\jtds-1.1.jar\libext\jxl.jar\libext\ktable.jar\libext\log4j-1.2.8.jar\libext\mail.jar\libext\mysql-connector-java-3.1.7-bin.jar\libext\ojdbc14.jar\libext\orai18n.jar\libext\pg74.215.jdbc3.jar\libext\edbc.jar(注意:下面这个包被遗漏了,要加上。

原始位置kettle根目录\libswt\win32\swt.jar)\libswt\win32\swt.jar六、编译成功后,准备运行为使程序不必登陆就可以运行,需要设置环境署文件:kettle.properties,位置在用户目录里,一般在\Documents and Settings\用户\.kettle\,主要内容如下:KETTLE_REPOSITORY=kettle@m80KETTLE_USER=adminKETTLE_PASSWORD=passwd七、好了,现在可以运行一下了,看看数据是不是已经拷贝到目标表了。

以下为修改后的程序源码:++++++++++++++++++++++++++++++++package name.chq.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;//这个包被遗漏了,原始位置kettle根目录\libswt\win32\swt.jar//add by chq([link=][/link]) on 2006.07.20 //import org.eclipse.swt.dnd.Transfer;/*** Class created to demonstrate the creation of transformations on-the-fly.** @author Matt**/public class TransBuilder{public static final String[] databasesXML = {"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +"<connection>" +"<name>target</name>" +"<server>192.168.17.35</server>" +"<type>ORACLE</type>" +"<access>Native</access>" +"<database>test1</database>" +"<port>1521</port>" +"<username>testuser</username>" +"<password>pwd</password>" +"<servername/>" +"<data_tablespace/>" +"<index_tablespace/>" +"<attributes>" +"<attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribut e></attribute>" +"<attribute><code>EXTRA_OPTION_eCursorFetch</code><attribute>true</attribute ></attribute>" +"<attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>" +"</attributes>" +"</connection>" ,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +"<connection>" +"<name>source</name>" +"<server>192.168.16.12</server>" +"<type>ORACLE</type>" +"<access>Native</access>" +"<database>test2</database>" +"<port>1521</port>" +"<username>testuser</username>" +"<password>pwd2</password>" +"<servername/>" +"<data_tablespace/>" +"<index_tablespace/>" +"<attributes>" +"<attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribut e></attribute>" +"<attribute><code>EXTRA_OPTION_eCursorFetch</code><attribute>true</attribute ></attribute>" +"<attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>" +"</attributes>" +"</connection>"};前言:为什么要用Kettle和KETTLE JA V A API?Kettle是什么?kettle:是一个开源ETL工具。