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

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

我希望能够将 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 角色与

AmazonS3FullAccess
关联 - 我已经测试过它可以成功地在 S3 和 redshift 之间移动数据,因为如果我将两个部分中的格式从
FORMAT AS PARQUET
更改为
FORMAT AS CSV
,它会按预期工作。

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

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

amazon-web-services amazon-redshift parquet
1个回答
0
投票

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

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

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

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