當我在 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。