COPY - Amazon Redshift

COPY

将数据从数据文件或 Amazon DynamoDB 表加载到表中。这些文件可以位于 Amazon Simple Storage Service (Amazon S3) 桶、Amazon EMR 集群或可使用 Secure Shell (SSH) 连接访问的远程主机中。

注意

Amazon Redshift Spectrum 外部表为只读。您无法对外部表进行 COPY。

COPY 命令会将输入数据作为额外的行附加到表中。

来自任何源的单个输入行的最大大小为 4 MB。

所需的权限

要使用 COPY 命令,您必须对 Amazon Redshift 表拥有 INSERT 权限。

COPY 语法

COPY table-name [ column-list ] FROM data_source authorization [ [ FORMAT ] [ AS ] data_format ] [ parameter [ argument ] [, ... ] ]

只需 3 个参数即可执行 COPY 操作:表名称、数据来源和对数据的访问的授权。

Amazon Redshift 扩展了 COPY 命令的功能,使您可以从多个数据来源加载多种数据格式的数据、控制对加载数据的访问权限、管理数据转换和管理加载操作。

以下各节介绍所需的 COPY 命令参数,并按功能对可选参数进行分组。其中还会介绍每个参数并说明各个选项如何配合使用。您可以通过使用按字母顺序排列的参数列表直接转到相应的参数说明。

必需参数

COPY 命令需要三个元素:

最简单的 COPY 命令使用以下格式。

COPY table-name FROM data-source authorization;

以下示例创建一个名为 CATDEMO 的表,然后从 Amazon S3 中名为 category_pipe.txt 的数据文件加载包含样本数据的表。

create table catdemo(catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50));

在以下示例中,COPY 命令的数据来源是一个数据文件,名为 category_pipe.txt,位于名为 redshift-downloads 的 Amazon S3 桶的 tickit 文件夹中。COPY 命令有权通过 AWS Identity and Access Management (IAM) 角色访问 Amazon S3 桶。如果您的集群具有有权访问附加的 Amazon S3 的现有 IAM 角色,您可以在以下 COPY 命令中替换您的角色的 Amazon 资源名称 (ARN) 并执行该角色。

copy catdemo from 's3://redshift-downloads/tickit/category_pipe.txt' iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>' region 'us-east-1';

有关如何使用 COPY 命令加载示例数据的完整说明,包括从其他 AWS 区域加载数据的说明,请参阅《Amazon Redshift 入门指南》中的从 Amazon S3 中加载示例数据

table-name

COPY 命令的目标表的名称。该表必须已存在于数据库中。该表可以是临时的或永久的。COPY 命令会将新输入数据追加到该表中的任何现有行。

FROM data-source

要加载到目标表中的源数据的位置。可使用某些数据来源指定清单文件。

最常用的数据存储库是 Amazon S3 桶。您还可以从位于 Amazon EMR 集群中、位于 Amazon EC2 实例中或位于您的集群可使用 SSH 连接访问的远程主机中的数据文件加载,或者也可以直接从 DynamoDB 表加载。

授权

一个子句,指示您的集群用于访问其他 AWS 资源的身份验证和授权的方法。COPY 命令需要授权才能访问其他 AWS 资源(包括 Amazon S3、Amazon EMR、Amazon DynamoDB 和 Amazon EC2)中的数据。您可通过引用附加到您的集群的 IAM 角色或通过为 IAM 用户提供访问密钥 ID 和秘密访问密钥来提供该授权。

可选参数

您可以选择性地指定 COPY 命令如何将字段数据映射到目标表中的列,定义源数据属性以便让 COPY 命令正确读取和分析源数据,以及管理 COPY 命令在加载过程中执行的操作。

列映射

默认情况下,COPY 会按字段在数据文件中出现的相同顺序将字段值插入到目标表的列中。如果默认列顺序不起作用,则可以指定一个列列表或使用 JSONPath 表达式将源数据字段映射到目标列。

数据格式参数

您可以从固定宽度、字符分隔、逗号分隔值 (CSV)、JSON 格式的文本文件加载数据,也可从 Avro 文件加载数据。

默认情况下,COPY 命令要求源数据位于字符分隔的 UTF-8 文本文件中。默认分隔符是竖线字符 (|)。如果源数据采用的是其他格式,请使用以下参数指定数据格式。

数据转换参数

在加载表时,COPY 会尝试将源数据中的字符串隐式转换为目标列的数据类型。如果您需要指定不同于默认行为的转换,或者默认转换会产生错误,则可以通过指定以下参数来管理数据转换。

数据加载操作

通过指定以下参数来管理加载操作的默认行为,以进行故障排除或缩短加载时间。

COPY 命令的使用说明和其它资源

有关如何使用 COPY 命令的更多信息,请参阅以下主题:

COPY 命令示例

有关展示如何使用不同来源、不同格式和不同的 COPY 选项执行 COPY 操作的更多示例,请参阅COPY 示例