说明:C:\Users\Administrator\esapi下ESAPI.properties和validation.properties
package rh; import java.io.File; public class TransDemo { public static TransDemo transDemo; /** * 两个库中的表名 */ public static String bjdt_tablename = "ANSWER"; public static String kettle_tablename = "ANSWER"; /** * 数据库连接信息,适用于DatabaseMeta其中 一个构造器DatabaseMeta(String xml) */ public static final String[] databasesXML = { "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<connection>" + "<name>bjdt</name>" + "<server>127.0.0.1</server>" + "<type>Oracle</type>" + "<access>Native</access>" + "<database>orcl</database>" + "<port>1521</port>" + "<username>queryneea</username>" + "<password>queryneea</password>" + "</connection>", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<connection>" + "<name>kettle</name>" + "<server>127.0.0.1</server>" + "<type>Oracle</type>" + "<access>Native</access>" + "<database>orcl</database>" + "<port>1521</port>" + "<username>kscenter20151207</username>" + "<password>kscenter</password>" + "</connection>" }; /** * @param args */ public static void main(String[] args) { try { KettleEnvironment.init(); transDemo = new TransDemo(); TransMeta transMeta = transDemo.generateMyOwnTrans(); String transXml = transMeta.getXML(); //System.out.println("transXml:"+transXml); String transName = "F:\\ETL\\kettle\\例子\\测试\\复制单表\\copy-one-table.ktr"; File file = new File(transName); FileUtils.writeStringToFile(file, transXml, "UTF-8"); //System.out.println(databasesXML.length+"\n"+databasesXML[0]+"\n"+databasesXML[1]); } catch (Exception e) { e.printStackTrace(); return; } } /** * 生成一个转化,把一个数据库中的数据转移到另一个数据库中,只有两个步骤,第一个是表输入,第二个是表插入与更新操作 * @return * @throws KettleXMLException */ public TransMeta generateMyOwnTrans() throws KettleXMLException{ System.out.println("************start to generate my own transformation***********"); TransMeta transMeta = new TransMeta(); //设置转化的名称 transMeta.setName("insert_update"); //添加转换的数据库连接 for (int i=0;i<databasesXML.length;i++){ DatabaseMeta databaseMeta = new DatabaseMeta(databasesXML[i]); transMeta.addDatabase(databaseMeta); } //registry是给每个步骤生成一个标识Id用 PluginRegistry registry = PluginRegistry.getInstance(); //****************************************************************** //第一个表输入步骤(TableInputMeta) TableInputMeta tableInput = new TableInputMeta(); String tableInputPluginId = registry.getPluginId(StepPluginType.class, tableInput); //给表输入添加一个DatabaseMeta连接数据库 DatabaseMeta database_bjdt = transMeta.findDatabase("bjdt"); tableInput.setDatabaseMeta(database_bjdt); String select_sql = "SELECT ID, NAME, CODE FROM "+bjdt_tablename; tableInput.setSQL(select_sql); //添加TableInputMeta到转换中 StepMeta tableInputMetaStep = new StepMeta(tableInputPluginId,"table input",tableInput); //给步骤添加在spoon工具中的显示位置 tableInputMetaStep.setDraw(true); tableInputMetaStep.setLocation(100, 100); transMeta.addStep(tableInputMetaStep); //****************************************************************** //****************************************************************** //第二个步骤插入与更新 InsertUpdateMeta insertUpdateMeta = new InsertUpdateMeta(); String insertUpdateMetaPluginId = registry.getPluginId(StepPluginType.class,insertUpdateMeta); //添加数据库连接 DatabaseMeta database_kettle = transMeta.findDatabase("kettle"); insertUpdateMeta.setDatabaseMeta(database_kettle); //设置操作的表 insertUpdateMeta.setTableName(kettle_tablename); //设置用来查询的关键字 insertUpdateMeta.setKeyLookup(new String[]{"ID"}); insertUpdateMeta.setKeyStream(new String[]{"ID"}); insertUpdateMeta.setKeyStream2(new String[]{""});//一定要加上 insertUpdateMeta.setKeyCondition(new String[]{"="}); //设置要更新的字段 String[] updatelookup = {"ID","NAME","CODE"} ; String [] updateStream = {"ID","NAME","CODE"}; Boolean[] updateOrNot = {false,true,true,true,true,true,true}; insertUpdateMeta.setUpdateLookup(updatelookup); insertUpdateMeta.setUpdateStream(updateStream); insertUpdateMeta.setUpdate(updateOrNot); String[] lookup = insertUpdateMeta.getUpdateLookup(); //System.out.println("******:"+lookup[1]); //System.out.println("insertUpdateMetaXMl:"+insertUpdateMeta.getXML()); //添加步骤到转换中 StepMeta insertUpdateStep = new StepMeta(insertUpdateMetaPluginId,"insert_update",insertUpdateMeta); insertUpdateStep.setDraw(true); insertUpdateStep.setLocation(250,100); transMeta.addStep(insertUpdateStep); //****************************************************************** //****************************************************************** //添加hop把两个步骤关联起来 transMeta.addTransHop(new TransHopMeta(tableInputMetaStep, insertUpdateStep)); System.out.println("***********the end************"); return transMeta; } }
相关推荐
本篇笔记主要探讨如何利用Java调用Kettle API来执行转换(Transformation)和作业(Job),以及如何通过Java代码生成Kettle转换。 首先,理解Kettle的基本概念是必要的。转换是数据清洗、转换和加载过程的逻辑单元...
4. **生成Kettle文件**:使用解析后的参数,通过Java代码动态生成.KTR或.KJB文件。 5. **执行生成的Kettle文件**:将生成的文件导入到Kettle环境中,进行调试和执行,确保数据处理流程正确无误。 KettleAuto的实践...
这两个文件是Kettle的转换文件,它们可能包含了调用Java类来计算MD5哈希值的示例。MD5是一种广泛使用的加密散列函数,通常用于验证文件完整性或密码存储。 在`commons.md5.ktr`中,可能使用了Java的`java.security....
在提供的" kettle转换xml实例 "压缩包中,你可能会找到一个实际的Kettle转换文件(.ktr)和一个示例XML文件。这个实例展示了如何使用StAX解析XML并将其数据写入目标系统。 总结来说,Kettle的XML Input Stream ...
Kettle,也称为Spoon,是一款强大的ETL(Extract, Transform, Load)工具,用于数据集成和数据转换任务。日志记录在任何软件开发和数据处理流程中都至关重要,它帮助开发者和管理员跟踪程序运行状态,定位错误和性能...
Kettle API 是一个强大的工具,允许开发者通过Java代码与Pentaho Data Integration (Kettle) 进行交互,实现数据提取、转换和加载(ETL)过程的自动化。在给定的示例中,主要展示了如何使用Kettle API 创建、保存和...
4. **定义工作流或转换**:通常在Kettle的图形化界面(Spoon)中设计工作流或转换,然后保存为`.ktr`或`.kjb`文件。这些文件可以在项目中作为资源文件,或者从远程服务器获取。 5. **运行Kettle任务**:在Spring ...
在IT领域,Kettle(又称Pentaho Data Integration或PDI)是一款强大的ETL(Extract, Transform, Load)工具,广泛用于数据集成、数据清洗、数据转换和数据加载任务。本教程将深入探讨Kettle中的一些关键控件,以及...
3. `getTableNameFromDb.ktr`:这也是一个Kettle转换文件,可能是用于从数据库中获取表名的转换。这在动态SQL的上下文中非常有用,因为可能需要根据数据库中的信息来构造SQL语句。 在实际应用中,动态SQL的实现可能...
执行kettle任务的命令可以是pan.sh执行ktr转换,kitchen执行kjb任务。 添加定时任务 在终端键入"crontab -e"添加定时任务。例如,可以添加以下命令:33 10 21 08 * /home/kettle/test.sh。其中,33为分钟,10为...
使用Eclipse等开发环境,可以生成Kettle Java API的Javadoc文档,以获取详细的API参考和方法说明。在Eclipse中,可以通过“Project / Generate Javadoc”菜单项启动Javadoc生成向导,并指定Java SDK的javadoc命令...
Kettle-Cookbook是一款专为Kettle设计的自动化文档生成工具,它极大地简化了Kettle转换(.ktr)和作业(.kjb)的文档制作过程。就像Java开发中的javadoc工具一样,Kettle-Cookbook能够将Kettle的工作流转化为易于...
在Java与Kettle的集成中,Java程序通常负责启动和控制Kettle转换的执行。这可以通过使用Kettle的API来实现,例如`TransMeta`和`Trans`类。首先,你需要加载`fromto.ktr`转换文件,然后创建一个`Trans`实例来运行它。...
- **源代码**:在这里指的是Kettle的Job和Transformation文件(.kjb 和 .ktr)。它们是XML格式,记录了整个工作流程的详细信息。用户可以通过Pentaho Data Integration(Kettle)工具打开、编辑和运行这些文件。 ...
- **XML追加步骤**:描述中提到的`ktr_write_xml_append1.ktr`和`ktr_write_xml_append2.ktr`可能就是示例转换,用于向XML文件追加数据。Kettle允许在不覆盖原有内容的情况下向XML文件追加新的数据。这通常用于日志...
Kettle是开源的Java应用程序,提供了一整套工具集,包括: 1. ** Spoon**:Kettle的主要开发环境,用户通过图形界面设计、调试和运行ETL作业和转换。 2. **Kitchen**:用于批处理ETL作业的命令行工具,适合自动化...
转换的设计文件以.ktr结尾,保存所有配置好的数据库连接、文件相对路径、字段映射关系等信息。Job的设计文件以.kjb结尾。 在Kettle中,用户定义的作业可以保存在XML格式中或某一个特定的数据库中。Job的设计文件中...
- 设计阶段:用户通过图形界面,结合各种预定义的转换步骤来设计数据处理的流程,可以手动编辑XML格式的设计文件(扩展名为.ktr),也可以通过定义的作业来实现复杂的数据处理流程,作业的XML格式设计文件后缀为.kjb...
4. **数据转换和作业执行**:`pentaho-kettle-plugins-ktr.jar`和`pentaho-kettle-plugins-kjb.jar`分别包含了数据转换(Transformation)和作业(Job)的执行逻辑。`pentaho-metadata.jar`处理元数据模型,而`...