TiDB Lightning导入csv文件报错

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
v5.0.3 tidb lightning 同版本

【问题】
使用tidb lightning导入csv文件的时候出现如下的报错信息:
[2021/08/05 14:25:06.975 +08:00] [ERROR] [restore.go:2397] [“write to data engine failed”] [table=test.Acc_UserDeal_20210801] [engineNumber=0] [
fileIndex=0] [path=test.Acc_UserDeal_20210801.csv:0] [task=deliver] [error=“Error 1136: Column count doesn’t match value count at row 489”]
[2021/08/05 14:25:06.975 +08:00] [ERROR] [restore.go:1597] [“encode kv data and write failed”] [table=test.Acc_UserDeal_20210801] [engineNumber=
0] [takeTime=35.850098105s] [error=“Error 1136: Column count doesn’t match value count at row 489”]
[2021/08/05 14:25:06.975 +08:00] [ERROR] [restore.go:1429] [“restore engine failed”] [table=test.Acc_UserDeal_20210801] [engineNumber=0] [takeTi
me=35.850163835s] [error=“Error 1136: Column count doesn’t match value count at row 489”]

查看了一下csv文件中的数据,没有发现有啥不对的地方;csv文件数据格式如下:
427678|273895889|0|0|0|0|0|1627776177|3|0|7|453010|5|2|50|50|0|0|0|0|回兑
427679|141899432|0|0|0|0|0|1627776177|3|0|5|502075|5|0|0|0|2|130|16826|0|复活收费

请大家指点一下,还有就是报错 row 489,只的是csv文件的第489行?但是表中已经插入数据426916行了

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

3赞

麻烦发一下 lightning 的日志 log 文件,看一下报错前面的日志有哪些z

2赞

感谢你的回复,附件是完整的lightning 的日志
tidb-lightning.log (425.3 KB)

2赞

检查一下报错的值是否是对应字段的非法写入的报错,可以先分析一下 Error 1136: Column count doesn’t match value count at row 报错。

另外查看 Lightning 导入日志,发现 创建 PD client 连接失败,需要再确认一下 PD 集群状态和日志是否正常。

3赞

1、你 csv 文件是以什么为分隔符
2、你 test1 的表结构给一下
3、至于你说的已经有很多行了,但是我看日志,明显是开始就报错了,建议你确认一下数据是新导入的吗?

1赞

报错的意思就是 表字段个数和 提供的 行数不匹配

1赞

你好,PD节点状态都是正常的,而且,请教一下,您说查看 Lightning 导入日志发现 创建 PD client 连接失败,这里是从哪里看出来的,我没有看到,方便帖下日志信息吗?

而且我把报错行的前后50行数据(包括报错行)导入到一个小的csv文件中,然后重新导入小文件,可以成功导入;

1、大文件导入过程中报错
2、拆分成小文件后可以导入成功

应该不是对应字段格式不正确导致的

1赞

1、分隔符是|,上面问题中有具体数据的格式
2、表结构如下:
CREATE TABLE test (
id int(10) unsigned NOT NULL COMMENT ’ ',
pid int(10) unsigned NOT NULL COMMENT ’ ',
accnum int(10) unsigned NOT NULL COMMENT ’ ',
acctype smallint(5) unsigned NOT NULL COMMENT ’ ',
relpid int(10) unsigned NOT NULL COMMENT ’ ',
relaccnum int(10) unsigned NOT NULL COMMENT ’ ',
relacctype smallint(5) unsigned NOT NULL COMMENT ’ ',
date int(10) unsigned NOT NULL COMMENT ’ ',
dealclassid smallint(5) unsigned NOT NULL COMMENT ’ ',
dealid int(10) unsigned NOT NULL COMMENT ’ ',
dealtypeid int(10) unsigned NOT NULL COMMENT ’ ',
dealsubtypeid int(10) unsigned NOT NULL COMMENT ’ ',
dealplaceid int(10) unsigned NOT NULL COMMENT ’ ',
debitcurrencyid smallint(5) unsigned NOT NULL COMMENT ’ ',
debitamount int(10) unsigned NOT NULL COMMENT ’ ',
debitbalance int(10) unsigned NOT NULL COMMENT ’ ',
creditcurrencyid smallint(5) unsigned NOT NULL COMMENT ’ ',
creditamount int(10) unsigned NOT NULL COMMENT ’ ',
creditbalance int(10) unsigned NOT NULL COMMENT ’ ',
outeraccountid int(10) unsigned NOT NULL COMMENT ’ ',
note varchar(255) DEFAULT NULL COMMENT ’ ',
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
KEY NX_PID (pid,dealsubtypeid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

3、cvs文件总共两亿行数据,导入成功40多万行,表中原本是空表

4、报错的意思应该不是字段个数和 提供的 行数不匹配吧,不匹配的报错信息应该如下的信息吧:
[error=“restore table test.test failed: in file test.test.csv:0 at offset 291: column count mismatch, expected 19, got 21”]

1赞

把这个参数调大一些试试(看看报错的 位置是否会发生改变)tidb- server 参数: max-sql-length

1赞

调整之后也没有用,报错还是同一个位置
[2021/08/06 14:56:30.969 +08:00] [ERROR] [main.go:91] [“tidb lightning encountered error”] [error=“restore table test.Acc_UserDeal_20210801 failed: Error 1136: Column count doesn’t match value count at row 489”]

1赞

帮我确认这个参数有没有生效吧(show config 命令),这个问题我和其他人确认一下看看啥原因

1赞

问题已经经过多次测试,已经解决了
是由于配置文件参数设置的问题导致的
backslash-escape = true
trim-last-separator = false

感谢@spc_monkey

问题解决了,是由于参数配置的问题导致的,感谢@Lucien

:ok_hand::+1:

我用的是这两个配置,但还是报一样的错

那感觉应该和数据有有关了,可以看到报错行数的数据格式,过滤出来单独进行导入测试一下

从日志来看我猜测是生成的SQL太长被截断了,导致语法报错,改用local模式导入后成功

好吧,生成的SQL太长?这个有明确的长度限制吗?

不太清楚是不是有这个限制