将数据从 Amazon S3 导入到 RDS for PostgreSQL 数据库实例 - Amazon Relational Database Service

将数据从 Amazon S3 导入到 RDS for PostgreSQL 数据库实例

您可以使用 aws_S3 扩展的 table_import_from_s3 函数从 Amazon S3 桶导入数据。有关参考信息,请参阅aws_s3.table_import_from_s3

注意

以下示例使用 IAM 角色方法以允许访问 Amazon S3 桶。因此,aws_s3.table_import_from_s3 函数调用不包括凭据参数。

下面显示典型示例。

postgres=> SELECT aws_s3.table_import_from_s3( 't1', '', '(format csv)', :'s3_uri' );

下面是参数:

  • t1 – 将数据复制到的 PostgreSQL 数据库实例中的表的名称。

  • '' – 数据库表中的列的可选列表。您可以使用此参数来指示哪些 S3 数据列进入哪些表列中。如果未指定任何列,则会将所有列复制到表中。有关使用列列表的示例,请参阅 导入使用自定义分隔符的 Amazon S3 文件

  • (format csv) – PostgreSQL COPY 参数。复制过程使用 PostgreSQL COPY 命令的参数和格式以导入数据。格式选择包括本例中所示的逗号分隔值(CSV),以及文本和二进制。原定设置为文本。

  • s3_uri – 包含标识 Amazon S3 文件的信息的结构。有关使用 aws_commons.create_s3_uri 函数创建 s3_uri 结构的示例,请参阅 从 Amazon S3 数据导入数据概述

有关此函数的更多信息,请参阅 aws_s3.table_import_from_s3

aws_s3.table_import_from_s3 函数返回文本。要指定要从 Amazon S3 存储桶中导入的其他类型的文件,请参阅以下示例之一。

注意

导入 0 字节文件将导致错误。

导入使用自定义分隔符的 Amazon S3 文件

以下示例说明了如何导入使用自定义分隔符的文件。它还说明如何使用 column_list 函数的 aws_s3.table_import_from_s3 参数来控制将数据放置在数据库表中的哪个位置。

在此示例中,假定将以下信息组织到 Amazon S3 文件中的竖线分隔列中。

1|foo1|bar1|elephant1 2|foo2|bar2|elephant2 3|foo3|bar3|elephant3 4|foo4|bar4|elephant4 ...
导入使用自定义分隔符的文件
  1. 在数据库中为导入的数据创建一个表。

    postgres=> CREATE TABLE test (a text, b text, c text, d text, e text);
  2. 使用以下形式的 aws_s3.table_import_from_s3 函数从 Amazon S3 文件导入数据。

    您可以在 aws_commons.create_s3_uri 函数调用中以内联方式包括 aws_s3.table_import_from_s3 函数调用来指定文件。

    postgres=> SELECT aws_s3.table_import_from_s3( 'test', 'a,b,d,e', 'DELIMITER ''|''', aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'pipeDelimitedSampleFile', 'us-east-2') );

数据现在位于表的以下列中。

postgres=> SELECT * FROM test; a | b | c | d | e ---+------+---+---+------+----------- 1 | foo1 | | bar1 | elephant1 2 | foo2 | | bar2 | elephant2 3 | foo3 | | bar3 | elephant3 4 | foo4 | | bar4 | elephant4

导入 Amazon S3 压缩 (gzip) 文件

以下示例说明如何从 Amazon S3 导入使用 gzip 压缩的文件。导入的文件需要具有以下 Amazon S3 元数据:

  • 键:Content-Encoding

  • 值:gzip

如果使用 AWS Management Console 上传文件,则元数据通常由系统应用。有关使用 AWS Management Console、AWS CLI 或 API 将文件上传到 Amazon S3 的信息,请参阅《Amazon Simple Storage Service 用户指南》中的上传对象

有关 Amazon S3 元数据的更多信息以及有关系统提供的元数据的详细信息,请参阅《Amazon Simple Storage Service 用户指南》中的在 Amazon S3 控制台中编辑对象元数据

将 gzip 文件导入到 RDS for PostgreSQL 数据库实例,如下所示。

postgres=> CREATE TABLE test_gzip(id int, a text, b text, c text, d text); postgres=> SELECT aws_s3.table_import_from_s3( 'test_gzip', '', '(format csv)', 'amzn-s3-demo-bucket', 'test-data.gz', 'us-east-2' );

导入编码的 Amazon S3 文件

以下示例说明如何从 Amazon S3 导入具有 Windows-1252 编码的文件。

postgres=> SELECT aws_s3.table_import_from_s3( 'test_table', '', 'encoding ''WIN1252''', aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'SampleFile', 'us-east-2') );