南大通用GBase 8a 加载LOAD数据无法入库错误 skipped records,text parser error

GBase 8a 在加载LOAD时,如果发现数据和目标表不匹配,会将错误数据和原因,写入到日志里。 其中 text parser error 错误是因为数据按照分隔符切分的字段数量和表或指定的字段数量不匹配导致,文件列数多于表的列数。

错误原因日志是trc结尾的,错误数据是err结尾的。

排查步骤请参考 GBase 8a 集群加载数据LOAD的错误数据分析

针对 text parser error 错误,看如下样例

[root@sheng 655362]# cat 655362_test_test8_n1_192.168.11.134_20180105101906.trc
file_name    |   file_offset    |   record_len   |   column    |    reason
ftp://gbase:*****@192.168.11.133/3.csv|36|14|3|text parser error
ftp://gbase:*****@192.168.11.133/3.csv|50|10|2|text parser error
ftp://gbase:*****@192.168.11.133/3.csv|60|10|2|text parser error
ftp://gbase:*****@192.168.11.133/3.csv|70|19|3|text parser error

其中 655362 是加载的taskid, 后面是库名,表名。

如上错误原因是
文件:ftp://gbase:*@192.168.11.133/3.csv
错误数据在文件内的开始位置(字节) 36
错误数据长度 14
错误的列 3
错误原因 text parset error

然后,你需要打开 err文件,查看这一行数据,错误日志的行数与错误数据的行数是一一对应的。

对错误行,按照字段分隔符切分,看列数和表列数是否一致。

测试样例

一个单列的int的表

gbase> desc tload;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (Elapsed: 00:00:00.00)

样例数据

制造了3行异常数据,都是字段多

[gbase@localhost ~]$ cat /home/gbase/tload.txt
1
2,Second
3,Third,2020-01-02
4,Fouth,2020-14-16
[gbase@localhost ~]$

执行加载

有1行正常入库,3行错误数据

gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.107/home/gbase/tload.txt' into table tload;
Query OK, 1 row affected (Elapsed: 00:00:00.96)
Task 1572883 finished, Loaded 1 records, Skipped 3 records

查看表数据

确实有1行

gbase> select * from tload;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (Elapsed: 00:00:00.01)

查看错误日志和数据

此处为了方便,直接用SQL方式读取。可以看到报错信息 text parser error。注意用SQL方式,可以从结果里直接看到错误数据。如果从文件查看,是分成2个文件保存的。

gbase> show load logs limit 3;
+---------+---------+---------+-------------------+--------------------------------------------------------+-------------+------------+------------+--------------------+---------------------+
| task_id | db_name | tb_name | err_data_ip       | file_name                                              | file_offset | record_len | err_column | err_reason         | err_data            |
+---------+---------+---------+-------------------+--------------------------------------------------------+-------------+------------+------------+--------------------+---------------------+
| 1572883 | testdb  | tload   | ::ffff:10.0.2.107 | sftp://gbase:*********@10.0.2.107/home/gbase/tload.txt | 2           | 9          | 2          | text parser error
 | 2,Second
           |
| 1572883 | testdb  | tload   | ::ffff:10.0.2.107 | sftp://gbase:*********@10.0.2.107/home/gbase/tload.txt | 11          | 19         | 3          | text parser error
 | 3,Third,2020-01-02
 |
| 1572883 | testdb  | tload   | ::ffff:10.0.2.107 | sftp://gbase:*********@10.0.2.107/home/gbase/tload.txt | 30          | 19         | 3          | text parser error
 | 4,Fouth,2020-14-16
 |
+---------+---------+---------+-------------------+--------------------------------------------------------+-------------+------------+------------+--------------------+---------------------+
3 rows in set (Elapsed: 00:00:00.00)

通过文件查看错误日志和数据

[gbase@localhost opt]$ cd gcluster/log/gcluster/loader_logs/1572883
[gbase@localhost 1572883]$
[gbase@localhost 1572883]$
[gbase@localhost 1572883]$ ll
total 12
-rw------- 1 gbase gbase 216 Sep  3 13:53 1572883_loader_result.log
-rw------- 1 gbase gbase  47 Sep  3 13:53 1572883_testdb_tload_n1_::ffff:10.0.2.107_20200903135329.err
-rw------- 1 gbase gbase 316 Sep  3 13:53 1572883_testdb_tload_n1_::ffff:10.0.2.107_20200903135329.trc
[gbase@localhost 1572883]$ cat 1572883_testdb_tload_n1_\:\:ffff\:10.0.2.107_20200903135329.trc
file_name    |   file_offset    |   record_len   |   column    |    reason
sftp://gbase:*********@10.0.2.107/home/gbase/tload.txt|2|9|2|text parser error
sftp://gbase:*********@10.0.2.107/home/gbase/tload.txt|11|19|3|text parser error
sftp://gbase:*********@10.0.2.107/home/gbase/tload.txt|30|19|3|text parser error
[gbase@localhost 1572883]$
[gbase@localhost 1572883]$ cat 1572883_testdb_tload_n1_\:\:ffff\:10.0.2.107_20200903135329.err
2,Second
3,Third,2020-01-02
4,Fouth,2020-14-16
[gbase@localhost 1572883]$

解决方案

对于数据字段比表字段多的情况,可以通过table_fields指定来规避。请参考

GBase 8a 集群加载数据LOAD数据和字段不匹配的处理方案

其它加载错误,请参考

GBase 8a数据库加载LOAD报错信息分析和解决文章汇总

南大通用GBase 8a 加载LOAD数据无法入库错误 skipped records,text parser error》有1条评论

评论已关闭。