暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8a 加载常见数据错误排查方法

VV_刺头王 2022-03-14
4981


GBase 8a在加载数据时,如果发现数据和目标表不匹配,会返回Skipped n records字样,同时将错误数据和错误原因输出到加载错误日志中。

错误日志默认地址为:$GLUSTER_HOME/log/gcluster/loader_logs/taskID。


1. 如何获得加载任务号taskID呢?
GBase 8a通过load方式进行数据加载,每个加载任务一旦启动,会产生一个task id号码,用户可以通过其查看错误数据等信息。 数据库通过session级的变量gbase_loader_last_task_id获得最后一次加载的任务号。
可以通过show方式或者@@方式获取:
gbase> load data infile 'sftp://gbase:gbase1234@10.0.2.106/home/gbase/t.txt' into table t;
Query OK, 1 row affected (Elapsed: 00:00:37.19)
Task 1835190 finished, Loaded 1 records, Skipped 0 records

gbase> show variables like 'gbase_loader_last_task_id';
+---------------------------+---------+
| Variable_name | Value |
+---------------------------+---------+
| gbase_loader_last_task_id | 1835190 |
+---------------------------+---------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select @@gbase_loader_last_task_id;
+-----------------------------+
| @@gbase_loader_last_task_id |
+-----------------------------+
| 1835190 |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

2. 错误日志都记录那些内容?
$GLUSTER_HOME/log/gcluster/loader_logs/taskID下面分为以trc为结尾的错误日志文件和以err为结尾的错误数据文件(原始数据)。
错误日志包含如下信息:
file_name 加载错误的原始数据文件URI。
file_offset 错误数据开始位置的文件偏移量。
record_len 错误数据长度
column 错误列数,从1开始
reason 错误原因
3. 错误日志排查方法
首先通过观察错误日志,了解每一行错误数据产生的原因,重点放在column和reason上面,column锁定错误数据对应的列对象,reason可以初步定位原因。
下面举两个简单例子:
gbase> create table tload (I int);

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

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

进入目录$GLUSTER_HOME/log/gcluster/loader_logs/1572883下
[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
通过日志中错误信息提示,可知数据字段比表字段多。

4. 还有一些其他的常见错误原因

例如:
 The number of data columns is less than the number of columns defined:文件列数少于表的指定列数。数据按照分隔符切分的字段数量和表或指定的字段数量不匹配导致。
 text parser error:是因为数据按照分隔符切分的字段数量和表或指定的字段数量不匹配导致,文件列数多于表的列数。
 Out of range value:错误是因为数据超过了范围,包括数字过大或过小,日期超过限制等。
 Validate error:当数据某一列的值,无法转换为表对应字段类型时,比如带字母的字符串转化为数字,则会报该错误。原因可能是列的顺序匹配错误,或原始数据采集问题

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论