【记一次 DATAX 插件二次开发】

文章讲述了在将pg库作为源库进行数据迁移时,遇到Numeric(24)类型的主键分片问题。作者通过分析源码和解决maven配置错误,最终发现需修改DataX插件中的SingleTableSplitUtil,针对Oracle数据库特殊处理Numeric类型,解决并优化了资源利用。
摘要由CSDN通过智能技术生成

在实际数据迁移pg库为源库中中,存在主键类型为numeric(24)的情况
在这里插入图片描述
使用分片字段 则会失效,报错:
您配置的DataX切分主键(splitPk)有误. 因为您配置的切分主键(splitPk) 类型 DataX 不支持. DataX 仅支持切分主键为一个,并且类型为整数或者字符串类型. 请尝试使用其他的切分主键或者联系 DBA 进行处理.

又没有合适的分片字段,无法最大限度利用机器资源,决定看看源码。根据网上的教程安装教程
1.git clone
2.mvn -U clean package assembly:assembly -Dmaven.test.skip=true
(遇到相关报错:Assembly is incorrectly configured:等等 考虑是不是maven版本的问题,本人在3.9->3.6就好了)
3.在core 模块下 加上修改
在这里插入图片描述
System.setProperty(“datax.home”,“D:\SoftWare\datax”);
String[] datxArgs = {“-job”, “D:\SoftWare\datax\job\pgtomysql.json”, “-mode”, “standalone”, “-jobid”, “-1”};
设置文件地址datax地址。
4.定位到报错在这一块
在这里插入图片描述
断点一步步步入定位到
SingleTableSplitUtil.java–>isLongType()方法中
发现只有oralcle让用

    // warn: Types.NUMERIC is used for oracle! because oracle use NUMBER to
    // store INT, SMALLINT, INTEGER etc, and only oracle need to concern
    // Types.NUMERIC
    private static boolean isLongType(int type) {
        boolean isValidLongType = type == Types.BIGINT || type == Types.INTEGER
                || type == Types.SMALLINT || type == Types.TINYINT;

        switch (SingleTableSplitUtil.DATABASE_TYPE) {
            case Oracle:
            case OceanBase:
                isValidLongType |= type == Types.NUMERIC;
                break;
            default:
                break;
        }
        return isValidLongType;
    }

稍加修改
在这里插入图片描述
重新启动,发现没效果?
DataX采用了框架 + 插件,读取的是主目录里面的plugin 在这里插入图片描述
把对应jar包替换即可
本人修改的是postgresqlreader 中的plugin-rdbms-util-> SingleTableSplitUtil
选择中编译后jar
在这里插入图片描述
粘贴到datax主目录
plugin\reader\postgresqlreader\libs 中即可
效果显著
在这里插入图片描述

DataX是一个用于数据同步的开源工具,它提供了丰富的插件来支持不同的数据源和目标。根据引用[2],DataX插件的开发模式是基于Record的抽象,各个插件只需要按照规范进行开发即可。引用[3]中提到,DataX的打包成功后的包结构中包含了插件目录。 对于Elasticsearch读插件二次开发,你可以参考DataX插件开发规范和文档。首先,你需要了解Elasticsearch的数据结构和API,以便在插件中进行数据读取操作。然后,你可以在DataX插件目录中创建一个新的插件目录,并按照规范进行插件的开发。在插件的配置文件中,你需要指定Elasticsearch的连接信息和查询条件等参数。 在插件的开发过程中,你可以使用DataX提供的各种工具和接口来简化开发和测试。例如,你可以使用DataX的RecordReader接口来读取Elasticsearch中的数据,并将其转换为DataX的Record对象。你还可以使用DataX的各种工具类来处理数据转换和批量写入等操作。 最后,你可以使用DataX的命令行工具来运行你开发的插件,并通过配置文件指定插件的参数和数据源信息。例如,你可以使用类似于引用[1]的命令来运行你的Elasticsearch读插件,并指定数据源的路径和插件的配置文件。 总结起来,要进行DataX的Elasticsearch读插件二次开发,你需要了解Elasticsearch的数据结构和API,按照DataX插件开发规范进行插件的开发,使用DataX的工具和接口简化开发和测试,最后使用DataX的命令行工具来运行你开发的插件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值