-1

我在使用 Sqoop 批量向 TiDB 写入数据时,遇到如下错误:

java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation

我已经配置了该--batch选项,但仍然出现此错误。如何解决此错误?

4

1 回答 1

0

在 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 事务中增加有限的语句数,但这会消耗更多的内存。

于 2018-07-06T08:06:51.120 回答