AnalyticDB PostgreSQL版支持通过OSS Foreign Table(简称OSS FDW)导出数据到OSS。
支持的文件格式
OSS FDW目前仅支持导出如下格式的数据文件:
- 支持导出CSV、TEXT格式的非压缩文本文件。
- 支持导出CSV、TEXT格式的GZIP压缩文件。
- 支持导出ORC格式的二进制文件。
关于ORC与AnalyticDB PostgreSQL版的数据类型的区别,请参见ORC文件数据类型对照表。
创建OSS Server和创建OSS User Mapping
使用OSS FDW前您需要提前创建OSS Server以及OSS User Mapping。
- 创建OSS Server的具体方法,请参见创建OSS Server。
- 创建OSS User Mappin的具体方法,请参见创建OSS User Mapping。
创建OSS Foreign Table
您需要创建OSS FDW用于导出数据到OSS。
语法
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
column_name data_type [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
[, ... ]
] )
SERVER server_name
[ OPTIONS ( option 'value' [, ... ] ) ]
参数选项
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
table_name | 字符串 | 是 | OSS FDW名称。 |
column_name | 字符串 | 是 | 列名。 |
data_type | 字符串 | 是 | 该列的数据类型。 |
OPTIONS参数中通用选项请参见下表:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
prefix | 字符串 | 是,二选一 | 指定数据文件对应路径名的前缀,不支持正则表达式,仅是匹配前缀。 如果指定prefix的值为osstest/adbpg/ossfdw,则表示的导出路径为osstest/adbpg/,导出文件的名称都以ossfdw开头。 |
dir | 字符串 | OSS中的虚拟文件夹路径。 文件夹路径需要以 | |
bucket | 字符串 | 否 | 数据文件所属的Bucket的名称。 说明
|
format | 字符串 | 是 | 文件格式,取值范围如下:
|
filetype | 字符串 | 否 | 文件类型,取值范围如下:
|
fragment_size | 数值 | 否 | 导出到OSS的文件的大小。单位为MB,默认值为256。当导出到OSS的文件大小超过该值时,系统会切分到新的文件,向新文件中继续写入数据。 说明
|
OPTIONS参数中CSV和TEXT格式特有选项请参见下表:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
gzip_level | 数值 | 否 | 设置CSV或TEXT格式文件的GZIP压缩级别。取值范围为1~9,默认值为1。 说明
|
force_quote_all | 布尔型 | 否 | 指定导出CSV数据时,是否将所有字段都强制被双引号("")引用。取值如下:
说明 仅对CSV格式文件生效。 |
OPTIONS参数中ORC格式特有选项请参见下表:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
orc_stripe_size | 数值 | 否 | 指定导出的ORC文件中每个Stripe的大小。单位为MB,默认值为64。 |
更多参数介绍,请参见创建OSS FDW。
导出文件命名规则
导出时,多个计算节点会并行将数据写出到相同的目录下,OSS外表导出文件名格式如下:
{tablename | prefix } _{timestamp}_{random_key}_{seg}{segment_id}_{fileno}.{ext}[.gz]
参数说明如下:
参数 | 说明 |
---|---|
{tablename | prefix } | 导出前缀。指定路径的方式不同,前缀信息不同:
|
{timestamp} | 导出时的时间戳,格式如YYYYMMDDHH24MISS 。 |
{random_key} | 随机键值。 |
{seg}{segment_id} | 由“seg”和“Segment节点编号”组成。例如“seg1”表明该文件由Segment 1导出。 |
{fileno} | 文件段序号,从0开始。 |
{ext} | 导出的文件格式。
|
[.gz] | 表示导出文件为GZIP压缩文件。 |
示例如下:
- 导出文件格式为CSV,并进行GZIP压缩,使用dir方式指定路径:
CREATE FOREIGN TABLE fdw_t_out_1(a int) SERVER oss_serv OPTIONS (format 'csv', filetype 'gzip', dir 'test/');
文件名称如下:
fdw_t_out_1_20200805110207_1718599661_seg-1_0.csv.gz
- 导出文件格式为ORC,使用prefix方式指定前缀路径:
CREATE FOREIGN TABLE fdw_t_out_2(a int) SERVER oss_serv OPTIONS (format 'orc', prefix 'test/my_orc_test');
文件名称如下:
my_orc_test_20200924153043_1737154096_seg0_0.orc
操作示例
- 创建一个OSS FDW,文件格式为CSV,导出目录为tt_csv。
CREATE FOREIGN TABLE foreign_x (i int, j int) SERVER oss_serv OPTIONS (format 'csv', dir 'tt_csv/');
- 使用INSERT INTO语句将本地数据导出到OSS。
INSERT INTO foreign_x SELECT * FROM local_x;