

# 对表错误进行故障排除
<a name="notebooks-spark-troubleshooting-tables"></a>

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

## 创建表时无法创建路径错误
<a name="notebooks-spark-troubleshooting-tables-illegal-argument-exception"></a>

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

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

**建议的解决方法**：有关更多信息和解决方案，请参阅 [创建表时出现非法参数异常](notebooks-spark-known-issues.md#notebooks-spark-known-issues-illegal-argument-exception)。

## 查询 AWS Glue 表时出现 AccessDeniedException
<a name="notebooks-spark-troubleshooting-tables-glue-access-denied"></a>

**错误消息**：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/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。  
![\[选择扩展菜单。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/nav-pane-expansion.png)

1. 在 Athena 控制台导航窗格中，选择 **Workgroups**（工作组）。

1. 在 **Workgroups**（工作组）页面上，选择要查看的工作组的链接。

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

1. 在 **Permissions policies**（权限策略）部分中，选择链接的角色策略名称。

1. 选择 **Edit policy**（编辑策略），然后选择 **JSON**。

1. 将 AWS Glue 访问权限添加到角色。通常，您可以为 `glue:GetDatabase` 和 `glue:GetTable` 操作添加权限。有关配置 IAM 角色的更多信息，请参阅《IAM 用户指南》中的[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

1. 选择 **Review policy (查看策略)**，然后选择 **Save changes (保存更改)**。

1. 编辑 Amazon S3 存储桶策略，以向执行角色授予访问权限。请注意，您必须授予角色访问存储桶和存储桶中对象的权限。有关步骤，请参阅《Amazon Simple Storage Service 用户指南》中的[使用 Amazon S3 控制台添加存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)。