云原生数据仓库AnalyticDB PostgreSQL版支持通过OSS外部表(即gpossext功能),将数据并行导出到阿里云对象存储OSS,并支持通过GZIP进行OSS外部表文件压缩,大量节省存储空间及成本。
功能介绍
目前gpossext支持读写TEXT、CSV格式的文件以及GZIP压缩格式的TEXT、CSV文件。
gpossext架构图如下。

TEXT和CSV格式说明
下列几个参数可以在外表DDL参数中指定,用于规定读写OSS的文件格式:
- TEXT和CSV行分割符号是
\n
,也就是换行符。 - DELIMITER用于定义列的分割符:
- 当用户数据中包括DELIMITER时,则需要和QUOTE参数一同使用。
- 推荐的列分割符有
,
、\t
、|
或一些不常出现的字符。
- QUOTE用于包裹有特殊字符的用户数据(以列为单位):
- 包含有特殊字符的字符串会被QUOTE包裹,用于区分用户数据和控制字符。
- 如果不必要,例如整数,基于优化效率的考虑,不必使用QUOTE包裹数据。
- QUOTE不能和DELIMITER相同,默认QUOTE是双引号。
- 当用户数据中包含了QUOTE字符,则需要使用转义字符ESCAPE加以区分。
- ESCAPE用于特殊字符转义:
- 转义字符出现在需要转义的特殊字符前,表示它不是一个特殊字符。
- ESCAPE默认和QUOTE相同,为双引号
""
。 - 也支持设置成
\
(MySQL默认的转义字符)或别的字符。
控制字符和格式 | TEXT | CSV |
---|---|---|
DELIMITER(列分割符) | \t(Tab) | , (Comma) |
QUOTE(摘引) | " (Double-Quote) | "(Double-Quote) |
ESCAPE(转义) | (不适用) | 与QUOTE相同 |
NULL(空值) | \N(Backslash-N) | (无引号的空字符串) |
说明 所有的控制字符都必须是单字节字符。
注意事项
- 创建和使用外部表的语法,除了location相关参数,其余参数和Greenplum的使用方式相同。
- 数据导入导出的性能和AnalyticDB PostgreSQL的资源(CPU、I/O、内存、网络等)有关,也和OSS相关。为了获取最优的导入导出性能,建议在创建表时,使用列式存储加压缩功能。例如,指定子句
“WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576)
,详细信息,请参见 Greenplum Database 表创建语法官方文档。 - 为了保证数据导入导出的性能,请保证OSS与AnalyticDB PostgreSQL在同一地域下。
操作步骤
操作示例
本文以源表example为例,介绍将源表example的数据导出到OSS。
执行如下查询计划,可以看到Segment节点直接将本地数据导出到OSS,没有进行数据重分布。
EXPLAIN INSERT INTO ossexample_exp SELECT * FROM example;
返回信息如下:
QUERY PLAN
---------------------------------------------------------------
Insert (slice0; segments: 3) (rows=1 width=92)
-> Seq Scan on example (cost=0.00..0.00 rows=1 width=92)
(2 rows)
SDK错误处理
当导入或导出操作出错时,错误日志可能会出现如下信息:
- code:出错请求的HTTP状态码。
- error_code:OSS的错误码。
- error_msg:OSS的错误信息。
- req_id:标识该次请求的UUID。当您无法解决问题时,可以凭req_id来请求OSS开发工程师的帮助。
具体信息,请参见OSS API 错误响应,超时相关的错误可以使用oss_ext相关参数处理。