使用 COPY 命令从 Amazon S3 中加载 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 COPY 命令从 Amazon S3 中加载

使用 COPY 命令从 Amazon S3 上的数据文件并行加载表。您可以使用 Amazon S3 对象前缀或清单文件指定要加载的文件。

使用前缀指定要加载的文件的语法如下所示:

copy <table_name> from 's3://<bucket_name>/<object_prefix>' authorization;

清单文件是 JSON 格式的文件,该文件会列出要加载的数据文件。使用清单文件指定要加载的文件的语法如下所示:

copy <table_name> from 's3://<bucket_name>/<manifest_file>' authorization manifest;

数据库中必须已存在要加载的表。有关创建表的信息,请参阅 SQL 参考中的CREATE TABLE

authorization 的值为您的集群提供访问 Amazon S3 对象所需的 Amazon 授权。有关所需权限的信息,请参阅COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 权限。进行身份验证的首选方法是为具有必要权限的 IAM 角色指定 IAM_ROLE 参数并提供 Amazon 资源名称(ARN)。有关更多信息,请参阅 基于角色的访问控制

要使用 IAM_ROLE 参数进行身份验证,请替换 <aws-account-id><role-name>,如以下语法中所示。

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

以下示例使用 IAM 角色进行身份验证。

copy customer from 's3://mybucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

有关其他授权选项的更多信息,请参阅授权参数

如果您要验证您的数据而不实际加载表,请对 COPY 命令使用 NOLOAD 选项。

以下示例展示了一个名为 venue.txt 的文件中用竖线分隔的数据的前几行。

1|Toyota Park|Bridgeview|IL|0 2|Columbus Crew Stadium|Columbus|OH|0 3|RFK Stadium|Washington|DC|0

在将文件上载到 Amazon S3 之前,将文件拆分成多个文件,以便 COPY 命令使用并行处理来加载它。文件数应为您的集群中的切片数的倍数。拆分您的加载数据文件,使文件大小大约相等,压缩后的文件大小介于 1 MB 和 1 GB 之间。有关更多信息,请参阅 从压缩和未压缩文件中加载数据

例如,venue.txt 文件可拆分成四个文件,如下所示:

venue.txt.1 venue.txt.2 venue.txt.3 venue.txt.4

以下 COPY 命令将使用 Amazon S3 桶 mybucket 中带有前缀“venue”的数据文件中用竖线分隔的数据加载 VENUE 表。

注意

Amazon S3 桶 mybucket 在以下示例中不存在。有关使用现有 Amazon S3 桶中的实际数据的示例 COPY 命令,请参阅加载示例数据

copy venue from 's3://mybucket/venue' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|';

如果带有键前缀“venue”的 Amazon S3 对象不存在,则加载将失败。