对表错误进行故障排除 - Amazon Athena

对表错误进行故障排除

使用本节中的信息对 Athena for Spark 的表错误进行故障排除。

创建表时无法创建路径错误

错误消息IllegalArgumentException: Cannot create a path from an empty string.(IllegalArgumentException:无法从空字符串创建路径。)

原因:当您在 Athena 中使用 Apache Spark 在 AWS Glue 数据库中创建表并且数据库的 LOCATION 属性为空时,可能会发生此错误。

建议的解决方法:有关更多信息和解决方案,请参阅 创建表时出现非法参数异常

查询 AWS Glue 表时出现 AccessDeniedException

错误消息pyspark.sql.utils.AnalysisException: Unable to verify existence of default database: com.amazonaws.services.glue.model.AccessDeniedException: User: arn:aws:sts::aws-account-id:assumed-role/AWSAthenaSparkExecutionRole-unique-identifier/AthenaExecutor-unique-identifier is not authorized to perform: glue:GetDatabase on resource: arn:aws:glue:aws-region:aws-account-id:catalog because no identity-based policy allows the glue:GetDatabase action (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null) [pyspark.sql.utils.AnalysisException:无法验证默认数据库是否存在:com.amazonaws.services.glue.model.AccessDeniedException:用户:arn:aws:sts::aws-account-id:assumed-role/AWSAthenaSparkExecutionRole-unique-identifier/AthenaExecutor-unique-identifier 无权执行:资源上的 glue:GetDatabase:arn:aws:glue:aws-region:aws-account-id:catalog:因为没有基于身份的策略允许 glue:GetDatabase 操作(服务:AWSGlue;状态代码:400;错误代码:AccessDeniedException;请求 ID:request-id;代理:null)]

原因:启用 Spark 的工作组的执行角色缺少访问 AWS Glue 资源的权限。

建议的解决方法:要解决此问题,请向您的执行角色授予访问 AWS Glue 资源的权限,然后编辑 Amazon S3 存储桶策略以向执行角色授予访问权限。

以下过程将详细介绍这些步骤。

向 AWS Glue 资源授予您的执行角色权限
  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 如果控制台导航窗格不可见,请选择左侧的扩展菜单。

    选择扩展菜单。
  3. 在 Athena 控制台导航窗格中,选择 Workgroups(工作组)。

  4. Workgroups(工作组)页面上,选择要查看的工作组的链接。

  5. 在工作组的 Overview Details(概述详细信息)页面上,选择 Role ARN(角色 ARN)链接。该链接将在 IAM 控制台中打开 Spark 执行角色。

  6. Permissions policies(权限策略)部分中,选择链接的角色策略名称。

  7. 选择 Edit policy(编辑策略),然后选择 JSON

  8. 将 AWS Glue 访问权限添加到角色。通常,您可以为 glue:GetDatabaseglue:GetTable 操作添加权限。有关配置 IAM 角色的更多信息,请参阅《IAM 用户指南》中的添加和删除 IAM 身份权限

  9. 选择 Review policy (查看策略),然后选择 Save changes (保存更改)

  10. 编辑 Amazon S3 存储桶策略,以向执行角色授予访问权限。请注意,您必须授予角色访问存储桶和存储桶中对象的权限。有关步骤,请参阅《Amazon Simple Storage Service 用户指南》中的使用 Amazon S3 控制台添加存储桶策略