重用查询结果
在 Athena 中重新运行查询时,可以选择重用上次存储的查询结果。此选项可以提高性能并降低扫描字节数方面的成本。重用查询结果非常有用,例如,如果您知道结果在指定时间范围内不会发生变化,则可以指定重用查询结果的最大期限。只要存储结果不超过指定期限,Athena 就会使用该结果。有关更多信息,请参阅 AWS 大数据博客中的使用 Amazon Athena 降低成本并提高查询性能
注意
查询结果重用功能需要 Athena 引擎版本 3。有关更改引擎版本的信息,请参阅 更改 Athena 引擎版本。
主要特征
-
重用查询结果是一项按查询选择使用的功能。您可以针对每个查询启用查询结果重用。
-
可以指定重用查询结果的最大期限(以分钟、小时或天为单位)。无论使用何种时间单位,可指定的最大期限均为 7 天。( 默认为 60 分钟。)
-
当您为查询启用结果重用时,Athena 会在同一工作组中查找该查询的先前执行情况。如果 Athena 找到相应的存储查询结果,它不会重新运行查询,而是指向先前的结果位置或从中获取数据。
-
对于启用结果重用选项的任何查询,Athena 仅在满足以下所有条件时才会重用保存到工作组文件夹的最后一个查询结果:
-
查询字符串完全匹配。
-
数据库与目录名称匹配。
-
先前的结果不超过指定的最大期限,或者如果未指定最大期限,则不超过 60 分钟。
-
Athena 仅重用与当前执行具有完全相同的结果配置的执行文件。
-
您可以访问查询中引用的所有表。
-
您可以访问存储先前结果的 S3 文件位置。
-
如果不满足这些条件中的任何一个,Athena 将在不使用缓存结果的情况下运行查询。
注意事项和限制
使用查询结果重用功能时,请记住以下几点:
-
Athena 仅在同一工作组内重用查询结果。
-
重用查询结果功能遵循工作组配置。如果您覆盖查询的结果配置,该功能将被禁用。
-
只有在 Amazon S3 上生成查询结果集的查询才能重用查询结果。例如,这意味着不支持 CTAS、
INSERT INTO
、MERGE
、UNLOAD
和 DDL 查询。 -
支持向 AWS Glue 注册 Apache Hive、Apache Hudi、Apache Iceberg 和 Linux Foundation Delta Lake 表。不支持外部 Hive 元存储。
-
不支持引用联合目录或外部 Hive 元存储的查询。
-
Lake Formation 受管表不支持查询结果重用。
-
在 Lake Formation 中将表源的 Amazon S3 位置注册为数据位置时,不支持重用查询结果。
-
不支持具有行和列权限的表。
-
不支持具有精细访问控制(例如,列或行筛选)的表。
-
任何引用不支持的表的查询都不能重用查询结果。
-
Athena 要求您具有 Amazon S3 读取权限,以便重用先前生成的输出文件。
-
重用查询结果功能假定先前结果的内容未被修改。Athena 在使用先前的结果之前,不会检查其完整性。
-
如果先前执行的查询结果已被删除或移至 Amazon S3 中的其他位置,则随后执行的同一查询将不会重用查询结果。
-
因而可能会返回过时的结果。在达到指定的最大重用期限之前,Athena 不会检查源数据是否更改。
-
如果有多个结果可供重用,Athena 会使用最新的结果。
-
使用非确定性运算符或函数(例如
rand()
或shuffle()
)的查询不使用缓存结果。例如,不包含ORDER BY
的LIMIT
是不确定性的,因而不会缓存,但包含ORDER BY
的LIMIT
是确定性的,所以会缓存。 -
Athena 控制台、Athena API 和 JDBC 驱动程序支持查询结果重用。目前,ODBC 驱动程序对查询结果重用的支持仅适用于 Windows。
-
要将查询结果重用功能与 JDBC 结合使用,所需的最低驱动程序版本为 2.0.34.1000。对于 ODBC,所需的最低驱动程序版本为 1.1.19.1002。有关驱动程序下载信息,请参阅 通过 ODBC 和 JDBC 驱动程序连接到 Amazon Athena。
-
对于使用多个数据目录的查询,不支持查询结果重用。
-
对于包含超过 20 个表的查询,不支持查询结果重用。
在 Athena 控制台中重用查询结果
要使用该功能,请在 Athena 查询编辑器中启用 Reuse query results(重用查询结果)选项。
![在 Athena 查询编辑器中启用 Reuse query results(重用查询结果)。](images/reusing-query-results-1.png)
配置重用查询结果功能
-
在 Athena 查询编辑器中的 Reuse query results(重用查询结果)选项下,选择 up to 60 minutes ago(截至 60 分钟前)旁边的编辑图标。
-
在 Edit reuse time(编辑重用时间)对话框中,从右侧的框中选择一个时间单位(分钟、小时或天)。
-
在左侧的框中,输入或选择要指定的时间单位数。无论选择何种时间单位,可输入的最大时间均为七天。
以下示例指定最大重用时间为两天。
-
选择确认。
系统会显示一条横幅确认您的配置更改,同时 Reuse query results(重用查询结果)选项会显示新设置。