我在使用 Sqoop 批量向 TiDB 写入数据时,遇到如下错误:
java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation
我已经配置了该--batch
选项,但仍然出现此错误。如何解决此错误?
我在使用 Sqoop 批量向 TiDB 写入数据时,遇到如下错误:
java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation
我已经配置了该--batch
选项,但仍然出现此错误。如何解决此错误?
在 Sqoop 中,--batch
意味着每批提交 100statement
秒,但默认情况下,每批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 事务中增加有限的语句数,但这会消耗更多的内存。