Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
如何解決 Amazon Redshift 中的 UNLOAD 命令和 S3 存取問題?
當我在 Amazon Redshift 中執行 UNLOAD 命令時,收到錯誤。
簡短描述
在 Amazon Redshift 中執行 UNLOAD 命令時,可能會因為下列原因而發生錯誤:
- 目標 Amazon Simple Storage Service (Amazon S3) 儲存貯體或首碼包含現有物件。
- 您沒有將 AWS Identity and Access Management (IAM) 角色附加到您的 Amazon Redshift 叢集。
- IAM 角色沒有所需的 S3 儲存貯體權限。
- 資料庫使用者沒有必要的資料表或結構描述權限。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (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.」(S3 上指定的卸載目的地不為空。考慮使用不同的儲存貯體/首碼,手動移除 S3 中的目標檔案,或使用 ALLOWOVERWRITE 選項。)
若要解決該錯誤,請使用 ALLOWOVERWRITE 參數執行以下 UNLOAD 命令:
UNLOAD ('<SELECT query>') TO 's3://S3 bucket or prefix' IAM_ROLE 'IAM Role' ALLOWOVERWRITE;
**注意:**將 S3 bucket 或 prefix 替換為您的 S3 bucket 或首碼,並將 IAM Role 替換為您的 IAM 角色。
如需詳細資訊,請參閱參數。
您未將 IAM 角色與叢集建立關聯
如果您未將 UNLOAD 命令中指定的 IAM 角色與 Amazon Redshift 叢集建立關聯,那麼您會收到下列錯誤訊息:
「UnauthorizedException, error type : 138, message: The requested role is not associated to cluster」(UnauthorizedException,錯誤類型:138訊息:請求的角色未與叢集建立關聯)。
若要解決此問題,請將 IAM 角色與 Amazon Redshift 叢集建立關聯。
請完成下列步驟:
-
開啟 Amazon Redshift 主控台或 AWS CLI。
-
執行下列其中一個命令:
對於 Amazon Redshift Provisioned,執行 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 角色 ARN) 替換為您 IAM 角色的 Amazon Resource Name (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 角色的 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」(S3ServiceException:User: arn:aws:sts:::assumed-role//RedshiftIamRoleSession is not 無權在資源上執行:s3:PutObject:因為沒有身份型政策。)
檢查您的 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。
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前