从 Amazon S3 执行 COPY 的操作 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

从 Amazon S3 执行 COPY 的操作

要从位于一个或多个 S3 存储桶中的文件加载数据,请使用 FROM 子句指示 COPY 在 Amazon S3 中查找文件的方式。您可以提供数据文件的对象路径作为 FROM 子句的一部分,也可以提供包含了 Amazon S3 对象路径列表的清单文件的位置。从 Amazon S3 执行 COPY 的操作将使用 HTTPS 连接。

重要

如果包含数据文件的 Amazon S3 存储桶未驻留在您的集群所在的 AWS 区域内,则必须使用 REGION 参数指定数据所在的区域。

Syntax

FROM { 's3://objectpath' | 's3://manifest_file' } authorization | MANIFEST | ENCRYPTED | REGION [AS] 'aws-region' | optional-parameters

Examples

以下示例使用对象路径从 Amazon S3 加载数据。

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

以下示例使用清单文件从 Amazon S3 加载数据。

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

Parameters

FROM ...

要加载的数据的源。有关 Amazon S3 文件编码的更多信息,请参阅数据转换参数

's3://copy_from_s3_objectpath'

指定 Amazon S3 包含数据的对象—例如, 's3://mybucket/custdata.txt'。的 s3://copy_from_s3_objectpath 参数可以引用单个文件或具有相同密钥前缀的一组对象或文件夹。例如, custdata.txt 是一个密钥前缀,它引用许多物理文件: custdata.txt,custdata.txt.1, custdata.txt.2, custdata.txt.bak等等。键前缀还可以引用很多文件夹。例如,'s3://mybucket/custfolder' 引用文件夹 custfoldercustfolder_1,等等。custfolder_2如果键前缀引用多个文件夹,则加载这些文件夹中的所有文件。如果键前缀与一个文件以及一个文件夹匹配,如 custfolder.log,COPY 还将尝试加载该文件。如果键前缀可能导致 COPY 尝试加载不需要的文件,请使用清单文件。有关更多信息,请参阅下面的copy_from_s3_manifest_file

重要

如果包含数据文件的 S3 存储桶未驻留在您的集群所在的 AWS 区域内,则必须使用 REGION 参数指定数据所在的区域。

有关更多信息,请参阅 从 Amazon S3 中加载数据。)

's3://copy_from_s3_manifest_file'

为列出了要加载的数据文件的清单文件指定 Amazon S3 对象键。的 s3://copy_from_s3_manifest_file' 参数必须明确引用单个文件—例如, 's3://mybucket/manifest.txt'。它不能引用密钥前缀。

清单是 JSON 格式的文本文件,其中列出了要从 Amazon S3 加载的每个文件的 URL。URL 包含文件的存储桶名称和完整对象路径。在清单中指定的文件可以位于不同的存储桶中,但所有存储桶都必须位于 Amazon Redshift 集群所在的 AWS 区域。如果某个文件被列出两次,那么该文件也会被加载两次。以下示例显示了加载三个文件的清单的 JSON。

{ "entries": [ {"url":"s3://mybucket-alpha/custdata.1","mandatory":true}, {"url":"s3://mybucket-alpha/custdata.2","mandatory":true}, {"url":"s3://mybucket-beta/custdata.1","mandatory":false} ] }

需要双引号字符,且必须为简单的引号(0x22)、非斜面或“smart”引号。清单中的每个条目都可以选择性地包含 mandatory 标记。如果 mandatory 设置为 true,则当 COPY 未找到该条目对应的文件时,该命令将会终止;否则,该命令将继续。mandatory 的默认值为 false

在从采用 ORC 或 Parquet 格式的数据文件中加载时,需要 meta 字段,如以下示例所示。

{ "entries":[ { "url":"s3://mybucket-alpha/orc/2013-10-04-custdata", "mandatory":true, "meta":{ "content_length":99 } }, { "url":"s3://mybucket-beta/orc/2013-10-05-custdata", "mandatory":true, "meta":{ "content_length":99 } } ] }

不能对清单文件进行加密或压缩,即使指定了 ENCRYPTED、GZIP、LZOP、BZIP2 或 ZSTD 选项。如果未找到指定的清单文件或清单文件的格式不正确,COPY 命令将返回错误。

如果使用了清单文件,则必须使用 COPY 命令指定 MANIFEST 参数。如果未指定 MANIFEST 参数,COPY 命令将假定使用 FROM 指定的文件是数据文件。

有关更多信息,请参阅 从 Amazon S3 中加载数据。)

authorization

COPY 命令需要授权才能访问其他 AWS 资源(包括 Amazon S3、Amazon EMR、Amazon DynamoDB 和 Amazon EC2)中的数据。您可通过引用附加到您的集群的 AWS Identity and Access Management (IAM) 角色(基于角色的访问控制)或通过为 IAM 用户提供访问凭证(基于密钥的访问控制)来提供授权。为了提高安全性和灵活性,我们建议使用基于 IAM 角色的访问控制。有关更多信息,请参阅 授权参数。)

MANIFEST

指定使用一个清单来标识要从 Amazon S3 加载的数据文件。如果使用了 MANIFEST 参数,则 COPY 将从 's3://copy_from_s3_manifest_file' 引用的清单中列出的文件加载数据。如果未找到清单文件或清单文件的格式不正确,COPY 将失败。有关更多信息,请参阅 使用清单指定数据文件。)

ENCRYPTED

一个子句,指定 Amazon S3 上输入文件的加密方法为:利用客户管理的对称密钥进行客户端加密 (CSE-CMK)。有关更多信息,请参阅 从 Amazon S3 中加载加密的数据文件。) 如果输入文件的加密方法为 Amazon S3 服务器端加密 (SSE-KMS 或 SSE-S3),请不要指定 ENCRYPTED。COPY 会自动读取服务器端加密的文件。

如果您要指定 ENCRYPTED 参数,还必须指定 MASTER_SYMMETRIC_KEY 参数,或在 CREDENTIALS 字符串中包括 master_symmetric_key 值。

如果加密文件采用了压缩格式,请添加 GZIP、LZOP、BZIP2 或 ZSTD 参数。

即使指定了 ENCRYPTED 选项,也不得加密清单文件和 JSONPaths 文件。

MASTER_SYMMETRIC_KEY 'master_key'

用于在 Amazon S3 上加密数据文件的主对称密钥。如果指定了 MASTER_SYMMETRIC_KEY,还须指定 ENCRYPTED 参数。MASTER_SYMMETRIC_KEY 不能与 CREDENTIALS 参数配合使用。有关更多信息,请参阅 从 Amazon S3 中加载加密的数据文件。)

如果加密文件采用了压缩格式,请添加 GZIP、LZOP、BZIP2 或 ZSTD 参数。

REGION [AS] 'aws-region'

指定源数据所在的 AWS 区域。当包含该数据的 AWS 资源与 Amazon Redshift 集群不在同一区域时,从 Amazon S3 存储桶或 DynamoDB 表执行 COPY 的操作需要 REGION。

aws_region 的值必须与 Amazon Redshift 区域和终端节点表中所列的区域匹配。

如果指定了 REGION 参数,则所有资源(包括清单文件或多个 Amazon S3 存储桶)都必须位于指定区域内。

注意

对于包含数据的 Amazon S3 存储桶或 DynamoDB 表,跨区域传输数据将会产生额外费用。有关定价的更多信息,请参阅 数据传送从 Amazon S3 到另一个AW区域Amazon S3 定价 页面和 数据传送输出Amazon DynamoDB 定价 第页。

默认情况下,COPY 假定数据位于 Amazon Redshift 集群所在的相同区域。

可选参数

对于从 Amazon S3 执行 COPY 的操作,还可以指定以下参数:

不支持的参数

对于从 Amazon S3 执行 COPY 的操作,不能使用以下参数:

  • SSH

  • READRATIO