我使用 Amazon redshift 创建了一个集群。使用此连接,我打开查询编辑器来创建外部表
CREATE EXTERNAL SCHEMA dynamodb_external_table2
FROM data catalog
database 'dev'
IAM_ROLE 'arn:aws:iam::831926602512:role/redshift-IAM2'
REGION 'us-east-1';
创建此表后,我想在该外部表内创建一个表,其中包含我的 S3 存储桶中的数据,我尝试使用此表
CREATE EXTERNAL TABLE dynamodb_external_table2.store_table (
row_id VARCHAR(50),
product_base_margin VARCHAR(50),
discount VARCHAR(50),
ship_date VARCHAR(50),
quantity_ordered_new VARCHAR(50),
shipping_cost VARCHAR(50),
product_sub_category VARCHAR(50),
sales VARCHAR(50),
ship_mode VARCHAR(50),
profit VARCHAR(50),
order_date VARCHAR(50),
customer_name VARCHAR(100),
unit_price VARCHAR(50),
customer_segment VARCHAR(50),
state_or_province VARCHAR(50),
postal_code VARCHAR(20),
order_id VARCHAR(50),
product_name VARCHAR(255),
city VARCHAR(50),
customer_id VARCHAR(50)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 's3://store-bucket01/store.csv';
即使在交叉检查它是否附加了所有必要的策略之后,我仍收到与名为 redshift-IAM2 的 IAM 角色有关的错误 附加到 IAM 角色“redshift-IAM2”的策略快照
错误:调用外部目录 API 时出现未知的 std 异常:------------------------------------ --------- 错误:异常名称:UnauthorizedException,错误类型:136,消息:请求的角色 arn:aws:iam::831926602512:role/redshift-IAM2 未关联到集群,应重试:0代码:30000 上下文:查询:0 位置:xen_aws_credentials_mgr.cpp:703 进程:padbmaster [pid=1073807650] -------------------------- --------------------
我预计我的数据将正确导入到外部表中,因为创建的标题与我的 S3 存储桶中的 csv 文件相同。我想在成功加载后执行进一步的查询。
我认为错误消息相当清楚 - “请求的角色 arn:aws:iam::831926602512:role/redshift-IAM2 未与集群关联”。
您需要在创建集群时将要在 Redshift 集群内使用的角色附加到集群,或者使用控制台或执行适当 AWS API 调用的其他方法将其附加到集群。 AWS CLI Redshift 选项是“modify-cluster-iam-roles”。或者在控制台中您可以:
将角色与集群关联后,您就可以在 SQL 中使用它。