为 Amazon Redshift Spectrum 中的查询创建数据文件 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

为 Amazon Redshift Spectrum 中的查询创建数据文件

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

包含数据文件的 Amazon S3 存储桶以及 Amazon Redshift 集群必须位于同一 AWS 区域。有关支持的 AWS 区域的信息,请参阅 Amazon Redshift Spectrum 区域

Redshift Spectrum 的数据格式

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

文件格式 列式 支持并行读取 拆分单位
Parquet 行组
ORC Stripe
RCFile 行组
TextFile
SequenceFile 行或块
RegexSerde
OpenCSV
AVRO Block
Ion 不适用*
:JSON 不适用*

在上表中,标题表示以下内容:

  • 列式 – 文件格式是否在物理上以列式结构存储数据,而不是以行式结构存储数据。

  • 支持并行读取 – 文件格式是否支持读取文件中的各个块。读取单个块可以跨多个独立 Redshift Spectrum 请求对文件进行分布式处理,而不必在单个请求中读取整个文件。

  • 拆分单位 – 对于可以并行读取的文件格式,拆分单位是单个 Redshift Spectrum 请求可以处理的最小数据块。

    注意

    文本文件中的时间戳值必须为格式 yyyy-MM-dd HH:mm:ss.SSSSSS,如下所示的时间戳: 2017-05-01 11:30:59.000000.

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

Redshift Spectrum 的压缩类型

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

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

压缩算法 文件扩展名 支持并行读取
Gzip .gz
Bzip2 .bz2
Snappy snappy

可以在不同的级别应用压缩。最常见的情况是,压缩整个文件或压缩文件中的单个块。

必须满足以下条件,Redshift Spectrum 才能并行读取文件:

  • 文件格式支持并行读取。

  • 文件级压缩(如果有)支持并行读取。

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

Redshift Spectrum 的加密

Redshift Spectrum 以透明方式解密使用以下加密选项加密的数据文件:

  • 使用由 Amazon S3 管理的 AES-256 加密密钥的服务器端加密 (SSE-S3)。

  • 具有由 AWS Key Management Service 管理的密钥的服务器端加密 (SSE-KMS)。

Redshift Spectrum 不支持 Amazon S3 客户端加密。有关服务器端加密的更多信息,请参阅 使用服务器端加密保护数据Amazon Simple Storage Service 开发人员指南.

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

您可通过执行以下操作来优化数据以执行并行处理:

  • 如果您的文件格式或压缩不支持并行读取,请将大文件拆分为多个小文件。我们建议使用介于 64 MB 和 1 GB 之间的文件大小。

  • 将所有文件保持在大致相同的大小。如果某些文件大于其他文件,Redshift Spectrum 将无法均匀分配工作负载。