

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

# Amazon Redshift Spectrum 中用于查询的数据文件
<a name="c-spectrum-data-files"></a>

本节介绍如何在 Amazon S3 中以 Redshift Spectrum 支持的格式创建数据文件。

您用于 Amazon Redshift Spectrum 中的查询的数据文件通常与您用于其他应用程序的文件类型相同。例如，相同类型的文件与 Amazon Athena、Amazon EMR 和 Quick 结合使用。您可以直接从 Amazon S3 以数据的原始格式查询数据。为此，数据文件的格式必须是 Redshift Spectrum 支持的格式，并且位于集群可访问的 Amazon S3 桶中。

包含数据文件的 Amazon S3 桶与 Amazon Redshift 集群必须位于同一 AWS 区域。有关支持的 AWS 区域的信息，请参阅[Amazon Redshift Spectrum 区域](c-spectrum-overview.md#c-spectrum-regions)。

## Redshift Spectrum 的数据格式
<a name="c-spectrum-data-files-formats"></a>

Redshift Spectrum 支持以下结构化和半结构化数据格式。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/dg/c-spectrum-data-files.html)

在上表中，标题表示以下内容：
+ **列式** – 文件格式是否在物理上以列式结构存储数据，而不是以行式结构存储数据。
+ **支持并行读取** – 文件格式是否支持读取文件中的各个块。读取单个块可以跨多个独立 Redshift Spectrum 请求对文件进行分布式处理，而不必在单个请求中读取整个文件。
+ **拆分单位** – 对于可以并行读取的文件格式，拆分单位是单个 Redshift Spectrum 请求可以处理的最小数据块。

**注意**  
文本文件中的时间戳值的格式必须为 `yyyy-MM-dd HH:mm:ss.SSSSSS`，如以下时间戳值所示：`2017-05-01 11:30:59.000000`。

我们建议使用列式存储文件格式（例如 Apache Parquet）。Amazon Redshift 支持 Apache Parquet v1 数据文件格式。利用列式存储文件格式，您可以通过仅选择所需的列来最大程度地减少 Amazon S3 外部的数据传输。

## Redshift Spectrum 的压缩类型
<a name="c-spectrum-data-files-compression"></a>

要减少存储空间、提高性能和最大程度地降低成本，我们强烈建议您压缩数据文件。Redshift Spectrum 基于文件扩展名识别文件压缩类型。

Redshift Spectrum 支持以下压缩类型和扩展名。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/dg/c-spectrum-data-files.html)

Amazon Redshift 还支持对 Apache Parquet 文件和 Apache Iceberg 表进行 Zstandard（zstd）压缩。

可以在不同的级别应用压缩。最常见的情况是，压缩整个文件或压缩文件中的单个块。在文件级压缩列格式不会产生性能优势。

必须满足以下条件，Redshift Spectrum 才能并行读取文件：
+ 文件格式支持并行读取。
+ 文件级压缩（如果有）支持并行读取。

文件中的单个拆分单位是否通过可并行读取的压缩算法进行压缩并不重要，因为每个拆分单位均由单个 Redshift Spectrum 请求处理。上述情况的一个示例是通过 Snappy 压缩的 Parquet 文件。使用 Snappy 压缩 Parquet 文件中的各个行组，但文件的顶层结构保持未压缩状态。在此情况下，可以并行读取文件，因为每个 Redshift Spectrum 请求均可从 Amazon S3 中读取和处理单个行组。

## Redshift Spectrum 的加密
<a name="c-spectrum-data-files-encryption"></a>

Redshift Spectrum 以透明方式解密使用以下加密选项加密的数据文件：
+ 使用由 Amazon S3 管理的 AES-256 加密密钥的服务器端加密 (SSE-S3)。
+ 具有由 AWS Key Management Service 管理的密钥的服务器端加密 (SSE-KMS)。

Redshift Spectrum 不支持 Amazon S3 客户端加密。有关服务器端加密的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[使用服务器端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

Amazon Redshift 使用大规模并行处理 (MPP) 实现对大量数据的复杂查询操作的快速执行。Redshift Spectrum 将同一原则延伸到了查询外部数据，并按需使用多个 Redshift Spectrum 实例来扫描文件。将文件放在每个表的单独的文件夹中。

您可通过执行以下操作来优化数据以执行并行处理：
+ 如果您的文件格式或压缩不支持并行读取，请将大文件拆分为多个小文件。我们建议使用介于 64 MB 和 1 GB 之间的文件大小。
+ 将所有文件保持在大致相同的大小。如果某些文件大于其他文件，Redshift Spectrum 将无法均匀分配工作负载。