tidb中出错:`java.sql.batchupdateexecption:statement count 5001超出交易限制`

esbemjvw  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(501)

当我使用sqoop将数据批量写入tidb时,遇到以下错误:

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

我配置了 --batch 选项已存在,但仍发生此错误。如何解决此错误?

rseugnpd

rseugnpd1#

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

相关问题