当我在 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 bucket 或 prefix 替换为您的 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 集群关联。
完成以下步骤:
-
打开 Amazon Redshift 控制台或 AWS CLI。
-
运行以下命令之一:
对于 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_QUERY 或 SYS_QUERY_HISTORY。
有关详细信息,请参阅 STL_ERROR 或 SYS_UNLOAD_HISTORY。