当我使用Sqoop将数据批量写入TiDB时,遇到了以下错误:
java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation
我已经配置了--batch
选项,但是仍然发生此错误。如何解决此错误?
答案 0 :(得分:0)
在Sqoop中,--batch
表示每批提交100个statement
,但是默认情况下每个statement
包含100条SQL语句。因此,100 * 100 = 10000条SQL语句,超过5000条,这是单个TiDB事务中允许的最大语句数。
两种解决方案:
添加-Dsqoop.export.records.per.statement=10
选项,如下所示:
sqoop export \
-Dsqoop.export.records.per.statement=10 \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop ${user} \
--password ${passwd} \
--table ${tab_name} \
--export-dir ${dir} \
--batch
您还可以在单个TiDB事务中增加有限数量的语句,但这会消耗更多的内存。