2.1 导入导出工具说明
2.1.1 使用Gpfdist服务
GPFDIST是emc工程师推荐的最快的导入导出工具。导入导出数据的时候gpfdist是同时并行的与各个节点互动,效率很高(十分高!如果忽略掉GP的一些其他问题,简直完美)。
在我们的实际试验中使用一个gpfdist加上千兆网卡装载4G的gz文件(压缩前为36G)的文件约要170秒;然后再导出这个数据耗时约580秒。如果使用四个gpfdist,在千兆网卡的支持下速度大约可以提高2.5-3倍。
概述:
gpfdist [-d directory] [-p http_port] [-l log_file] [-t timeout] [-m max_length]
-d:
gpfdist所指向的路径,在这个路径下gpfdist才能读取文件或写入文件;
如果没有指定这个东西,gpfdist会默认为指向当前路径;
注意:启动gpfdist服务的用户要对这个路径有读写权限。
-l:
指定日志文件的路径,记录gpfdist的运行日志,其实是个简单日志(包含一些启动、关闭、找不到文件之类的无聊东西)。
-p:
指定gpfdist服务端口,这个值默认是8080,前置机一般使用9000以上的端口
-t:
为gp创建一个到gpfdist的连接设置一个超时时间;
默认是5秒,允许设置值范围为2-30秒。一般情况不需对这个做设定。
-m:
允许文本文件行的最大长度(以bytes为单位)。默认值为32768.
取值范围为: 32K -- 1MB,目前前置机的项目都只是使用默认值。
-?
获得帮助
--version
查看版本
2.1.2 使用Copy命令
COPY命令是使用比较灵活的导入导出工具,这个工具是postgresql本身带的工具实现表和文件之间拷贝数据,EMC公司对其进行了加工,使其在greenplum的集群环境下可以使用。目前在GP4.1及之前的版本中copy的是逐个节点(逐个postgresql )来导入导出的,所以在效率上比gpfdist要低;
但是copy命令可以很简洁完成一个导入导出操作,使得它也具有十分光辉的魅力。
由于这个工具是直接从postgresql发展出来的完全可以按照postgresql的方式使用,因此在网络上关于copy的资料十分丰富,所以很多开发人员都万分乐意的使用之。
概述(来源于万能的帮助文档):
COPY tablename [ ( column [, ...] ) ]
FROM { 'filename' | STDIN }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE NOT NULL column [, ...] ]
COPY { tablename [ ( column [, ...] ) ] | ( query ) }
TO { 'filename' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ HEADER ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE QUOTE column [, ...] ]
参数说明:
1、tablename
现存表的名字(可以有模式修饰)
2、column
可选的待拷贝字段列表。如果没有声明字段列表,那么将使用所有字段。
3、query
一个必须用圆括弧包围的 SELECT 或 VALUES 命令,其结果将被拷贝。
4、filename
输入或输出文件的绝对路径。Windows 用户可能需要使用 E'' 字符串和双反斜线作为路径分割符。
5、STDIN
声明输入是来自客户端应用
6、STDOUT
声明输入前往客户端应用
7、BINARY
使用二进制格式存储和读取,而不是以文本的方式。在二进制模式下,不能声明 DELIMITER, NULL, CSV 选项。
8、OIDS
声明为每行拷贝内部对象标识(OID)。如果为一个 query 拷贝或者没有 OID 的表声明了 OIDS 选项,则抛出一个错误。
9、delimiter
在文件中分隔各个字段的单个字符。在文本模式下,缺省是水平制表符,在 CSV 模式下是一个逗号。
10、null string
这是一个代表 NULL 值的字符串。在文本模式下缺省是 \N ,在 CSV 模式下是一个没有引号的 NULL 。如果你不想区分 NULL 和空字符串,那么即使在文本模式下你可能也会使用一个空字符串。
【注意】在使用 COPY FROM 的时候,任何匹配这个字符串的字符串将被存储为 NULL 值,所以你应该确保你用的字符串和 COPY TO 相同。
11、CSV
打开逗号分隔变量(CSV)模式
12、HEADER
声明文件包含一个标题头行,包含文件中每个字段的名字。输出时,第一行包含表的字段名;输入时,第一行被忽略。
13、quote
声明 CSV 模式里的引号字符。缺省是双引号。
14、escape
声明在 CSV 模式下应该出现在数据里 QUOTE 字符值前面的字符。缺省是 QUOTE 值(通常是双引号)。
15、FORCE QUOTE
在 CSV COPY TO 模式下,强制在每个声明的字段周围对所有非 NULL 值都使用引号包围。NULL 输出从不会被引号包围。
16、FORCE NOT NULL
在 CSV COPY FROM 模式下,把声明的每个字段都当作它们有引号包围来处理,因此就没有 NULL 值。对于在 CSV 模式下的缺省空字符串(''),这样导致一个缺失的数值当作一个零长字符串输入。