【问题标题】:Facing access denied on querying struct columns在查询结构列时面临访问被拒绝
【发布时间】:2021-01-05 18:55:20
【问题描述】:
我可以使用 Redshift 光谱查询我的表。但是,当我尝试访问定义为结构的列时,出现以下错误:
ERROR: Spectrum Scan Error: S3ServiceException:Access Denied,Status 403,Error AccessDenied
知道为什么会这样吗?
【问题讨论】:
标签:
amazon-web-services
amazon-redshift
amazon-redshift-spectrum
【解决方案1】:
我想我也正在遭受这种痛苦。如果你去了会发生什么
set json_serialization_enable to true;
然后选择struct字段?
然后试试
select json_extract_path_text(structfield, 'key') from external_schema.table;
我觉得 S3 访问错误是虚假的,而是 Glue 表定义存在问题,不太正确。
【解决方案2】:
正如您提到的,您正在使用亚马逊红移光谱。
当您获得访问拒绝时,这可能是权限问题,请检查您的角色及其附加到 redshift 集群的权限。
您提到了定义为结构的列,您是否像这样创建了外部表https://stackoverflow.com/a/66705424/13126651
这里我的外部表是具有单个键条目的单个对象,值是对象数组。
例子
CREATE EXTERNAL TABLE jatinspectrum.extab (
enteries array<struct<title:varchar(4000),link:varchar(4000),author:varchar(4000),published_date:timestamp,category:array<varchar(4000)>>>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
stored as textfile
LOCATION 's3://xxxxxxxxxxxxxx/xxxxxxxxxxxxxx/xxxxxxxxxxx/';
参考roles 和external table 的文档