Amazon Athena 中的分区投影 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Amazon Athena 中的分区投影

可以在 Athena 中使用分区投影来加快对高度分区表的查询处理,并自动执行分区管理。

在分区投影中,分区值和位置是根据配置计算得出的,而不是从存储库(例如 AWS Glue 数据目录)中读取出的。由于内存中的操作通常快于远程操作,因此,分区投影可以减少针对高度分区表的查询的运行时间。根据查询和基础数据的具体特征,分区投影可以显著减少在分区元数据检索方面受到限制的查询的运行时间。

高度分区表的修剪和投影

分区修剪将收集元数据并对其进行“修剪”,以便只存在适用于查询的分区。这通常会加快查询速度。Athena 对所有带分区列的表(包括为分区投影配置的表)使用分区修剪。

通常,在处理查询时,Athena 会在执行分区修剪之前向 AWS Glue 数据目录 发出 GetPartitions 调用。如果表具有大量分区,则使用 GetPartitions 会导致性能降低。要避免发生此情况,您可以使用分区投影。分区投影可让 Athena 避免调用 GetPartitions,因为分区投影配置为 Athena 提供了自行构建分区所需的所有信息。

使用分区投影

要使用分区投影,请在 AWS Glue 数据目录 或外部 Hive 元存储中的表属性中为每个分区列指定分区值和投影类型的范围。表的这些自定义属性可让 Athena 了解在对表运行查询时应使用哪种分区模式。在查询执行期间,Athena 使用此信息对分区值进行投影,而不是从 AWS Glue 数据目录 或外部 Hive 元存储中检索这些值。这不仅将减少查询执行时间,还将自动执行分区管理,因为不再需要在 Athena、AWS Glue 或外部 Hive 元存储中手动创建分区。

重要

在表上启用分区投影会导致 Athena 忽略在 AWS Glue 数据目录 或 Hive 元存储中注册到表的任何分区元数据。

使用案例

分区投影在许多场景中都很有用,其中包括:

  • 对高度分区表的查询不会像您希望的那样快速完成。

  • 在数据中创建新的日期或时间分区时,可以定期向表添加分区。利用分区投影,可以配置可在新数据到达时使用的相对日期范围。

  • 您在 Amazon S3 中有高度分区的数据。在 AWS Glue 数据目录 或 Hive 元存储中为数据建模是不切实际的,并且您的查询仅读取其中的一小部分。

可投影的分区结构

当您的分区遵循可预测的模式时(包括但不限于以下情况),分区投影最易配置:

  • 整数 – 任何连续的整数序列,例如 [1, 2, 3, 4, ..., 1000][0500, 0550, 0600, ..., 2500]

  • 日期 – 任何连续的日期或日期时间序列,例如 [20200101, 20200102, ..., 20201231][1-1-2020 00:00:00, 1-1-2020 01:00:00, ..., 12-31-2020 23:00:00]

  • 枚举值 – 一组有限的枚举值,例如机场代码或 AWS 区域。

  • AWS 服务日志 – AWS 服务日志通常具有一个已知结构,您可以在 AWS Glue 中指定该结构的分区方案,并且 Athena 可以将其用于分区投影。有关示例,请参阅Amazon Kinesis Data Firehose 示例

自定义分区路径模板

默认情况下,Athena 使用 s3://<bucket>/<table-root>/partition-col-1=<partition-col-1-val>/partition-col-2=<partition-col-2-val>/ 格式生成分区位置,但如果您数据的组织方式不同,则 Athena 会提供用于自定义此路径模板的机制。要查看相关步骤,请参阅 指定自定义 S3 存储位置

注意事项和限制

请注意以下事项:

  • 有了分区投影,便无需在 AWS Glue 或外部 Hive 元存储中手动指定分区。

  • 在表上启用分区投影时,Athena 将为该表忽略 AWS Glue 数据目录 或外部 Hive 元存储中的任何分区元数据。

  • 如果 Amazon S3 中没有投影分区,Athena 仍会对分区进行投影。Athena 不会引发错误,但也未返回任何数据。不过,如果您的空分区过多,则性能会低于传统的 AWS Glue 分区。如果有一半以上的投影分区为空,建议您使用传统分区。

  • 分区投影仅在通过 Athena 查询表时可用。如果通过其他服务(例如 Amazon Redshift Spectrum 或 Amazon EMR)读取同一个表,则使用标准分区元数据。

  • 由于分区投影是一项仅限 DML 的功能,因此 SHOW PARTITIONS 不会列出由 Athena 投影但未注册到 AWS Glue 目录或外部 Hive 元存储中的分区。

  • Athena 中的视图不使用投影配置属性。