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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Athena 分区投影

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

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

高度分区表的修剪和投影

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

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

使用分区投影

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

重要

在表上启用分区投影会导致 Athena 忽略在Amazon Glue Data Catalog或 Hive 元存储。

使用案例

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

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

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

  • Amazon S3 中有高度分区的数据。在 Amazon Glue Data Catalog 或 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].

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

  • Amazon服务日志–Amazon服务日志通常具有一个已知结构,您可以在Amazon 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 存储位置

注意事项和限制

请注意以下事项:

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

  • 在表上启用分区投影时,Athena 将忽略Amazon Glue Data Catalog或外部 Hive 元存储。

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

  • 超出为分区投影定义的范围边界的值的查询不会返回错误。相反,查询运行,但返回零行。例如,如果您的时间相关数据从 2020 年开始,并且定义为'projection.timestamp.range'='2020/01/01,NOW',一个像SELECT * FROM table-name WHERE timestamp = '2019/02/02'将成功完成,但返回零行。

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

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

  • Athena 不使用视图的表属性作为分区投影的配置。要变通解决此限制,请在视图引用的表的表属性中配置和启用分区投影。

Video

下面的视频演示了如何使用分区投影来提高 Athena 中查询的性能。