

 从补丁 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 命令加载所有需要的文件，且仅加载需要的文件。您可以使用清单来加载不同桶或文件中的未共享相同前缀的文件。您可以提供明确列出要加载的文件的 JSON 格式的文本文件的名称，而不必提供 COPY 命令的对象路径。清单中的 URL 必须指定桶名称和文件的完整对象路径，而不仅仅是前缀。

有关清单文件的更多信息，请参阅 COPY 示例[使用清单指定数据文件](r_COPY_command_examples.md#copy-command-examples-manifest)。

以下示例展示了用于加载不同桶中的文件名以日期戳开头的文件的 JSON。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/2013-10-05-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/2013-10-05-custdata", "mandatory":true}
  ]
}
```

可选的 `mandatory` 标志指定 COPY 是否应在找不到文件时返回错误。`mandatory` 的默认值为 `false`。如果未找到任何文件，则无论 mandatory 设置如何，COPY 都将终止。

以下示例将使用前一个示例中名为 `cust.manifest` 的清单来运行 COPY 命令。

```
COPY customer
FROM 's3://amzn-s3-demo-bucket/cust.manifest' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MANIFEST;
```

## 使用 UNLOAD 创建的清单


由 [UNLOAD](r_UNLOAD.md) 操作使用 MANIFEST 参数创建的清单可能具有 COPY 操作不需要的键。例如，以下 `UNLOAD` 清单包含一个 `meta` 键，该键是 Amazon Redshift Spectrum 外部表所必需的，并用于加载 `ORC` 或 `Parquet` 文件格式的数据文件。`meta` 键包含具有文件实际大小值（以字节为单位）的 `content_length` 键。COPY 操作只需要 `url` 密钥和可选 `mandatory` 密钥。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/unload/manifest_0000_part_00", "meta": { "content_length": 5956875 }},
    {"url":"s3://amzn-s3-demo-bucket/unload/unload/manifest_0001_part_00", "meta": { "content_length": 5997091 }}
 ]
}
```

有关清单文件的更多信息，请参阅[使用清单指定数据文件](r_COPY_command_examples.md#copy-command-examples-manifest)。