`

异构数据的同步——kettle

 
阅读更多
首先说明一下:在网上看到了别人这样实现了这样的功能
整理记录一下,好歹也是我的实验成果

例子库:https://github.com/cwarden/kettle/tree/master/samples/transformations

问题:如果不使用资源库,获得数据库连接该如果获得呢?

java.util.List list = getTrans().getRepository().readDatabases();

同时放一下:http://ainidehsj.iteye.com/blog/1735434
别人的成果

这个问题完美了,找到解决方法了:
import java.sql.*;
import org.pentaho.di.core.database.*;

private DatabaseMeta databaseMeta;
private Database database;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
    Object[] r = getRow();
    if (r == null) {
        setOutputDone();
        return false;
    }

    if (first)
    {
        first = false;
    }

    String tableName = getInputRowMeta().getString(r, getParameter("TABLEFIELD"), null );
    if (tableName==null) {
      throw new KettleException("Unable to find field with name "+getParameter("TABLEFIELD")+" in the input row.");
    }


    ResultSet resultSet;
    
    try {
      resultSet = database.getDatabaseMetaData().getIndexInfo(null, null, tableName, true, false);
      Object[] idxRow = database.getRow(resultSet);
      while (idxRow!=null) {
        RowMetaInterface idxRowMeta = database.getReturnRowMeta();

        r = createOutputRow(r, data.outputRowMeta.size());
        int index = getInputRowMeta().size();

        // Add the index name
        //
        r[index++] = idxRowMeta.getString(idxRow, "INDEX_NAME", null);

        // Add the column name
        //
        r[index++] = idxRowMeta.getString(idxRow, "COLUMN_NAME", null);

        // Add the ordinal position
        //
        r[index++] = idxRowMeta.getInteger(idxRow, "ORDINAL_POSITION", -1L);

        // Add uniqueness
        //
        r[index++] = idxRowMeta.getBoolean(idxRow, idxRowMeta.indexOfValue("NON_UNIQUE"));

        putRow(data.outputRowMeta, r);

        idxRow = database.getRow(resultSet);
      }
   } catch(Exception e) {
     throw new KettleException(e);
   }
   
   if (resultSet!=null) database.closeQuery(resultSet);
   

    database.closeQuery(resultSet);

    return true;
}

public boolean init(StepMetaInterface stepMetaInterface, StepDataInterface stepDataInterface)
{
    if (!parent.initImpl(stepMetaInterface, stepDataInterface)) {
      return false;
    }
    String dbName = getParameter("oraa");
    databaseMeta = getTransMeta().findDatabase(dbName);
    if (databaseMeta==null) {
         logError("A connection with name "+dbName+" could not be found!");
         setErrors(1);
         return false;
    }

    database = new Database(getTrans(), databaseMeta);

    try  {
      database.connect();
    } catch(Exception e) {
      logError("Connecting to database "+dbName+" failed.", e);
      setErrors(1);
      return false;
    }

    return true;
}

public void dispose(StepMetaInterface smi, StepDataInterface sdi)
{
    if (database!=null) {
      database.disconnect();
    }

    parent.disposeImpl(smi, sdi);
}
分享到:
评论

相关推荐

    kettle全量多表数据同步

    异构数据传输是指将不同类型的数据库之间的数据进行迁移。在本例中,主要涉及的是从Oracle数据库到MySQL数据库的数据迁移。这一过程可以通过多种方式实现,但在这里我们使用Navicat工具来完成这一任务。 - **安装...

    使用Kettle同步mysql数据,增量同步教程执行步骤

    通过Kettle,你可以灵活地处理各种数据同步场景,无论是简单的单表同步还是涉及多表关联的复杂同步,它都能提供强大的支持。同时,Kettle的图形化界面使得配置和调试过程相对直观,降低了操作难度。 请参考提供的...

    kettle数据增量同步实现

    kettle的使用手册,及个人实现的数据增量同步,亲测可行!

    使用Kettle同步mysql数据,增量同步

    在处理MySQL数据库的数据同步任务时,Kettle能够提供增量同步的功能,有效实现数据的实时更新。增量同步通常指的是只同步自上次同步以来发生改变的数据,而不是对整个数据库内容进行全量同步,这样能够节省网络带宽...

    kettle增量方案数据同步

    kettle增量方案全量比对取增量-根据唯一标示

    Kettle增量同步.rar

    Kettle增量同步,里边包含项目文件可能需要你新建数据库。源数据为Oracle,目标数据库为PostgreSQL. 增量记录表.SQL 用来生成 edp_etl_record 表 记录每次更新数据的执行记录过程。 更新时先取出edp_etl_record 表...

    kettle同步数据库所有的表数据到其他库.rar

    本示例中的"Kettle同步数据库所有的表数据到其他库.rar"是一个具体的应用场景,即利用Kettle将一个数据库的所有表数据同步到另一个具有相同表结构的数据库中。这里,我们不仅讨论如何实现这个功能,还将深入探讨...

    kettle实现时间戳增量同步案例

    在这个“kettle实现时间戳增量同步案例”中,我们将探讨如何利用Kettle来实现Oracle数据库中基于时间戳的数据增量同步。 1. **理解时间戳增量同步** 时间戳增量同步是指只同步自上次同步以来发生改变的数据,通常...

    kettle工具——用于数据迁移等

    2. **数据整合**:从多个异构数据源中抽取数据,整合成统一的数据视图。 3. **数据清洗**:去除数据中的错误、重复或不一致信息,提高数据质量。 4. **数据分析准备**:对原始数据进行预处理,以便进行数据分析或...

    Kettle 数据库与数据库多表循环同步

    1.可以实现数据库与数据库之间的自动同步; 2.使用前提是来源看与目标库中共同存在的表结构必须一致(因为是简易版,没有添加创建表等); 3.只需更改数据库连接即可,其他参数不必调整;4.目前使用KETTL7.1版本; 5...

    kettle操作数据同步.ktr

    XGL项目练习使用数据同步样本操作,处理了增删查改的相关操作,后续项目按照此标准进行处理数据的同步问题

    使用kettle同步数据库表至其他库

    使用kettle同步数据库表。网上找教程找了一天。终于弄好了。将两个数据库连接改成你自己的。sql也要改,然后把后面步骤的字段重新获取一下。然后就可以同步数据了。数据来源表增删改都可以同步。参考一下吧

    异构表同步

    通过阅读该博客,读者可能能学习到如何使用Kettle创建并配置这种异构表同步的.ktr文件,包括如何定义源和目标数据库连接,如何配置增量同步条件,以及如何调试和优化数据同步流程。此外,源码部分可能会揭示一些高级...

    Kettle 合并记录和Merge Join组件实现数据增量迁移(数据同步比插入更新快

    总结起来,“合并记录”和“Merge Join”组件在Kettle中扮演着关键角色,它们能够高效地执行数据增量迁移,显著提高数据同步的速度和准确性。通过充分利用这些组件,IT专业人员可以更有效地管理和维护大规模数据系统...

    Kettle数据库同步源码

    首先,Kettle支持多种数据库系统,如MySQL、Oracle、SQL Server等,能实现不同数据库之间的数据迁移与同步。这种特性使得Kettle成为跨平台数据整合的理想选择。在批量同步数据库表时,Kettle提供了工作流(Job)和...

    ETL数据整合与处理(Kettle)教案.rar

    《ETL数据整合与处理——Kettle深度解析》 在当今大数据时代,数据已经成为企业决策的重要依据。ETL(Extract, Transform, Load)是数据仓库系统中的关键环节,负责从不同源头抽取数据、转换数据格式并加载到目标...

    Kettle实现增量抽取数据

    Kettle,也称为Pentaho Data Integration(PDI),是一款强大的ETL(Extract, Transform, Load)工具,常用于企业级的数据集成...通过合理设计和配置,可以实现高效、准确的数据同步,满足企业对实时数据分析的需求。

    KETTLE之根据多表表名进行批量同步

    网上看了很多的kettle通过将表名设置成变量,然后进行多表批量同步的帖子,发现多多少少都会有问题。而此类功能简单的问题对于新手而言需要花很多的时间去琢磨,本人作为新手也琢磨很久,最后经大神们指点验证,将...

    kettle教程初学者教程oracle数据库多表全量同步

    利用kettle和oracle数据库进行多表全量同步教程

Global site tag (gtag.js) - Google Analytics