执行LOAD DATA语句,如果指定 REPLACE INTO,当发生主键冲突时报错

【 TiDB 使用环境】生产环境 /测试
【 TiDB 版本】v6.5
【复现路径】
1.执行SQL语句:LOAD DATA LOCAL INFILE ‘B_PRODCONSTI.csv’ REPLACE INTO TABLE B_PRODCONSTI FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘"’ LINES TERMINATED BY ’
’ IGNORE 1 LINES (TENANT,PRODUID,CONSTIPRODUID,CAMOUNT,STATE,UPTIME)
2. 如果导入数据存在相同主键,则报错如下:
assertion failed: key: 748000000000001d9d5f72010031003900370030ff0033003400350000fd060a00800000025b, assertion: NotExist, start_ts: 441033509315805186, existing start ts: 441033501700259844, existing commit ts: 441033501713629190
3. 如果没有主键冲突,或者使用 IGNORE INTO 而不是 REPLACE INTO,则不会有问题

估计是个BUG,不过其实也可以tidb-lightning来导入,在那里来设置冲突应该如何处理。

你说的对,可以用可以tidb-lightning来做导入。但tidb-lightning更适合手动操作,而 LOAD DATA则方便用程序来处理。我现在是先导入到一个临时表中,再用REPLACE INTO导入到实际表中,数据量不太大的话也勉强能接受。

嗯啊,我给调到BUG反馈区,让官方也排查一下。不过这个BUG即便是解决,估计也要下个版本了修复了 :joy: