使用 aws_s3.query_export_to_s3 函数导出查询数据 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 aws_s3.query_export_to_s3 函数导出查询数据

通过调用 aws_s3.query_export_to_s3 函数将 PostgreSQL 数据导出到 Amazon S3。

先决条件

在使用 aws_s3.query_export_to_s3 函数之前,请确保完成以下先决条件:

以下示例使用一个称作 sample_table 的数据库表。这些示例将数据导出到称为 amzn-s3-demo-bucket 的存储桶中。使用以下 SQL 语句在 psql 中创建示例表和数据。

psql=> CREATE TABLE sample_table (bid bigint PRIMARY KEY, name varchar(80)); psql=> INSERT INTO sample_table (bid,name) VALUES (1, 'Monday'), (2,'Tuesday'), (3, 'Wednesday');

调用 aws_s3.query_export_to_s3

下面说明了调用 aws_s3.query_export_to_s3 函数的基本方法。

这些示例使用变量 s3_uri_1 确定包含用于标识 Amazon S3 文件的信息的结构。使用 aws_commons.create_s3_uri 函数可创建结构。

psql=> SELECT aws_commons.create_s3_uri( 'amzn-s3-demo-bucket', 'sample-filepath', 'us-west-2' ) AS s3_uri_1 \gset

尽管以下两个 aws_s3.query_export_to_s3 函数调用的参数不同,但这些示例的结果是相同的。sample_table 表的所有行都将导出到称为 amzn-s3-demo-bucket 的存储桶中。

psql=> SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', :'s3_uri_1'); psql=> SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', :'s3_uri_1', options :='format text');

参数如下所述:

  • 'SELECT * FROM sample_table' – 第一个参数是包含 SQL 查询的必需文本字符串。PostgreSQL 引擎将运行此查询。查询的结果将复制到其他参数中标识的 S3 存储桶。

  • :'s3_uri_1' – 此参数是标识 Amazon S3 文件的结构。此示例使用变量来标识先前创建的结构。相反,您可通过内联方式在 aws_commons.create_s3_uri 函数调用中包含 aws_s3.query_export_to_s3 函数调用来创建结构,如下所示。

    SELECT * from aws_s3.query_export_to_s3('select * from sample_table', aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'sample-filepath', 'us-west-2') );
  • options :='format text'options 参数是包含 PostgreSQL COPY 参数的可选文本字符串。复制过程使用 PostgreSQL COPY 命令的参数和格式。

如果指定的文件在 Amazon S3 存储桶中不存在,则会创建该文件。如果该文件已存在,则将覆盖该文件。以下是用于访问 Amazon S3 中的导出数据的语法。

s3-region://bucket-name[/path-prefix]/file-prefix

较大的导出将存储在多个文件中,每个文件的最大大小约为 6 GB。其他文件名具有相同的文件前缀,但追加了 _partXXXX 表示 2,然后表示 3,依此类推。例如,假设您指定用于存储数据文件的路径,如下所示。

s3-us-west-2://amzn-s3-demo-bucket/my-prefix

如果导出必须创建三个数据文件,则 Amazon S3 存储桶将包含以下数据文件。

s3-us-west-2://amzn-s3-demo-bucket/my-prefix s3-us-west-2://amzn-s3-demo-bucket/my-prefix_part2 s3-us-west-2://amzn-s3-demo-bucket/my-prefix_part3

有关此函数的完整参考以及其他调用方法,请参阅aws_s3.query_export_to_s3。有关访问 Amazon S3 中的文件的更多信息,请参阅 Amazon Simple Storage Service 用户指南中的查看对象

导出到使用自定义分隔符的 CSV 文件

以下示例说明如何调用 aws_s3.query_export_to_s3 函数以将数据导出到使用自定义分隔符的文件。此示例使用 PostgreSQL COPY 命令的参数来指定逗号分隔值 (CSV) 格式和冒号 (:) 分隔符。

SELECT * from aws_s3.query_export_to_s3('select * from basic_test', :'s3_uri_1', options :='format csv, delimiter $$:$$');

导出到具有编码的二进制文件

以下示例说明如何调用 aws_s3.query_export_to_s3 函数以将数据导出到具有 Windows-1253 编码的二进制文件。

SELECT * from aws_s3.query_export_to_s3('select * from basic_test', :'s3_uri_1', options :='format binary, encoding WIN1253');