查询Redshift外部表报错:Could not find parent table for alias
解决Redshift Spectrum查询外部表时的"Could not find parent table"错误
确认外部表是否存在
执行以下查询查看所有外部表,核对目标表的完整名称(包括大小写、特殊字符):SELECT * FROM svv_external_tables;也可以尝试直接描述表来验证:
DESCRIBE "awsdatacatalog"."redshift-spectrum"."testaccess_txt";如果这条语句报错,说明表未创建或名称拼写错误。
检查命名引用规则
你的查询中使用双引号包裹了每个命名部分,需确保数据目录名、外部数据库名、表名的拼写、大小写、特殊字符完全匹配:- 若命名中包含连字符(如
redshift-spectrum)这类特殊字符,必须用双引号包裹;若命名符合标准标识符规则(仅小写字母、数字、下划线),可尝试去掉双引号查询:SELECT * FROM awsdatacatalog.redshift_spectrum.testaccess_txt;
注意:Redshift对带双引号的标识符区分大小写,不带双引号则自动转为小写。
- 若命名中包含连字符(如
验证外部数据库关联
确认外部数据库redshift-spectrum已正确关联到AWS Data Catalog:SELECT * FROM svv_external_databases;若该数据库不存在,需先创建关联:
CREATE EXTERNAL DATABASE "redshift-spectrum" FROM DATA CATALOG DATABASE 'redshift-spectrum' IAM_ROLE 'arn:aws:iam::你的账号ID:role/你的Spectrum角色名';重新核对IAM角色权限
确保Spectrum使用的IAM角色具备以下权限:- Glue相关:
glue:GetTable、glue:GetDatabase - S3相关:访问外部表对应S3路径的
s3:GetObject、s3:ListBucket权限
可通过IAM控制台检查角色的权限策略是否包含这些内容。
- Glue相关:
尝试重新创建外部表
若以上步骤均无问题,可能是表创建过程中存在隐性错误,可删除现有表后重新创建(替换为实际的列定义和S3路径):DROP EXTERNAL TABLE "awsdatacatalog"."redshift-spectrum"."testaccess_txt"; CREATE EXTERNAL TABLE "awsdatacatalog"."redshift-spectrum"."testaccess_txt" ( -- 替换为你的表列定义 id INT, name VARCHAR(100) ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' -- 匹配你的文件分隔符 LOCATION 's3://你的存储桶/数据路径/';
内容的提问来源于stack exchange,提问作者omnisysgroup
相关产品推荐
相关产品推荐

