将数据从 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
...
导入使用自定义分隔符的文件
-
在数据库中为导入的数据创建一个表。
postgres=>
CREATE TABLE test (a text, b text, c text, d text, e text); -
使用以下形式的 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
如果使用 Amazon Web Services Management Console 上传文件,则元数据通常由系统应用。有关使用 Amazon Web Services Management Console、Amazon 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')
);