AWS Athena:不允许从没有列的关系中选择 *

问题描述 投票:0回答:4

尝试访问某些表时遇到以下错误,但某些表工作正常,这可能是什么原因。

查询:

SELECT * FROM icbs_cup00901_d LIMIT 1

相同的查询适用于其他表,所以我很困惑可能是什么原因,并且查询中提到的表有 8 列字符串数据类型。

错误:您的查询有以下错误:

SYNTAX_ERROR:第 1:8 行:不允许从没有列的关系中选择 *

此查询针对“bpd_ds_db”数据库运行,除非查询限定。请在我们的论坛上发布错误消息或联系客户支持并提供查询 ID:a462d56e-952b-4a6f-a275-b0c9db0301b0。

我已经检查过,同一个表中有 8 个字符串数据类型的列,并且完全相同的查询适用于某些表,所以我很困惑可能是什么问题

CREATE EXTERNAL TABLE icbs_cup00901_d( 
    cux1ac_acct_surr_id string, 
    cux1ap string, 
    cux1cs_cust_surr_id string, 
    cux1ty string, 
    cuxbk string, 
    cuxnot string, 
    cuxrec string, 
    cuxrel string
)

ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS 
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' 
LOCATION 's3://bpd-datalake/00Raw/datasets/parquet/DWH/ICBS_CUP00901_D' 
TBLPROPERTIES ( 
   'lastUpdateDate'='2021-09-30 03:02:04.780351', 
   'last_modified_by'='hadoop', 
   'last_modified_time'='1632970985', 
   'parquet.compress'='GZIP', 'transient_lastDdlTime'='1632970985'
)
amazon-web-services amazon-athena
4个回答
17
投票

我也遇到了同样的问题,发现是因为我的用户没有足够的权限。该错误不是很有帮助,但我认为它看不到列,因此给出了该错误。

通过在 AWS Lake Formation 中添加权限来解决该问题。在数据湖权限下,确保您的用户至少对数据库和表拥有“描述”和“选择”权限。


1
投票

谢谢大家分享信息!就我而言,我不确定它是否与权限有关,但是是的,当我替换为所需的列名称时,问题出现在“*”中,然后它就可以正常工作了


1
投票

对于此问题,您需要授予 Lake Formation 中的选择访问权限。 选择您正在使用的角色并至少授予选择的访问权限,


0
投票

在我的用例中,在数据湖权限中添加“描述”和“选择”是不够的,我还必须转到管理>数据湖位置,并注册适当的S3 URI。 请注意,如果您只注册一个存储桶名称,您仍然可以访问使用该存储桶名称斜线文件夹的数据库...

© www.soinside.com 2019 - 2024. All rights reserved.