Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用 COPY 命令从 Amazon S3 加载

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

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

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

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

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

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

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

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

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

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

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

要使用 IAM 用户凭证进行身份验证,请用授权用户的访问密钥 ID 和完整的秘密访问密钥替换 ACCESS_KEY_ID 和 SECRET_ACCESS_KEY 参数的 <access-key-id><secret-access-key,如下所示。

Copy
ACCESS_KEY_ID '<access-key-id>' SECRET_ACCESS_KEY '<secret-access-key>';

以下示例使用 IAM 用户凭证进行身份验证。

Copy
copy customer from 's3://mybucket/mydata' access_key_id '<access-key-id>' secret_access_key '<secret-access-key';

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

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

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

Copy
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 文件可拆分成四个文件,如下所示:

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

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

注意

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

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

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