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

GBase 8a 加载时,要求数据和表结构匹配。但某些情况下,会出现数据和表无法完全匹配的情况。GBase数据库支持人工指定匹配策略的方案,以数据为主,配置TABLE_FIELDS参数, 用filler填充无效的数据,来达到顺利加载的目的。

1、数据和字段顺序不同

这种是非常常见的情况,如果当前数据要加载,指定对应的列名(不一定和表列名顺序一致。

比如表里字段顺序是a,b,c, 而数据顺序对应的是c,b,a,则可以在table_fileds里指定顺序即可,table_fields='c,b,a'

2、缺少部分列的数据

数据里不包含某些列的数据,那么在table_fields里就不要写这些列就行了。

3、数据多了不需要的列

对于数据加载过程中,数据文件中不需要加载的字段,如果表定义中有 该字段,可以使用 table_fields 参数中的 filler 关键字将数据忽略掉,填充为 NULL;如果表定义中没有该字段,可以在 table_fields 参数中添加表中不存 在的列名,该字段数据加载时即被忽略。

该列数据无需加载,随便写个不存在列名就行,如有多个,不能重复。 如果写了存在的列名,则必须后面加上filler占位符。

比如数据是,a,b,c,d,e。 而我们的表里,只希望加载a,c. 那么写成

table_fields='a,noload_1,c,noload_2,noload_3'
或者
table_fields='a,b filler,c,d filler,e filler'

即可。表示只加载a,c两列数据,其余的列filler纯占位,不参与加载。

总之,以数据为主,如果数据比表的列少了的, 则在table_fields里不要写这些列,如果多了不需要加载,则用filler 占位。

参考

GBase 8a 集群加载数据LOAD的方法