使用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格式,避免了寻找分隔符的步骤,不再因错误的分隔符导致数据无法入库。