flink JDBC SQL Connector sink到mysql表,mysql表有主键和唯一键,定义sink mysql 表唯一键为主键,任务报Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1711666254861078528-ORDonoff-0' for key 'DEVICEID_DATACODE_DEL'
当您使用 Flink JDBC Sink 将数据写入 MySQL 数据库时,如果目标表中有主键或唯一键约束,则必须确保写入的数据符合这些约束条件。否则,MySQL 会拒绝插入重复的记录,从而抛出 SQLIntegrityConstraintViolationException
异常。
为了解决这个问题,您可以采取以下几种措施:
updateMode="upsert"
,这会让 Flink 自动更新已有记录,而不是插入重复记录。看起来你的问题是由于在尝试将数据写入 MySQL 表时违反了唯一约束而导致的。根据你的描述,在使用 Flink JDBC SQL Connector 将数据 sink 到 MySQL 表中时遇到了一个异常。这个异常是因为试图插入的数据违反了表中的唯一约束,即 PRIMARY KEY 或 UNIQUE 索引。这是因为 MySQL 数据表中已经存在与您要插入的新行具有相同 PRIMARY KEY 或 UNIQUE 索引值的记录,所以无法再添加重复的记录。请检查您的数据源,确保所有新记录都具有唯一的 PRIMARY KEY 或 UNIQUE 索引值。如果你需要更新现有记录,则可以使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 语句来实现。这将在尝试插入新行时自动检测是否已有与之相同的 PRIMARY KEY 或 UNIQUE 索引值,并相应地执行更新操作而不是插入新行。你可以考虑将 PRIMARY KEY 或 UNIQUE 索引设置为自增模式,以避免出现冲突。这样,每当您向表中插入新行时,MySQL 会自动为其分配一个新的唯一索引值,从而避免违反唯一约束。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。