跳至内容

如何解决 Amazon Redshift 中的 UNLOAD 命令和 S3 访问问题?

2 分钟阅读
0

当我在 Amazon Redshift 中运行 UNLOAD 命令时,我收到了错误。

简短描述

当您在 Amazon Redshift 中运行 UNLOAD 命令时,由于以下原因,可能会出现错误:

  • 目标 Amazon Simple Storage Service (Amazon S3) 存储桶或前缀包含现有对象。
  • 您未将 AWS Identity and Access Management (IAM) 角色附加到您的 Amazon Redshift 集群。
  • IAM 角色没有所需的 S3 存储桶权限。
  • 数据库用户没有必要的表或架构权限。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

S3 存储桶或前缀中存在对象

如果目标 S3 存储桶或前缀中已存在对象,则您可能会收到以下错误消息:

“Specified unload destination on S3 is not empty.Consider using a different bucket / prefix, manually removing the target files in S3, or using the ALLOWOVERWRITE option.”

要解决此错误,请运行以下包含 ALLOWOVERWRITE 参数的 UNLOAD 命令:

UNLOAD ('<SELECT query>')
TO 's3://S3 bucket or prefix'
IAM_ROLE 'IAM Role'
ALLOWOVERWRITE;

**注意:**请将 S3 bucketprefix 替换为您的 S3 存储桶或前缀,将 IAM Role 替换为您的 IAM 角色。

有关详细信息,请参阅参数

您未将 IAM 角色与集群关联

如果您没有将在 UNLOAD 命令中指定的 IAM 角色与 Amazon Redshift 集群相关联,则会收到以下错误消息:

“UnauthorizedException, error type : 138, message: The requested role is not associated to cluster”。

要解决此问题,请将 IAM 角色与 Amazon Redshift 集群关联。

完成以下步骤:

  1. 打开 Amazon Redshift 控制台或 AWS CLI。

  2. 运行以下命令之一:
    对于 Amazon Redshift 预置集群,运行 modify-cluster-iam-roles AWS CLI 命令:

    ## Redshift Provisioned
    aws redshift modify-cluster-iam-roles \
        --cluster-identifier "Cluster Name" \
        --add-iam-roles "IAM Role ARN"

    **注意:**请将 Cluster Name 替换为您的集群名称,将 IAM Role ARN 替换为您的 IAM 角色的 Amazon 资源名称 (ARN)。
    对于 Amazon Redshift Serverless 集群,运行 update-namespace AWS CLI 命令:

    ## Redshift Serverless
    aws redshift-serverless update-namespace \
        --namespace-name Namespace Name \
        --iam-roles "IAM Role ARN"

    **注意:**请将 Namespace Name 替换为您的命名空间名称,将 IAM Role ARN 替换为您的 IAM 角色的 ARN。

有关详细信息,请参阅管理 IAM 角色与集群的关联

IAM 角色没有所需的 S3 权限

如果 IAM 角色没有必要的 S3 权限,则 UNLOAD 命令将失败,且您会收到以下错误消息:

“S3ServiceException:User: arn:aws:sts::<Account ID>:assumed-role/<IAM Role Name>/RedshiftIamRoleSession is not authorized to perform: s3:PutObject on resource: "<S3 Object Path>" because no identity-based policy”。

检查您的 IAM 角色是否具有成功将数据卸载到目标 S3 存储桶所需的 IAM 权限

数据库用户没有必要的表或架构权限

如果数据库用户没有表或架构的必要权限,则用户可能会收到以下错误消息之一:

  • “ERROR: permission denied for schema <Schema Name>”。
  • “ERROR: permission denied for relation <Table Name>”。

要授予数据库用户对架构的 USAGE 权限和对表的 SELECT 权限,请运行以下 GRANT 命令之一:

GRANT USAGE ON SCHEMA Schema Name TO DB User Name;
GRANT SELECT ON TABLE Table Name TO DB User Name;

**注意:**在上述命令中,请将 Schema Name 替换为您的架构名称,将 Table name 替换为您的表名称,将 User Name 替换为用户的用户名。

其他故障排除

要识别查询 ID 和错误消息,请参阅 STL_QUERYSYS_QUERY_HISTORY

有关详细信息,请参阅 STL_ERRORSYS_UNLOAD_HISTORY

AWS 官方已更新 1 年前