`

java程序生成kettle转换ktr文件

阅读更多

说明: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执行转换和作业,Java代码生成Kettle转换。.zip

    本篇笔记主要探讨如何利用Java调用Kettle API来执行转换(Transformation)和作业(Job),以及如何通过Java代码生成Kettle转换。 首先,理解Kettle的基本概念是必要的。转换是数据清洗、转换和加载过程的逻辑单元...

    KettleAuto 从模版生成kettle文件

    4. **生成Kettle文件**:使用解析后的参数,通过Java代码动态生成.KTR或.KJB文件。 5. **执行生成的Kettle文件**:将生成的文件导入到Kettle环境中,进行调试和执行,确保数据处理流程正确无误。 KettleAuto的实践...

    《kettle中调用java类》示例代码

    这两个文件是Kettle的转换文件,它们可能包含了调用Java类来计算MD5哈希值的示例。MD5是一种广泛使用的加密散列函数,通常用于验证文件完整性或密码存储。 在`commons.md5.ktr`中,可能使用了Java的`java.security....

    kettle转换xml(XML Input Stream (StAX))

    在提供的" kettle转换xml实例 "压缩包中,你可能会找到一个实际的Kettle转换文件(.ktr)和一个示例XML文件。这个实例展示了如何使用StAX解析XML并将其数据写入目标系统。 总结来说,Kettle的XML Input Stream ...

    Kettle运行日志记录

    Kettle,也称为Spoon,是一款强大的ETL(Extract, Transform, Load)工具,用于数据集成和数据转换任务。日志记录在任何软件开发和数据处理流程中都至关重要,它帮助开发者和管理员跟踪程序运行状态,定位错误和性能...

    Kettle API - Java调用示例

    Kettle API 是一个强大的工具,允许开发者通过Java代码与Pentaho Data Integration (Kettle) 进行交互,实现数据提取、转换和加载(ETL)过程的自动化。在给定的示例中,主要展示了如何使用Kettle API 创建、保存和...

    springboot整合kettle项目源码

    4. **定义工作流或转换**:通常在Kettle的图形化界面(Spoon)中设计工作流或转换,然后保存为`.ktr`或`.kjb`文件。这些文件可以在项目中作为资源文件,或者从远程服务器获取。 5. **运行Kettle任务**:在Spring ...

    kettle常见控件(输入、输出,字段选择、设置变量、记录集连接、值映射、字符串替换、js、Java)的使用案例

    在IT领域,Kettle(又称Pentaho Data Integration或PDI)是一款强大的ETL(Extract, Transform, Load)工具,广泛用于数据集成、数据清洗、数据转换和数据加载任务。本教程将深入探讨Kettle中的一些关键控件,以及...

    kettel循环执行动态sql

    3. `getTableNameFromDb.ktr`:这也是一个Kettle转换文件,可能是用于从数据库中获取表名的转换。这在动态SQL的上下文中非常有用,因为可能需要根据数据库中的信息来构造SQL语句。 在实际应用中,动态SQL的实现可能...

    kettle定时任务

    执行kettle任务的命令可以是pan.sh执行ktr转换,kitchen执行kjb任务。 添加定时任务 在终端键入"crontab -e"添加定时任务。例如,可以添加以下命令:33 10 21 08 * /home/kettle/test.sh。其中,33为分钟,10为...

    Pentaho Data Integration - Java API Examples.doc

    使用Eclipse等开发环境,可以生成Kettle Java API的Javadoc文档,以获取详细的API参考和方法说明。在Eclipse中,可以通过“Project / Generate Javadoc”菜单项启动Javadoc生成向导,并指定Java SDK的javadoc命令...

    kettle-cookbook.zip

    Kettle-Cookbook是一款专为Kettle设计的自动化文档生成工具,它极大地简化了Kettle转换(.ktr)和作业(.kjb)的文档制作过程。就像Java开发中的javadoc工具一样,Kettle-Cookbook能够将Kettle的工作流转化为易于...

    代码示例.rar

    在Java与Kettle的集成中,Java程序通常负责启动和控制Kettle转换的执行。这可以通过使用Kettle的API来实现,例如`TransMeta`和`Trans`类。首先,你需要加载`fromto.ktr`转换文件,然后创建一个`Trans`实例来运行它。...

    kettle 读取数据到 Excel 表格,自动发送邮件

    - **源代码**:在这里指的是Kettle的Job和Transformation文件(.kjb 和 .ktr)。它们是XML格式,记录了整个工作流程的详细信息。用户可以通过Pentaho Data Integration(Kettle)工具打开、编辑和运行这些文件。 ...

    kettle有关xml的多种写入方式

    - **XML追加步骤**:描述中提到的`ktr_write_xml_append1.ktr`和`ktr_write_xml_append2.ktr`可能就是示例转换,用于向XML文件追加数据。Kettle允许在不覆盖原有内容的情况下向XML文件追加新的数据。这通常用于日志...

    Kettle使用培训文档

    Kettle是开源的Java应用程序,提供了一整套工具集,包括: 1. ** Spoon**:Kettle的主要开发环境,用户通过图形界面设计、调试和运行ETL作业和转换。 2. **Kitchen**:用于批处理ETL作业的命令行工具,适合自动化...

    ETL工具kettle学习总结

    转换的设计文件以.ktr结尾,保存所有配置好的数据库连接、文件相对路径、字段映射关系等信息。Job的设计文件以.kjb结尾。 在Kettle中,用户定义的作业可以保存在XML格式中或某一个特定的数据库中。Job的设计文件中...

    kettle资料

    - 设计阶段:用户通过图形界面,结合各种预定义的转换步骤来设计数据处理的流程,可以手动编辑XML格式的设计文件(扩展名为.ktr),也可以通过定义的作业来实现复杂的数据处理流程,作业的XML格式设计文件后缀为.kjb...

    kettle 7.1.0.0.12 所有可能用到的jar包

    4. **数据转换和作业执行**:`pentaho-kettle-plugins-ktr.jar`和`pentaho-kettle-plugins-kjb.jar`分别包含了数据转换(Transformation)和作业(Job)的执行逻辑。`pentaho-metadata.jar`处理元数据模型,而`...

Global site tag (gtag.js) - Google Analytics