无法将 parquet 数据从 S3 复制到 redshift

Unable to copy parquet data from S3 to redshift

提问人:Sam Gilbert 提问时间:11/7/2023 最后编辑:Sam Gilbert 更新时间:11/11/2023 访问量:41

问:

我希望能够将 parquet 数据从 S3 复制到 Redshift。

我尝试了以下代码:

-- Part 1: Unload
SET search_path TO my_schema_from;

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table 
(
  column1   VARCHAR
);

INSERT INTO my_table (column1) VALUES ('abc');

UNLOAD ('SELECT * FROM my_table') TO 's3://my_bucket/my_table_' 
CREDENTIALS 'aws_iam_role=arn:aws:iam::my_role' 
FORMAT AS PARQUET
ALLOWOVERWRITE
MANIFEST;

-- Part 2: Copy
SET search_path TO my_schema_to;

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table 
(
  column1   VARCHAR
);

COPY my_table 
FROM 's3://my_bucket/my_table_manifest' 
CREDENTIALS 'aws_iam_role=arn:aws:iam::my_role' 
FORMAT AS PARQUET
MANIFEST;

第 1 部分看起来按预期运行。但是,第 2 部分错误如下:

  -----------------------------------------------
  error:  Spectrum Scan Error
  code:      15007
  context:   Forbidden: HTTP response error code: 403 Message: AccessDenied Access Denied

错误是说存在访问问题。

我的 IAM 角色已与它相关联 - 我已经测试了它可以在 S3 和 redshift 之间成功移动数据,因为如果我在这两个部分中将格式从 更改为 to,它就会按预期工作。AmazonS3FullAccessFORMAT AS PARQUETFORMAT AS CSV

由于错误说涉及频谱,我尝试更新 IAM 角色以为其提供所需的访问权限,但没有成功 - 我尝试添加胶水但没有更改,它仍然出错......

(我知道在简化的示例中 CSV 可以工作,我需要 S3 上的文件在 parquet 中用于另一个进程)。

amazon-web-services amazon-redshift parquet

评论

1赞 kdgregory 11/7/2023
如果您将角色的相关部分放在您的问题中,会很有帮助。我的猜测是,即使有清单,从 Parquet 加载也需要。ListBucket
0赞 Sam Gilbert 11/7/2023
谢谢你的评论。我已经相应地更新了描述。

答:

0赞 MP24 11/11/2023 #1

对于 Spectrum,Redshift 似乎需要额外的角色/IAM 权限。本文档提到:

对于 Redshift Spectrum,除了 Amazon S3 访问权限之外,还要添加 AWSGlueConsoleFullAccessAmazonAthenaFullAccess

Redshift Spectrum 使用 Glue 数据目录,并且需要访问它,该目录由上述角色授予。当然,您应该将角色中的访问权限限制为数据目录中所需的部分和操作。