使用成本型优化器 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用成本型优化器

您可以使用 Athena SQL 中的成本型优化器(CBO)功能来优化查询。您可以选择请求 Athena 为 Amazon Glue 中的一个表收集表级或列级统计数据。如果查询中的所有表都有统计数据,Athena 会使用这些统计数据来创建它认为性能最佳的执行计划。查询优化器会根据统计模型来计算备选计划,然后选择速度可能最快的计划来运行查询。

Amazon Glue 表上的统计数据被收集并存储在 Amazon Glue Data Catalog 中,也提供给 Athena 来改进查询计划和执行。这些统计数据是列级统计数据,例如 Parquet、ORC、JSON、ION、CSV 和 XML 等文件类型的不同值、空值、最大值和最小值的个数。Amazon Athena 通过在查询处理中尽早应用最严格的筛选条件来使用这些统计数据优化查询。这种筛选功能限制了内存使用量和为提供查询结果而必须读取的记录数。

Athena 还会将 CBO 和规则型优化器(RBO)功能结合起来使用。RBO 以机械方式应用可提高查询性能的规则。RBO 通常会带来益处,因为它的转换是为了简化查询计划。不过,由于 RBO 不进行成本计算或计划比较,查询较复杂便会让 RBO 难以创建最佳计划。

因此,Athena 会同时使用 RBO 和 CBO 来优化您的查询。在确定改进查询执行的机会后,Athena 就会创建最佳计划。有关执行计划详情的信息,请参阅查看 SQL 查询的执行计划。有关 CBO 工作原理的详细讨论,请参阅 Amazon 大数据成本型优化器博客文章

要为 Amazon Glue Catalog 表生成统计数据,可以使用 Athena 控制台、Amazon Glue 控制台或 Amazon Glue API。由于 Athena 已与 Amazon Glue Catalog 集成,在运行来自 Amazon Athena 的查询时,您会自动获得相应的查询性能改进。

注意事项和限制

  • 表类型 – 目前,Athena 中的 CBO 功能仅支持 Amazon Glue Data Catalog 中的 Hive 表。

  • Athena for Spark – CBO 功能在 Athena for Spark 中不可用。

  • 定价 – 有关定价信息,请访问 Amazon Glue 定价页面

使用 Athena 控制台生成表统计数据

本节旨在介绍如何使用 Athena 控制台为 Amazon Glue 中的表生成表级或列级统计数据。有关使用 Amazon Glue 生成表统计数据的信息,请参阅《Amazon Glue Developer Guide》中的 Working with column statistics

使用 Athena 控制台为表生成统计数据
  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 在 Athena 查询编辑器的列表中,选择所需表的三个垂直点,然后选择生成统计数据

    Athena 查询编辑器中表的上下文菜单。
  3. 生成统计数据对话框中,选择所有列为表中的所有列生成统计数据,或者选择所选列来选择特定列。所有列为默认设置。

    “生成统计数据”对话框。
  4. 对于 Amazon Glue 服务角色,创建服务角色或选择现有服务角色来授予 Amazon Glue 生成统计数据的权限。对于包含表数据的 Amazon S3 存储桶,Amazon Glue 服务角色还需要 S3:GetObject 权限。

    选择 Amazon Glue 服务角色。
  5. 选择生成统计数据table_name 生成统计数据通知横幅显示任务状态。

    “生成统计数据”通知横幅。
  6. 要在 Amazon Glue 控制台中查看详细信息,请选择在 Glue 中查看

    有关在 Amazon Glue 控制台中查看统计数据的信息,请参阅《Amazon Glue 开发人员指南》中的 Viewing column statistics

  7. 生成统计数据后,包含统计数据的表和列在括号中显示统计数据一词,如下图所示。

    在 Athena 查询编辑器中显示统计数据图标的表。

现在,如果运行查询,Athena 会对生成统计数据的表和列执行基于成本的优化。

另请参阅

有关更多信息,请参阅以下资源。