南大通用GBase 8a集群导出数据到文件,支持ftp,sftp,hadoop等

GBase 8a数据库集群,通过LOAD方式从各种数据源加载到数据库,同时也可以从数据库导出数据文件到各种数据源上。通过select into outfile ,并指定本地或者ftp, sftp,hadoop等数据源,将数据导出成文件。本文提供语法和样例。

作用

从集群导出表数据到本地文件。详细参数解释,请看SQL参考手册的rmt:select into outfile部分。

使用方法

select * from myTable into outfile …
rmt: select * from myTable into outfile …

第一个是导出到集群服务器的磁盘上,如果连接的管理节点也是计算节点,则数据文件在连接服务器上,否则数据会随机出现在一个数据节点上。可以用任何开发接口发起SQL。

带rmt的是导出到gccli客户端的磁盘上。必须通过gccli的命令行客户端调用。

建议都用rmt方式导出数据到本地,而不是导出到服务器上。

使用样例

rmt:select * from ac08 
into  outfile '/opt/gbout2load2/data/20141004160540_hnsi_his3_export/ac08.txt' 
fields 
  terminated by ',' 
  ENCLOSED BY '"' 

如上是字段用逗号分隔,字符串包围符是双引号,行分隔符是默认的\n。

rmt:select * from ac08 
into outfile '/opt/gbout2load2/data/20141004160540_hnsi_his3_export/ac08.txt' 
fields 
  terminated by x'06' 
  ENCLOSED BY x'07' 
  lines terminated by x'08'

如上是全部自定义,字段分隔符是16进制的0x06, 包围符是0x07,行分隔符是0x08。

rmt:select * from t1 limit 10 
into outfile '/home/gbase/t1.txt_10row' 
fields 
  terminated by '\xff' 
  enclosed by '\xfe' 
  lines terminated by '\xfd';

换一个16进制写法,全部用不可见字符。默认的null输出为\N。 也可以用null_value指定。

执行效果

gbase> select * from i;
+------+------+
| id   | c    |
+------+------+
| NULL | NULL |
|    1 | A    |
| NULL | B    |
|    3 | NULL |
|    4 | null |
+------+------+
rmt:select * from i into outfile '/home/gbase/i.txt' fields terminated by ',' enclosed by '"'
[root@localhost gbase]# cat i.txt
\N,\N
"1","A"
\N,"B"
"3",\N
"4","null"
rmt:select * from i into outfile '/home/gbase/i.txt.1' fields terminated by ',' enclosed by '"' null_value 'A_NULL_VALUE';
[root@localhost gbase]# cat i.txt.1 
"A_NULL_VALUE","A_NULL_VALUE"
"1","A"
"A_NULL_VALUE","B"
"3","A_NULL_VALUE"
"4","null"

本用例执行的SQL的常用参数解释如下:
sql本身可以是任何可以执行的查询sql,不限定于必须是整表导出,比如可以导出一多表join后group的结果集。
outfile 是本地文件名,请确认其目录存在且当前执行命令的用户有写权限。且该文件不能已经存在,尚不支持强制覆盖写的功能。

如果导出到本地文件(非rmt) ,则必须是绝对目录,不能是相对目录。rmt导出可以。

fileds部分包含多个参数
terminated by 表示多个字段间的分隔符,如果用常用的’,’ 则一定要确认数据里面没有包含这个逗号。可以指定多个字符,包括不可见字符。
enclosed by 指字符串字段的包围符。
line terminated by 是行分隔符,默认是\n。可以指定多个字符,包括不可见字符。

该语句在shell里结合命令行客户端使用,比如

gccli -h10.12.21.7 -ugbase -pxxxxxxxxxxxxx -Dhnsi_his3 -e "rmt:select * from ac08 into outfile '/opt/gbout2load2/data/20141004160540_hnsi_his3_export/ac08.txt' fields terminated by x'06' ENCLOSED BY x'07' lines terminated by x'08'"

加载LOAD入库的方案,请参考

GBase 8a集群86版本加载相关参数

如需帮助,请访问官方论坛 官方论坛

导出样例

sftp 导出

select * from t1 into outfile 'sftp://gbase:gbase@192.168.174.61/home/gbase/123.txt' writemode by overwrites;

hadoop导出

select * from tt1 into outfile 'hdp://hadoop@10.0.2.201/test/1_2.txt';

ftp导出

请注意ftp和sftp的路径差别。在ftp里是存在主目录的,所以直接写主目录下的路径或文件即可。 而sftp里是必须写完整路径的。

select * from t1 into outfile 'ftp://gbase:gbase@192.168.174.61/123.txt' writemode by overwrites;

如果ftp的服务器端允许更改主目录,则必须用绝对路径的写法,两个左斜杠

select * from t1 into outfile 'ftp://gbase:gbase@192.168.174.61//opt/data/123.txt' writemode by overwrites;

南大通用GBase 8a集群导出数据到文件,支持ftp,sftp,hadoop等》有1条评论

评论已关闭。