阿里云首页

Dataphin脚本做数据同步提示存在脏数据,报错“java.sql.BatchUpdateException: Duplicate entry '...' for key 'PRIMARY'”

问题描述

构建Shell任务调用DataX进行Maxcompute源读取到MySQL写入的数据同步,执行报错提示有脏数据,报错信息为“java.sql.BatchUpdateException: Duplicate entry '...' for key 'PRIMARY'”。

问题原因

根据报错判断,MySQL写入数据,若出现主键冲突,当writeMode为insert时会提示有脏数据。

解决方案

将writeMode的insert改为replace即可。

  1. Dataphin系统内嵌了DataX组件,支持通过构建Shell任务调用DataX,实现数据同步。
  2. DataX的MySQL Writer插件实现了写入数据到MySQL主库的目的表的功能。
  3. MySQL Writer通过DataX框架获取Reader生成的协议数据,根据配置的writeMode生成。
    • insert into...(当主键/唯一性索引冲突时会写不进去冲突的行)
    • replace into...(没有遇到主键/唯一性索引冲突时,与insert into行为一致,冲突时会用新行替换原有行所有字段) 的语句写入数据到MySQL。出于性能考虑,采用了PreparedStatement+Batch,并且设置了:rewriteBatchedStatements=true,将数据缓冲到线程上下文Buffer中,当Buffer累计到预定阈值时,才发起写入请求。

适用于

  • Dataphin

说明:本文适用于同步任务模块。

 

首页 Dataphin脚本做数据同步提示存在脏数据,报错“java.sql.BatchUpdateException: Duplicate entry '...' for key 'PRIMARY'”