

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 使用 COPY 命令从 Amazon S3 中加载
<a name="t_loading-tables-from-s3"></a>

使用 [COPY](r_COPY.md) 命令从 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](r_CREATE_TABLE_NEW.md)。

*authorization* 的值提供 Amazon Redshift 访问 Amazon S3 对象所需的 Amazon 授权。有关所需权限的信息，请参阅[COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 权限](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)。进行身份验证的首选方法是为具有必要权限的 IAM 角色指定 IAM\$1ROLE 参数并提供 Amazon 资源名称（ARN）。有关更多信息，请参阅 [基于角色的访问控制](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)。

要使用 IAM\$1ROLE 参数进行身份验证，请替换 *<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-parameters-authorization.md)。

如果您要验证您的数据而不实际加载表，请对 [COPY](r_COPY.md) 命令使用 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 之间。有关更多信息，请参阅 [从压缩和未压缩文件中加载数据](t_splitting-data-files.md)。

例如，`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 命令，请参阅[加载示例数据](https://docs.amazonaws.cn/redshift/latest/gsg/cm-dev-t-load-sample-data.html)。

```
COPY venue FROM 's3://amzn-s3-demo-bucket/venue'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
DELIMITER '|';
```

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

**Topics**
+ [使用清单指定数据文件](loading-data-files-using-manifest.md)
+ [从 Amazon S3 中加载压缩的数据文件](t_loading-gzip-compressed-data-files-from-S3.md)
+ [从 Amazon S3 中加载固定宽度的数据](t_loading_fixed_width_data.md)
+ [从 Amazon S3 中加载多字节数据](t_loading_unicode_data.md)
+ [从 Amazon S3 中加载加密的数据文件](c_loading-encrypted-files.md)