Tidb 能够很好的兼容MySQL,因此它也支持了MySQL的load data infile 。
但是通过今天的测试,发现他不支持使用load data local infile 'a.csv' ignore into table 'a.b';
这样使用ignore的操作?
在这边文章中TiDB 源码阅读系列文章(十六)INSERT 语句详解提到load data infile 与insert ignore into。但我在其他地方并没有找到其他的依据(也就是说不用使用ignore,就是ignore模式了)。但到底是不是这样呢? 有待考究。
而在Tidb给的官方文档中,有这么一段解释:
TiDB 在执行 load data 时,默认每 2 万行记录作为一个事务进行持久化存储。如果一次 load data 操作插入的数据超过 2 万行,那么会分为多个事务进行提交。如果某个事务出错,这个事务会提交失败,但它前面的事务仍然会提交成功,在这种情况下一次 load data 操作会有部分数据插入成功,部分数据插入失败。而 MySQL 中会将一次 load data 操作视为一个事务,如果其中发生失败情况,将会导致整个 load data 操作失败。
这样的话,如果我插入的时候确实出错了(或者我认为的中止了任务),这就会导致,一部分数据没有插入。那我肯定要再插入一次,这次插入肯定要使用ignore的形式进行load data infile 带ignore的格式。而在tidb的load data infile 中没有这个格式,所以可以暂时判断它是默认为ignore格式。
否则当我的数据插入一半挂掉后,我需要修改我导入数据的文件,将已经插入的数据去除,这极大的增加了工作量,Tibd如果要活下来,肯定不会有这种der的bug存在的。
所以我几乎说服我自己了。
但到底tidb 的 load data infile 是不是ignore 的模式呢,希望您给出更事实性的回答。