GBase 8a MPP集群数据加载及常见问题总结

1 数据加载基础
1.1 数据加载语法格式
GBase 8a MPP Cluster支持通过SQL接口进行数据加载。
语法格式:
LOAD DATA INFILE ‘file_list’ INTO TABLE [dbname.]tbl_name [options]

options:
[CHARACTER SET charset_name]
[DATA_FORMAT number [HAVING LINES SEPARATOR]]
[NULL_VALUE ‘string’]
[FIELDS
[TERMINATED BY ‘string’]
[ENCLOSED BY ‘string’]
[PRESERVE BLANKS]
[AUTOFILL]
[LENGTH ‘string’]
[TABLE_FIELDS ‘string’]
]
[LINES
[TERMINATED BY ‘string’]
]
[MAX_BAD_RECORDS number]
[DATETIME FORMAT format]
[DATE FORMAT format]
[TIMESTAMP FORMAT format]
[TIME FORMAT format]
[TRACE number]
[TRACE_PATH ‘string’]
[NOSPLIT]
[PARALLEL number]
[MAX_DATA_PROCESSORS number]
[MIN_CHUNK_SIZE number]
[SKIP_BAD_FILE number]
[SET col_name = value[,…]]
[IGNORE NUM LINES]
[FILE_FORMAT format]
参数说明 :
FILE_LIST : 待加载文件列表,或待加载数据文件所在的目录。支持URL的方式指定数据文件路径,以逗号(’,’)作为多个文件/目录的分隔符。
scheme://host:port/path, scheme://host:port/path

OPTIONS :
CHARACTER SET : 用来指定待加载数据文件的编码格式,目前支持GBK和UTF8两种格式。省略时,认为不需要转码。
DATA_FORMAT : 用来指定使用哪种方式解析数据文件并加载。指定为3,表示使用文本方式加载。指定为4,表示使用定长方式加载。如果某列数据可能包含了行分隔符,则需要在SQL中输入’HAVING LINES SEPARATOR’子句。指定为5,表示使用文本文件宽松模式,即数据源文件为包围符中含有换行符和包围符文本文件,或多列少列文本文件。
NULL_VALUE : 用于指定空值字符,支持不超过15个任意字符的组合,参数值以引号包围,指定方式与字段包围符一样。

FIELDS :
TERMINATED BY : 用于指定字段分隔符,支持不超过15个任意字符的组合,支持任意字符,参数值以引号包围,仅当使用文本方式加载时有效。可使用字符本身(仅限可见字符,如 : “|”)、 C风格转义字符(如 : “\a”)、 \xhh十六进制(如 : “\xFF”)或x’‘十六进制(如 : "x’09’")四种方式指定。例如 : ‘|’,表示用|作为分隔字符。
ENCLOSED BY : 用于指定字段包围符,支持任意单字符,参数值以单引号包围,仅当使用文本方式加载时有效。可使用字符本身(仅限可见字符,如 : “|”)、 C风格转义字符(如 : “\a”)、 \xhh十六进制(如 : “\xFF”)或x’‘十六进制(如 : "x’09’")四种方式指定。
PRESERVE BLANKS : 用于设定是否保留字段内容两端的空格,默认不保留空格。
AUTOFILL : 用于设定是否启用缺失列自动补齐功能,启用该参数后,对缺失分割符的字段数据按照default值或者NULL值进行加载,默认不自动补齐。
DEFINER : 在使用定长模式加载时,用于设定字段长度的参数。定长格式数据导入时,设置每个字段的长度,有多个字段时,用逗号分隔。
LENGTH : 在使用定长模式加载时,用于设定字段长度的参数。定长格式数据导入时,设置每个字段的长度,有多个字段时,用逗号分隔。
TABLE_FIELDS : 用于指定列加载,对于日期时间类型可以设置每一列的格式。
SET : 指定列值加载,加载系统将待加载文件和指定加载列值加载到集群系统的表中。输入的类型应为常量,包括字符串、整数值、浮点值和NULL。
1、 支持指定所有列类型加载值;
2、 指定列值为常量值(包括NULL),包括字符串(单引号包围)、十进制数值(10)、浮点值(10.9)、 NULL、 16进制表示的字符串(0xbac3)、科学计数法(10e4);
3、 支持多列同时指定加载值。最多可SET表列数-1 ,如果设置的列数与表定义中的列数一致将报错 : Specified all fields .
4、 支持format=3、 format=4以及format=5;
使用限制说明 :
1、 输入除常量值外的其他值,如列名、表达式等会报错,报错信息为Column ‘addr’ should be const value;
2、 指定的列不能存在于TABLE_FIELDS中,否则报错;
3、 如果没有指定AUTOFILL,指定值的列数+数据中列数之和必须等于表定义或者TABLE_FIELDS (若指定了TABLE_FIELDS)中的列数,否则会产生错误数据;如果指定了AUTOFILL,则可以小于表定义的列数,缺少的列会自动补全。如果TABLE_FIELDS列数+SET列数小于表定义的列数,能够正常加载,没有涉及的列按照default值补齐;
4、 同一列在SQL中不能重复指定,否则报错。
LINES :
TERMINATED BY : 行分隔符,支持任意单字符,参数值以引号包围。 指定方式与包围符一样。 默认行分隔符为’\n’。
MAX_BAD_RECORDS : 在每次加载的任务中,设定错误数据行数的上限。当本次加载任务产生的错误数据行数大于max_bad_records设定的值时,加载任务回滚,加载工具报错退出。不指定该参数表示不限制错误条数,指定该参数时,此参数取值范围为 : [0, 4294967295]。 0表示只要有错误数据就报错退出。最大加载错误数的计算方式 : 所有集群节点独立计算,一旦有一个节点加载时错误数据达到本限制,则终止所有节点的加载任务。集群加载提交之前检查总错误条数是否超出限制,如果超出限制,放弃提交,报错退出。
DATE FORMAT : 用来指定date列类型的默认格式,如’%Y-%m-%d’。
DATETIME FORMAT : 用来指定datetime列的默认格式,如’%Y-%m-%d %H:%i:%s’。
TIMESTAMP FORMAT : 用来指定timestamp列的默认格式,如’%Y-%m-%d %H:%i:%s’。
TIME FORMAT : 用来指定time列的默认格式,如’%H:%i:%s’。
TRACE : 用来指示本次加载是否保存错误数据溯源。如果指定为0, 则不溯源。如果指定为1,则进行溯源。默认值为1。溯源信息包括 : 错误数据所在的文件,所在行号。
TRACE_PATH : 用来指定本次加载过程中产生的错误数据和日志存放路径。 在禁用日志汇总功能时, 该参数才能起作用, 默认值为加载节点的‚/opt/gnode/log/gbase/loader_logs‛中。
NOSPLIT : 用来指定本次加载任务中是否禁用分块加载功能,指定该参数将禁用分块加载功能。不指定该参数,在集群加载时,将自动启动分块加载功能,按照数据量和参与运算的加载节点数对数据进行均匀分块,以均衡数据服务器和数据处理节点的负载,优化加载性能。
PARALLEL : 用来控制集群加载并行度,取值范围[0,1024]。默认值为0,表示并行度取值是线程池最大可用线程数。
MAX_DATA_PROCESSORS : 用来指定本次加载任务中参与数据解析的处理的最大节点数,取值范围[1, 4294967295],默认值16。
MIN_CHUNK_SIZE : 用来指定本次加载任务中数据分块的最小粒度,取值范围[1,4294967295],默认值64M。
SKIP_BAD_FILE: 用来指定本次加载任务中是否忽略不存在或没有读取权限的数据文件继续加载。如果指定为0,则加载报错终止。如果指定为1,则忽略异常文件继续加载。默认值为0。
IGNORE NUM LINES : 配置该参数加载工具会将本次加载指定的所有数据文件的表头进行过滤,跳过每个文件的前NUM行(表头所占行数), NUM取值范围为[0,MAX_UINT]。
FILE_FORMAT:用来指定被加载文件的格式。枚举型参数,取值为UNDEFINED、UNCOMPRESSED、 GZIP、 SNAPPY、 LZO,默认为UNDEFINED。 指定为UNDEFINED,表示不指定格式,按文件后缀自动判断文件格式; 指定为UNCOMPRESSED,表示按普通文本方式加载文件;指定为GZIP,表示按GZIP格式加载文件;指定为SNAPPY,表示按SNAPPY格式加载文件; 指定为LZO,表示按LZO格式加载文件。

1.2 数据加载使用约束
1.当使用定长加载模式时,必须指定FIELDS DEFINER的值。
2.当使用文本加载模式时,NULL_VALUE的默认值为’\N’。
3.当使用文本加载方式时,行分隔符默认为’\n’。
4.当使用文本加载方式时,如果某列数据可能包含了行分隔符,则需要在SQL中输入’HAVING LINES SEPARATOR’子句,同时需要输入入’ENCLOSED BY’指定字段包围符
5.当在加载文件列表的 URL 中的用户名(user)、密码(password)、主机名(host)或文件路径(path)中包含下表所列的特殊字符时,对特殊字符需要用百分号编码代替。
URL : scheme://[user:password@]host[:port]/path
百分号编码 = % + 特殊字符的两字符十六进制值
1.3 数据加载权限说明
1.加载表的insert的权限grant insert on test.tmp_abc_1117_test to abc;
2.File权限 grant file on . to abc;
1.4 数据加载状态监控
数据加载监控表information_schema.load_status
字段名称 字段说明
SCN SCN
DB_NAME 库名
TB_NAME 表名
IP 加载机IP
STATE 加载状态
START_TIME 加载启动时间
ELAPSED_TIME 加载结束时间
AVG_SPEED 加载速度
PROGRESS 加载进度
TOTAL_SIZE 文件总长度
LOADED_SIZE 已加载数据量
LOADED_RECORDS 已加载数据条数
SKIPPED_RECORDS 跳过数据条数
DATA_SOURCE 数据源
SQL_CMD 加载任务的SQL
注 : [1]gcluster层看到的load_status是全部的load data 加载任务
[2]gnode层只能看到自己节点上运行的load data 加载任务

1.5 加载错误数据与溯源信息检索
支持语法形式对于错误数据与溯源信息检索功能,具体语法如下:
show [ gcluster ] load logs task_id LIMIT {[offset,] row_count}
查询结果信息表定义如下:
字段 含义 类型 长度
TASK_ID 加载 ID varchar 64
DB_NAME 加载库名 varchar 64
TB_NAME 加载表名 varchar 64
ERR_DATA_IP 产生错误数据的节点 IP varchar 20
FILE_NAME 加载文件名 varchar 64
FILE_OFFSET 错误数据偏移量 varchar 64
RECORD_LEN 错误数据行长 varchar 64
ERR_COLUMN 错误数据列号 varchar 64
ERR_REASON 错误数据具体原因 varchar 1024
ERR_DATA 错误数据 varchar 4096

具体说明:

  1. show 语法查询默认是返回 offset 从 0 到 length 10 的 10 条错误数据与溯源信息查询,如果想查询更多的数据可以调整 offset,length。
  2. show 语法查询当前 coordinator 节点错误数据与溯源信息进行检索使用 show load logs task_id limit offset, row_count 进行查询,返回 row_count 条查询结果。
  3. 查询所有 coordiantor 节点错误数据与溯源信息进行检索使用 show gcluster load logs task_id limit offset, row_count 进行查询,返回 row_count 条查询结果。
  4. ERR_DATA 的长度定义为 4096 个字节。可以涵盖绝大多数场景,对于超过长度的错误数据,显示时做截断处理,实际读取 4096 个字节。
  5. show 查询功能,只能查询当前汇总目录内的加载错误数据与溯源信息。即如果用户对 gbase_loader_logs_dir 做了变更后,将查询不到原指定目录中的数据。
  6. Show 语法增加用户查询权限控制功能,默认仅能查询当前用户指定加载任务的错误数据与溯源信息,有 process 权限的用户可以查询其他用户指定加载任务的错误数据与溯源信息。
    1.6 数据加载使用示例
    1.6.1 特定文件加载
    以文本方式加载位于ftp服务器上的文件lineorder1.tbl,默认行分隔符,指定|为列分隔符
    LOAD DATA INFILE
    ‘ftp://gbase:Gbase2016@10.17.5.225//opt/SSB/data/lineorder1.tbl’ INTO TABLE ssbm.lineorder1
    data_format 3
    fields terminated by ‘|’;
    1.6.2 通配符加载
    以文本方式加载位于ftp服务器上的文件*.tbl,默认行分隔符,指定|为列分隔符
    LOAD DATA INFILE
    ‘ftp://gbase:Gbase2016@10.17.5.225//opt/SSB/data/*.tbl’
    INTO TABLE ssbm.lineorder1
    data_format 3
    fields terminated by ‘|’;

1.6.3 日期格式字段加载
文本文件加载,默认行分隔符,指定逗号为列分隔符,指定null value,指定date、time、datetime日期格式,指定最大错误行数
load data infile 'ftp://gbase:gbase@192.168.12.1//home/gbase/1.txt ’
into table test.tmp_abc_0621_test
data_format 3
fields terminated by ‘,’
null_value ‘’
date format ‘%Y-%m-%d’
time format ‘%H:%i:%s’
datetime format ‘%Y-%m-%d %H:%i:%s’
max_bad_records 0;

1.6.4 多个不同类型协议数据文件加载
LOAD DATA INFILE
‘http://gbase:gbase@192.168.12.1/1.txt,
ftp://gbase:gbase@192.168.12.1/1.txt’
INTO TABLE test.tmp_abc_0513_test
DATA_FORMAT 3;
Query OK, 5 rows affected (Elapsed: 00:00:00.25)
Task 288 finished, Loaded 5 records, Skipped 0 records

1.6.5 定长文本数据加载
定长文本加载,指定fields definer,table_fields
load data infile
‘ftp://gbase:Gbase2016@192.168.12.1//home/gbase/1.txt’
into table provag.stg_d_evnt_4g_gprs_voice_12300_20161123
data_format 4
FIELDS definer
‘8,15,6,3,40,14,8,14,14,9,1,17,10,32,10,40,10,10’
TABLE_FIELDS ‘RECORD_NUM,MSISDN,VISIT_POSITION,ROAM_TYPE_CODE,APN_NET_ID,CALL_START_TIME,CALL_DUR,LAST_LINE_DATE_FLOW,NEXT_LINE_DATE_FLOW,TOTAL_FEE,GPRS_NET_TYPE,IMEI,BUSI_CODE,ITEM_IP_ADDRESS,GPRS_BILL_ID,IMS_BILL_ID,TAC_ID,CELL_ID’;
1.6.6 定长文本日期格式加载
load data infile
‘ftp://gbase:Gbase2016@192.168.12.1//home/gbase/load_date.txt’
into table test.tmp_abc_1124_datetime_test
data_format 4
FIELDS length ‘19,10,8’
TABLE_FIELDS ‘create_time,v_date,v_time’;

1.6.7 数据加载默认去除两边空格
load data infile
‘ftp://gbase:Gbase2016@192.168.12.1//home/gbase/load_blank.txt’ into table test.tmp_abc_1124_load_blank_test
data_format 4
FIELDS length ‘7’
TABLE_FIELDS ‘id’;

  1. 数据加载保留两边空格
    load data infile
    ‘ftp://gbase:Gbase2016@192.168.12.1//home/gbase/load_blank.txt’ into table test.tmp_abc_1124_load_blank_test
    data_format 4
    FIELDS length ‘7’
    TABLE_FIELDS ‘id’
    PRESERVE BLANKS;

1.6.8 表列数少于数据列数
通过table_fields 字段指定需要加载的字段 ,字段名以数据文件顺序为准,略过的数据列用 filler 替代。
数据格式 : 1,2
表结构 : create table “tmp_abc_1130_test2” ( “id” int(11) )
测试用例 :
gbase> load data infile ‘ftp://gbase:Gbase2016@192.168.12.1//home/gbase/fill.txt’ into table test.tmp_abc_1130_test2 fields terminated by ‘,’ table_fields ‘filler,id’
-> ;
Query OK, 1 row affected (Elapsed: 00:00:01.70)
Task 340095 finished, Loaded 1 records, Skipped 0 records

gbase> select * from tmp_abc_1130_test2;
±-----+
| id |
±-----+
| 2 |
±-----+
1 row in set (Elapsed: 00:00:00.06)

1.6.9 表列数多于数据列数
通过table_fields字段指定需要加载的字段,指定字段个数与数据列数相同即可加载成功
数据格式 : 1,2
表结构 : create table “tmp_abc_1130_test3” ( “id1” int(11) , “id2” int(11) , “id3” int(11) )
测试用例 :
gbase> load data infile ‘ftp://gbase:Gbase2016@192.168.12.1//home/gbase/fill.txt’ into table test.tmp_abc_1130_test3 fields terminated by ‘,’ table_fields ‘id1,id2’;
Query OK, 1 row affected (Elapsed: 00:00:01.51)
Task 340111 finished, Loaded 1 records, Skipped 0 records

gbase> select * from test.tmp_abc_1130_test3;
±-----±-----±-----+
| id1 | id2 | id3 |
±-----±-----±-----+
| 1 | 2 | NULL |
±-----±-----±-----+
1 row in set (Elapsed: 00:00:00.06)

1.6.10 skip_bad_file跳过错误文件加载
skip_bad_file :
0 : 遇到错误文件中断加载
1 : 跳过错误文件继续加载
默认值是0,表示遇到错误文件中断加载

不设置skip_bad_file,10.17.5.225//opt/SSB/data/part1.tbl不存在,加载报错
gbase> LOAD DATA INFILE ‘ftp://gbase:Gbase2016@10.17.5.225//opt/SSB/data/part.tbl,ftp://gbase:Gbase2016@10.17.5.225//opt/SSB/data/part1.tbl’ INTO TABLE ssbm.part data_format 3 fields terminated by ‘|’;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on ftp://gbase:@10.17.5.225//opt/SSB/data/part1.tbl failed with error - Remote file not found, 550 Could not get file size., File name ftp://gbase:@10.17.5.225//opt/SSB/data/part1.tbl

设置skip_bad_file=1,10.17.5.225//opt/SSB/data/part1.tbl不存在,加载报错
gbase> LOAD DATA INFILE ‘ftp://gbase:Gbase2016@10.17.5.225//opt/SSB/data/part.tbl,ftp://gbase:Gbase2016@10.17.5.225//opt/SSB/data/part1.tbl’ INTO TABLE ssbm.part data_format 3 fields terminated by ‘|’ skip_bad_file 1;
Query OK, 0 rows affected (Elapsed: 00:00:00.98)
Task 262148 finished, Loaded 0 records, Skipped 2000000 records
1.6.11 默认值加载
load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/1.txt’ into table test.tmp_abc_0608_test data_format 3 fields terminated by ‘|’ table_fields ‘id’ set op_time=‘2017-06-08’;

1.6.12 使用CHARACTER SET加载数据文件
load data infile ‘http://192.168.153.32/1.txt’ into table test_8 character set gbk fields terminated by ‘|’;

1.6.13 使用MAX_BAD_RECORDS加载数据文件
load data infile ‘http://192.168.153.32/1.txt’ into table test_2 fields
terminated by ‘|’ max_bad_records 1;
1.7 数据加载常见错误
1.7.1 Login denied uri
测试用例 :
gbase> load data infile ‘ftp://gbase:gbase123@192.168.12.1//home/gbase/*.tbl’ into table test.tmp_abc_1212_test data_format 3;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Expanding wildcard operation failed with error - Login denied uri : ftp://gbase:@192.168.12.1//home/gbase/%2a.tbl.
错误原因 : gbase用户密码错误
1.7.2 Couldn’t connect to server
测试用例 :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/1.txt’ into table test.tmp_abc_1212_test data_format 3;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on ftp://gbase:
@192.168.12.1//home/gbase/1.txt failed with error - Couldn’t connect to server, File name ftp://gbase:
@192.168.12.1//home/gbase/1.txt
报错原因 : ip地址错误或者vsftpd服务没有启动
1.7.3 failed to get table distribution information.
测试用例 :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/1.txt’ into table test.tmp_abc_0621_test data_format 3;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: failed to get table distribution information.
报错原因 : 所涉及加载表不存在
1.7.4 550 Could not get file size.
测试用例 :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/4.txt’ into table test.tmp_abc_1212_test data_format 3;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on ftp://gbase:
@192.168.12.1//home/gbase/4.txt failed with error - 550 Could not get file size., File name ftp://gbase:**@192.168.12.1//home/gbase/4.txt

错误原因 : /home/gbase/4.txt 这个文件不存在
1.7.5 Remote file not found uri
测试用例 :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/*.tbl’ into table test.tmp_abc_1212_test data_format 3;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Expanding wildcard operation failed with error - Remote file not found uri : ftp://gbase:*****@192.168.12.1//home/gbase/%2a.tbl.

错误原因 : /home/gbase/*.tbl 没有匹配到文件,通配符文件不存在
1.7.6 Access denied to remote resource
测试用例 :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1/home/gbase/2.txt’ into table test.tmp_abc_1212_test data_format 3 max_bad_records 0;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on ftp://gbase:@192.168.12.1/home/gbase/2.txt failed with error - Access denied to remote resource, File name ftp://gbase:@192.168.12.1/home/gbase/2.txt

错误原因 : /home/gbase/2.txt路径错误
1.7.7 Too many bad records
测试用例 :
load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/2.txt’
into table test.tmp_abc_1212_test data_format 3 max_bad_records 0;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Task 262162 failed, 172.16.128.12:5050Failed to query in gnode:
DETAIL: (GBA-01-600) Gbase internal error: Task 262162, Too many bad records!

错误原因 : 错误数据行数超过max_bad_records指定值
1.7.8 read operation timeout
测试用例 :
2016-12-15 14:52:47.253 [SQLDISP][ERROR][S:83876][Q:696407]:Query failed, THD(0x4b9f6000) HOST(10.17.6.52:5050->50885) reason: (GBA-01-600) Gbase internal error: I/O operation on ftp://doubass:*********@10.255.219.24//data3/asiainfo/interface/12300/data/s_12300_BAS_04002_20161214_011_00_016.dat failed with error - read operation timeout

错误原因 : 如果填充一个数据块(8M)的时间超过[gbase_loader_read_timeout]参数值,加载任务将报错停止
1.7.9 Timeout was reached
测试用例 :
2016-12-15 15:49:52.221 [SQLDISP][ERROR][S:191527][Q:1487078]:
Query failed, THD(0x429ae000) HOST(10.17.6.95:5050->110938) reason: (GBA-01-600)
Gbase internal error: Task 622072, I/O operation on
ftp://doubass:*********@10.255.219.26//data6/asiainfo/interface/12900/data/a_12900_BAS_01002_20161214_00.verf failed with error - Timeout was reached

错误原因 : ftp服务器端超时
1.7.10 Line length is more than gbase_loader_max_line_length
测试用例:
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/024123_0’ into table test.tmp_abc_1220_test data_format 3;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Task 393223 failed, 172.16.128.12:5050Failed to query in gnode:
DETAIL: (GBA-01-600) Gbase internal error: Line length 8388608 is more than gbase_loader_max_line_length ( 4194304 ) in file ‘ftp://gbase:*****@192.168.12.1//home/gbase/024123_0’

错误原因 : 行长度超过参数gbase_loader_max_line_length值。

1.7.11 validate error
测试用例1 : 字符串加载到数字类型字段
[1]数据内容 :
[root@Node1 gbase]# cat 1.txt
1
2
3
a
[2]表结构 : create table tmp_abc_1212_test(id int);

[3]加载sql :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/1.txt’ into table test.tmp_abc_1212_test data_format 3;
Query OK, 3 rows affected (Elapsed: 00:00:01.32)
Task 393224 finished, Loaded 3 records, Skipped 1 records

[4]存在一条skip数据,查看trc日志 :
[root@Node1 gbase]# ls -lrt /opt/gclustrer/log/gcluster/loader_logs/393224*
-rw-rw---- 1 gbase gbase 146 12月 20 04:43 /opt/gclustrer/log/gcluster/loader_logs/393224_test_tmp_abc_1212_test_n1_192.168.12.1_20161220044343.trc
-rw-rw---- 1 gbase gbase 2 12月 20 04:43 /opt/gclustrer/log/gcluster/loader_logs/393224_test_tmp_abc_1212_test_n1_192.168.12.1_20161220044343.err

[root@Node1 gbase]# cat
/opt/gclustrer/log/gcluster/loader_logs/393224_test_tmp_abc_1212_test_n1_192.168.12.1_20161220044343.trc
file_name | file_offset | record_len | column | reason
ftp://gbase:*****@192.168.12.1//home/gbase/1.txt|6|2|1|validate error

测试用例2 : yyyymmdd日期格式数据加载到date字段
[1]数据内容
[root@Node1 gbase]# cat date.txt
20161212
[2]表结构 : create table tmp_abc_1212_date_test(v_date date);

[3]加载sql :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/date.txt’ into table test.tmp_abc_1220_date_test data_format 3 max_bad_records 0;
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Task 393227 failed, 192.168.12.1:5050Failed to query in gnode:
DETAIL: (GBA-01-600) Gbase internal error: Task 393227, Too many bad records!

[4] 查看trc日志 :
[root@Node2 ~]# cat /opt/gclustrer/log/gcluster/loader_logs/393226_test_tmp_abc_1220_date_test_n1_172.16.128.12_20161220225132.trc
file_name | file_offset | record_len | column | reason
ftp://gbase:*****@192.168.12.1//home/gbase/date.txt|0|9|1|validate error

1.7.12 text parser error
测试用例 : 表列数与文件列数不一致,文件列数多于表列数
[1]数据内容 :
[root@Node1 gbase]# cat 1212.txt
1,2

[2]表结构 : create table tmp_abc_1212_test(id int);

[3]加载sql :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/1212.txt’ into table test.tmp_abc_1212_test data_format 3 fields terminated by ‘,’;
Query OK, 0 rows affected (Elapsed: 00:00:00.63)
Task 393231 finished, Loaded 0 records, Skipped 1 records

[4]存在一条skip数据,查看trc日志 :
[root@Node1 gbase]# ls -lrt /opt/gclustrer/log/gcluster/loader_logs/393231*
-rw-rw---- 1 gbase gbase 152 12月 20 23:40 /opt/gclustrer/log/gcluster/loader_logs/393231_test_tmp_abc_1212_test_n1_172.16.128.12_20161220234049.trc
-rw-rw---- 1 gbase gbase 4 12月 20 23:40 /opt/gclustrer/log/gcluster/loader_logs/393231_test_tmp_abc_1212_test_n1_172.16.128.12_20161220234049.err

[root@Node1 ~]# cat /opt/gclustrer/log/gcluster/loader_logs/393231_test_tmp_abc_1212_test_n1_172.16.128.12_20161220234049.trc
file_name | file_offset | record_len | column | reason
ftp://gbase:*****@192.168.12.1//home/gbase/1212.txt|0|4|2|text parser error

1.7.13 data column size less than defined size
测试用例 : 表列数与文件列数不一致,文件列数少于表列数
[1]数据内容 :
[root@Node1 gbase]# cat 1.txt
1
[2]表结构 : create table tmp_abc_1212_test1(id int,name varchar(10));

[3]加载sql :
gbase> load data infile ‘ftp://gbase:gbase@192.168.12.1//home/gbase/1.txt’ into table test.tmp_abc_1212_test1 data_format 3;
Query OK, 0 rows affected (Elapsed: 00:00:00.38)
Task 393233 finished, Loaded 0 records, Skipped 4 records

[4]存在4条skip数据
[root@Node1 gbase]# ls -lrt /opt/gclustrer/log/gcluster/loader_logs/393233*
-rw-rw---- 1 gbase gbase 459 12月 20 23:47 /opt/gclustrer/log/gcluster/loader_logs/393233_test_tmp_abc_1212_test1_n1_172.16.128.12_20161220234703.trc
-rw-rw---- 1 gbase gbase 8 12月 20 23:47 /opt/gclustrer/log/gcluster/loader_logs/393233_test_tmp_abc_1212_test1_n1_172.16.128.12_20161220234703.err

[root@Node1 ~]# cat
/opt/gclustrer/log/gcluster/loader_logs/393233_test_tmp_abc_1212_test1_n1_172.16.128.12_20161220234703.trc
file_name | file_offset | record_len | column | reason
ftp://gbase:*****@192.168.12.1//home/gbase/1.txt|0|2|1|data column size less than defined size

上一篇:Gbase数据库备份与还原


下一篇:java23种设计模式(五)--组合模式