由于“Insufficient Lake Formation permissions”或“COLUMN_NOT_FOUND”错误,我的 Amazon Athena 查询失败。
解决方法
对于收到的错误消息,请按照下面的故障排除步骤进行操作。
错误“Insufficient Lake Formation permissions on Amazon_S3_location”
当 AWS Identity and Access Management(IAM)用户或角色存在以下情形时,就会出现此错误:
- IAM 用户或角色没有 Lake Formation 提供的相应 Amazon Simple Storage Service(Amazon S3)数据位置权限。
- IAM 用户或角色试图在向 AWS Lake Formation 注册的 Amazon S3 存储桶上创建或更改 Data Catalog 资源。
要解决此错误,必须向用于创建数据库或表的 IAM 用户或角色授予数据位置权限。当将 Athena 与 Lake Formation 一起使用时,请确保向 Lake Formation 的 IAM 用户或角色授予必需的 S3 权限。此外,请确保授予 IAM 用户或角色所需的数据访问权限。
数据访问权限允许 IAM 用户或者角色在 Amazon S3 位置读取和写入数据。但是,Lake Formation 中的数据位置权限允许 IAM 用户或角色创建和更改 Data Catalog 资源。Data Catalog 资源指向注册的 Amazon S3 位置。
验证数据湖位置是否已在 Lake Formation 中注册
- 打开 AWS Lake Formation 控制台。
- 在导航窗格的管理下,选择数据湖位置。
- 在数据湖位置中,检查 Data Catalog 资源指向的 S3 路径是否已在 Lake Formation 中注册。
从 AWS Lake Formation 控制台授予数据位置权限
- 在导航窗格中,选择数据位置。
- 选择授予。
- 在授予权限对话框中,选择我的帐户。
- 对于 IAM 用户和角色,选择想要授予权限的 IAM 用户或角色。
- 对于存储位置,选择从中收到错误的 S3 路径。
- 选择授予。
注意: 仅当 S3 路径位于同一账户内时,才执行这些步骤。如果 S3 路径位于其他账户中,请首先确保满足所有跨账户访问先决条件。然后,按照 Granting data location permissions (external account) 中提供的说明进行操作。
有关更多信息,请参阅 Granting data location permissions (same account)。
错误“Insufficient Lake Formation permissions on database_name”
按照以下步骤授予 IAM 用户或角色对数据库的权限。
- 打开 Lake Formation 控制台。
- 在导航窗格中,选择数据库。
- 选择您的数据库名称,选择操作,然后选择授予。
- 在主体下,选择 IAM 用户和角色。
- 对于 IAM 用户和角色,选择要向其授予对数据库的权限的 IAM 用户或角色。
- 在 LF 标签或目录资源下,选择命名数据目录资源。
- 在数据库权限下,选择描述。
注意: 还可以根据自己的用例添加其他权限。
- 选择授予。
错误“Insufficient Lake Formation permissions: Required Create Table on database_name”
按照下面的步骤向数据库授予 IAM 权限。
- 打开 Lake Formation 控制台。
- 在导航窗格的权限下,选择数据湖权限。
- 选择授予。
- 在主体下,选择 IAM 用户和角色。
- 对于 IAM 用户和角色,选择要用于 Athena 的 IAM 用户或角色。
- 在 LF 标签或目录资源下,选择命名数据目录资源。
- 对于数据库,选择 IAM 用户或角色写入的数据库。
- 在数据库权限下,根据您的用例选择创建表或描述。
注意: IAM 用户或角色必须对数据库同时具有描述和创建表权限才能创建表。
- 选择授予。
错误“COLUMN_NOT_FOUND: line 1:8: SELECT * not allowed from relation that has no columns”
按照以下步骤检查数据库的 DESCRIBE 权限。然后,检查表的 DESCRIBE 和 SELECT 权限。
注意: Lake Formation 管理员可以在 Athena 控制台中查看数据库和表,但需要所需的权限才能查询数据。
使用命名资源方法授予数据库权限
- 打开 Lake Formation 控制台。
- 在导航窗格的权限下,选择数据湖权限。
- 选择授予。
- 在主体下,选择 IAM 用户和角色。
- 对于 IAM 用户和角色,选择想对 Athena 使用的 IAM 用户或角色。
- 在 LF 标签或目录资源下,选择命名数据目录资源。
- 对于数据库,为您的表选择数据库。
- 在数据库权限下,选择描述。
- 选择授予。
有关更多信息,请参阅 Granting database permissions using the named resource method。
使用命名资源方法授予表权限
- 打开 Lake Formation 控制台。
- 在导航窗格的权限下,选择数据湖权限。
- 选择授予。
- 在主体下,选择 IAM 用户和角色。
- 对于 IAM 用户和角色,选择想对 Athena 使用的 IAM 用户或角色。
- 在 LF 标签或目录资源下,选择命名数据目录资源。
- 对于数据库,选择您的数据库。
- 对于表,选择一个或多个表,或选择所有表。
- 在表权限下,选择选择或描述以运行 SELECT 查询,或为您的用例选择表权限。
- 选择授予。
注意: 还可以通过表的资源链接授予对表的权限。为此,在表页面上,选择一个资源链接,选择操作,然后选择在目标上授权。有关更多信息,请参阅 How resource links work in Lake Formation。
相关信息
Granting data location permissions