GBase 8a如何确保导出的表数据一定能导入

使用GBase 8a集群时,经常遇到个很简单的需求,将一个表的数据全部导出成文件后,如何确保能全部正确的导入。导入表可能是重建的同一个表,本集群的另一个表,或者另一套集群的表。本文提供一个可行的方案来解决这个需求。

导出后再导入的难点

用户表的数据可能包含任何字符,可见的,不可见的,二进制的。如果导出成普通的文本文件,用传统的列分隔符,包围符,行分隔符模式,很难找到一套通用的规则。

所以,必须用非文本的专用格式来保存,该格式必须忽视分隔符,包围符等。

GBase 8a 的方案

GBase 8a从V95版本开始,支持ORC格式(Optimized Row Columnar)的导出和导入。ORC文件格式是一种Hadoop生态圈中的列式存储格式。

另外,parquest也是新版95支持的,本文就不再重复编写。导出时文件名以.parquest结尾,导入时指定。

导出成ORC格式

最简单的导出语句

select * from torc into outfile '/home/gbase/torc.orc';

支持sftp,ftp,hdfs等方式导出,比如

select * from torc into outfile 'sftp://gbase:gbase@192.168.2.101/home/gbase/torc.orc';

其它支持的参数有

outfilemode by、writemode by、filecount、filesize、character set。详情看标准LOAD语法。

不再需要,写了也被忽略的参数有

  • 数据里也有换行符 having lines separator
  • 字段分割符 fields terminated by
  • 字段包围符 fields enclosed by
  • 行分隔符 lines terminated by
  • 字段长度 length 在使用定长模式加载时,用于设定字段长度的参数
  • 加载最小粒度 min_chunk_size 本次加载任务中数据分块的最小粒度,默认64M

从ORC格式导入

最简单的导入ORC的SQL语句

load data infile 'file:///home/gbase/torc.orc/torc.orc' into table torc_new data_format orc 

其中data_format orc 关键字表示该文件是ORC格式。

其它常见的配套参数是日期格式,比如含有微秒的。

load data infile 'file:///home/gbase/torc.orc/torc.orc' into table torc_new data_format orc datetime format '%Y-%m-%d %H:%i:%s.%f'

其它的参数,与普通LOAD一致。

总结

通过标准的ORC格式或Parquest格式,避免了寻找分隔符的步骤,不再因错误的分隔符导致数据无法入库。