如何解决当我尝试将 Athena 查询结果保存到 S3 存储桶中时“S3 位置无效”错误?

上次更新日期:2021 年 5 月 25 日

我的 Amazon Athena 查询无法将结果保存在指定的 Amazon Simple Storage Service (Amazon S3) 存储桶中。

简短描述

Amazon Athena 会自动将每个查询的查询结果和 MetaData 信息存储到查询结果位置,您可以在 Amazon S3 中指定该位置。但是,在以下一个或多个情况下,您会收到错误“S3 位置无效”或“不是有效的 S3 位置”:

  • 您没有指定 Amazon S3 查询结果的位置。
  • 指定的 S3 查询结果位置不准确。
  • 指定的 S3 查询结果位置位于不同的区域中。
  • AWS Identity and Access Management (IAM) 用户没有设置或查看查询结果位置所需的权限。

解决方法

要解决这些错误,请选择以下一种或多种解决方案:

指定查询结果位置

在运行查询之前,必须指定 Amazon S3 中的查询结果位置。或者,必须使用已指定存储桶且其配置覆盖客户端设置的 WorkGroup。执行以下操作,验证是否在 S3 中指定了查询结果位置:

  1. 打开 Athena 控制台
  2. 从导航栏选择设置
  3. 验证查询结果位置是否指向查询结果存储桶。

如果未指定查询结果位置,则可以使用 Athena 控制台进行更新。也可以在 WorkGroup 配置中指定结果位置。有关更多信息,请参阅使用 WorkGroup 指定查询结果位置

验证 S3 路径是否准确

验证 Athena 控制台中指定的查询结果位置是否指向正确的 S3 路径。此外,请确保在 S3 路径的末尾加上尾随斜杠 (/)(例如:s3: //doc_example_bucket/doc_example_folder/)。

验证 S3 位置是否位于同一区域

验证为保存查询结果而提供的 S3 位置是否位于运行查询的同一区域中。

验证 IAM 用户是否有足够的权限访问查询结果文件

验证 IAM 用户是否具有访问和查看查询输出文件所需的权限。IAM 用户/角色需要以下操作的权限:

注意:具有查询结果位置 GetObject 操作权限的 IAM 主体可以从 S3 检索查询结果。即使 IAM 主体的 GetQueryResults 操作权限遭到拒绝,也是如此。要限制用户或角色访问权限,请确保拒绝 Athena 查询结果位置的 S3 权限。