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 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中的虚拟文件夹路径。

文件夹路径需要以/结尾,例如test/test/

bucket 字符串 数据文件所属的Bucket的名称。
说明
  • 如果创建OSS Server时指定了Bucket,该参数可以不填。
  • 如果OSS Server和OSS FDW中均指定了Bucket,则OSS FDW中的Bucket生效。
format 字符串 文件格式,取值范围如下:
  • csv
  • text
  • orc
filetype 字符串 文件类型,取值范围如下:
  • plain(默认):按字节二进制读取,不做额外处理。
  • gzip:读取原始二进制数据并使用GZIP解压缩。
    说明 仅支持CSV和TEXT格式的文件。
fragment_size 数值 导出到OSS的文件的大小。单位为MB,默认值为256。当导出到OSS的文件大小超过该值时,系统会切分到新的文件,向新文件中继续写入数据。
说明
  • 表中同一行记录在导出时不会跨文件存储。
  • 实际导出文件的大小可能略大于该参数的设定。

OPTIONS参数中CSV和TEXT格式特有选项请参见下表:

参数 类型 是否必填 说明
gzip_level 数值 设置CSV或TEXT格式文件的GZIP压缩级别。取值范围为1~9,默认值为1。
说明
  • 仅通用参数filetype为gzip时,gzip_level参数生效。
  • 压缩级别越高,导出的文件大小越小,但导出耗时也更长。
  • 经测试,压缩级别越大,文件大小下降不明显,但导出耗时明显增加。无特殊需求下,推荐使用默认值。
force_quote_all 布尔型 指定导出CSV数据时,是否将所有字段都强制被双引号("")引用。取值如下:
  • true:强制引用双引号。
  • false:不强制引用双引号。
说明 仅对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 } 导出前缀。指定路径的方式不同,前缀信息不同:
  • prefix方式:以prefix指定的信息为前缀。
  • dir方式:以OSS外表名称为默认前缀。
{timestamp} 导出时的时间戳,格式如YYYYMMDDHH24MISS
{random_key} 随机键值。
{seg}{segment_id} 由“seg”和“Segment节点编号”组成。例如“seg1”表明该文件由Segment 1导出。
{fileno} 文件段序号,从0开始。
{ext} 导出的文件格式。
  • CSV文件格式:显示为.csv
  • TEXT文件格式:显示为.txt
  • ORC文件格式:显示为.orc
[.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

操作示例

  1. 创建一个OSS FDW,文件格式为CSV,导出目录为tt_csv
    CREATE FOREIGN TABLE foreign_x (i int, j int)
    SERVER oss_serv
    OPTIONS (format 'csv', dir 'tt_csv/');
  2. 使用INSERT INTO语句将本地数据导出到OSS。
    INSERT INTO foreign_x SELECT * FROM local_x;

相关文档