在使用load data导数据时,如果期间发生网络超时等异常状况就会导致load data产生回滚。所以引入了”分批导入“的处理方式:将需要导入的文件按照阈值(见bootstrap.cnf)拆分成多个文件进行分批导入,这样在load data途中发生异常状况时,已经成功已导入的文件不会被回滚,并会停止导入发生异常后的文件。再次基于源文件的load data,DBLE则会跳过已成功导入的文件继续load data。此外,在开启批处理模式后,如果待导入的文件按照既定load data语法规则(或不符合表结构等)存在错误,DBLE会停止load data并会展示该文件错误的sql语句的内容,待错误修复后,再次load data仍会跳过已导入的数据,从而节约时间成本。
注意:
1.如果文件发生错误, 只有文件修改完成并且正确导入后或者使用kill @@load_data,/temp/error 下的文件才会被删除。
2.如果文件发生错误,在修改文件内容时修改了文件名称会被视为新文件重新导入。
3.每次导入文件会删除上次导入遗留的内容(如上次生成的错误文件等)。
4.错误文件命名方式为:数字-文件名-下发节点名.txt,比如1-data-dn1。1代表文件分割后的第一个文件,data为导入的文件名称,dn1代表该文件需要下发的节点。
# 开启BatchLoadData的开关,默认关闭;0-关闭,1-开启
#-DenableBatchLoadData=1
# 拆分文件的阈值,默认为100000
#-DmaxRowSizeToFile=100000
查询本次load data失败的文件
show @@load_data.fail;
Empty set (0.01 sec)
if have error file may like
show @@load_data.fail;
+-----------------------------+
| error_load_data_file |
+-----------------------------+
| ./temp/error/1-data-dn1.txt |
| ./temp/error/1-data-dn2.txt |
+-----------------------------+
2 rows in set (0.01 sec)
关闭load data批处理模式
disable @@load_data_batch;
Query OK, 1 row affected (0.00 sec)
disable load_data_batch success
开启load data批处理模式
enable @@load_data_batch;
Query OK, 1 row affected (0.01 sec)
enable load_data_batch success
修改需要持久化的最大行数,在开启load data批处理模式下是拆分文件的阈值
reload @@load_data.num=200000;
Query OK, 1 row affected (0.00 sec)
reload @@load_data.num success
导入文件如果发生回滚,再次导入该文件时不再跳过已经成功导入的数据会从头重新导入数据
kill @@load_data;
Query OK, 1 row affected (0.00 sec)
kill @@load_data success