mysql等关系型数据库数据写入时由于表有设置主键造成的数据写入时回滚,导致任务整体同步慢:典型报错:
WARN CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 因为:java.sql.BatchUpdateException: Duplicate entry 'xxxx' for key 'PRIMARY'
分析:由于写入的数据库的表有设置主键或者唯一约束,来源端数据值有重复值的情况下,以insert模式写入会造成主键冲突的问题,数据库侧进行写入操作的回滚,此时需要根据需要调整mysql writer的写入模式。
可以选择on duplicate key update或者replace into模式
,此回答整理自钉群“DataWorks交流群(答疑@机器人)”
在DataWorks数据同步中,如果主键冲突发生了,您可以采取以下步骤进行处理:
首先,您需要确认日志中的回滚写入操作信息。这个信息通常会包含报错提示,例如"Detail: Key (id)=(2022080640) already exists.",由此可以定位到主键冲突的问题。
接下来,请检查并确保数据源中没有重复的主键值。如果存在重复的主键,那么需要先处理掉重复的主键值才能进行数据同步。
如果问题仍然存在,那么可以尝试使用数据库的update功能来更新目标表已有数据行。具体做法是,当写出数据和目标存储已有数据发生数据约束时(如主键冲突、唯一键约束、外键约束等),数据库会使用来源数据update更新目标表已有数据行。
最后,如果目标表存在多个数据约束的情况下,数据替换可能会失败并产生脏数据。这种情况下,您需要进一步排查问题原因并找出合适的解决方案。
在DataWorks中,如果在数据同步过程中遇到主键冲突的情况,可以通过以下步骤进行数据回滚:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。