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 DynamoDB 表加载到表中。这些文件可以位于 Amazon Simple Storage Service (Amazon S3) 存储桶、Amazon EMR (Amazon EMR) 集群或可使用 Secure Shell (SSH) 连接访问的远程主机中。

注意

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

COPY 命令会将新输入数据追加到该表中的任何现有行。

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

注意

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

COPY 语法

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

COPY 语法概览

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

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

本节介绍必需的 COPY 命令参数并按功能将可选参数分组。后续主题将介绍每个参数并说明各个选项如何配合使用。您还可以通过使用按字母顺序排列的参数列表直接转到相应的参数说明。

必需参数

COPY 命令需要三个元素:

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

Copy
COPY table-name FROM data-source authorization;

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

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

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

Copy
copy catdemo from 's3://awssampledbuswest2/tickit/category_pipe.txt' iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>' region 'us-west-2';

有关创建 IAM 角色的步骤,请参阅 Amazon Redshift 入门 中的步骤 2:创建 IAM 角色。有关如何使用 COPY 命令加载示例数据的完整说明,包括从其他 AWS 区域加载数据的说明,请参阅 Amazon Redshift 入门 中的步骤 6:从 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 命令的更多信息,请参阅以下主题:

本页内容: