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 个赞

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

2 个赞

你好,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太长?这个有明确的长度限制吗?

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

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。