使用 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 Redshift 访问 Amazon S3 对象所需的 AWS 授权。有关所需权限的信息,请参阅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://amzn-s3-demo-bucket/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 桶 amzn-s3-demo-bucket
中带有前缀“venue”的数据文件中用竖线分隔的数据加载 VENUE 表。
注意
Amazon S3 桶 amzn-s3-demo-bucket
在以下示例中不存在。有关使用现有 Amazon S3 桶中的实际数据的示例 COPY 命令,请参阅加载示例数据。
COPY venue FROM 's3://amzn-s3-demo-bucket/venue' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' DELIMITER '|';
如果带有键前缀“venue”的 Amazon S3 对象不存在,则加载将失败。