Datax 同步数据到Postgres 增量更新

文章讲述了如何修改DataX的postgresqlwriter模块以支持update模式。主要涉及修改WriterUtil.java的onConflictUpdateString方法,解除PostgreSQL对update模式的限制。在修改后,可以通过调整POM.xml注释不必要的模块快速打包,并更新job.json配置文件启用update模式。
摘要由CSDN通过智能技术生成

前面有篇文章提到把datax代码拉到本地打包,是因为可以根据某些需求,去修改里面的代码.

同步数据到pg中,wirteMode使用update,提示不支持。需要修改下postgresqlwriter。
修改postgresqlwriter模块的 PostgresqlWriter.java

在这里插入图片描述

上面看到,pg目前(22年8月份) 不支持update
下面对这段代码修改下:

  • 解除pg不能使用writeMode:update限制
    image.png
  • 找到最终拼接sql的地方在plugin-rdbms-util模块 WriterUtil.java地方
    url
  • onConflictUpdateString方法做如下修改:
public static String onConflictUpdateString(String conflict, List<String> columnHolders) {   
    conflict = conflict.replace("update", "");    
    StringBuilder sb = new StringBuilder();    
    sb.append(" ON CONFLICT ");    
    sb.append(conflict);    
    sb.append(" DO ");    
    if (columnHolders == null || columnHolders.size() < 1) {        
        sb.append("NOTHING");        
        return sb.toString();    
    }    
    sb.append(" UPDATE SET ");    
    boolean first = true;    
    for (String column : columnHolders) { 
        if (!first) {            
        sb.append(",");        
    } else {            
        first = false;        
    }        
    sb.append(column);       
    sb.append("=excluded.");       
    sb.append(column);    }    
    return sb.toString();
}
  • 打包
    为节省打包时间,可以在pom.xml中注掉不需要重新打包的模块,留下公共模块

image.png

mvn -U clean package assembly:assembly -Dmaven.test.skip=true

..\target\datax\datax\plugin\writer,获取postgresqlwriter,替换之前的同名文件。

使用
job.json:

{   ...  
    "writer":{    
        "name":"postgresqlwriter",    
        "writeMode":"update(唯一索引字段)"  
    }  
    ...
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值