seiang
(Seiang)
1
为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 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 个赞
seiang
(Seiang)
4
感谢你的回复,附件是完整的lightning 的日志
tidb-lightning.log (425.3 KB)
2 个赞
检查一下报错的值是否是对应字段的非法写入的报错,可以先分析一下 Error 1136: Column count doesn’t match value count at row 报错。
另外查看 Lightning 导入日志,发现 创建 PD client 连接失败,需要再确认一下 PD 集群状态和日志是否正常。
3 个赞
spc_monkey
(carry@pingcap.com)
6
1、你 csv 文件是以什么为分隔符
2、你 test1 的表结构给一下
3、至于你说的已经有很多行了,但是我看日志,明显是开始就报错了,建议你确认一下数据是新导入的吗?
1 个赞
seiang
(Seiang)
8
你好,PD节点状态都是正常的,而且,请教一下,您说查看 Lightning 导入日志发现 创建 PD client 连接失败,这里是从哪里看出来的,我没有看到,方便帖下日志信息吗?
而且我把报错行的前后50行数据(包括报错行)导入到一个小的csv文件中,然后重新导入小文件,可以成功导入;
1、大文件导入过程中报错
2、拆分成小文件后可以导入成功
应该不是对应字段格式不正确导致的
1 个赞
seiang
(Seiang)
9
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 个赞
spc_monkey
(carry@pingcap.com)
10
把这个参数调大一些试试(看看报错的 位置是否会发生改变)tidb- server 参数: max-sql-length
1 个赞
seiang
(Seiang)
11
调整之后也没有用,报错还是同一个位置
[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 个赞
spc_monkey
(carry@pingcap.com)
12
帮我确认这个参数有没有生效吧(show config 命令),这个问题我和其他人确认一下看看啥原因
1 个赞
seiang
(Seiang)
13
问题已经经过多次测试,已经解决了
是由于配置文件参数设置的问题导致的
backslash-escape = true
trim-last-separator = false
感谢@spc_monkey
seiang
(Seiang)
14
问题解决了,是由于参数配置的问题导致的,感谢@Lucien
seiang
(Seiang)
17
那感觉应该和数据有有关了,可以看到报错行数的数据格式,过滤出来单独进行导入测试一下
从日志来看我猜测是生成的SQL太长被截断了,导致语法报错,改用local模式导入后成功
system
(system)
关闭
21
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。