使用 COPY 命令从 Amazon S3 中加载 - Amazon Redshift

使用 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 对象不存在,则加载将失败。