跳至內容

如何解決 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 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 bucketprefix 替換為您的 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 叢集建立關聯。

請完成下列步驟:

  1. 開啟 Amazon Redshift 主控台或 AWS CLI。

  2. 執行下列其中一個命令:
    對於 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_QUERYSYS_QUERY_HISTORY

如需詳細資訊,請參閱 STL_ERRORSYS_UNLOAD_HISTORY

AWS 官方已更新 6 個月前