Direkt zum Inhalt

Wie behebe ich Probleme mit dem UNLOAD-Befehl und dem S3-Zugriff in Amazon Redshift?

Lesedauer: 4 Minute
0

Wenn ich den Befehl UNLOAD in Amazon Redshift ausführe, erhalte ich eine Fehlermeldung.

Kurzbeschreibung

Wenn du UNLOAD-Befehle in Amazon Redshift ausführst, können aus den folgenden Gründen Fehler auftreten:

  • Der Ziel-Bucket oder das Präfix von Amazon Simple Storage Service (Amazon S3) enthält vorhandene Objekte.
  • Du hast die AWS Identity and Access Management (IAM)-Rolle nicht an das Amazon Redshift-Cluster angehängt.
  • Die IAM-Rolle hat nicht die erforderlichen S3-Bucket-Berechtigungen.
  • Der Datenbankbenutzer hat nicht die erforderlichen Tabellen- oder Schemaberechtigungen.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Objekte sind im S3-Bucket oder -Präfix vorhanden

Wenn Objekte bereits im Ziel-S3-Bucket oder -Präfix vorhanden sind, wird möglicherweise die folgende Fehlermeldung angezeigt:

„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.“

Führe den folgenden UNLOAD-Befehl mit dem Parameter ALLOWOVERWRITE aus, um den Fehler zu beheben:

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

Hinweis: Ersetze S3-Bucket oder **Präfix ** durch den S3-Bucket oder -Präfix und IAM-Rolle durch die IAM-Rolle.

Weitere Informationen findest du unter Parameter.

Du hast die IAM-Rolle nicht mit dem Cluster verknüpft

Wenn du die im UNLOAD-Befehl angegebene IAM-Rolle nicht mit dem Amazon Redshift-Cluster verknüpft hast, wird die folgende Fehlermeldung angezeigt:

„UnauthorizedException, error type : 138, message: The requested role is not associated to cluster".

Um das Problem zu lösen, verknüpfe die IAM-Rolle mit deinem Amazon-Redshift-Cluster.

Führe die folgenden Schritte aus:

  1. Öffne die Amazon Redshift-Konsole oder die AWS-CLI.

  2. Führe einen der folgenden Befehle aus:
    Führe für Amazon Redshift Provisioned den AWS-CLI-Befehl modify-cluster-iam-roles aus:

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

    Hinweis: Ersetze den Cluster-Namen durch den Namen des Clusters und den IAM-Rollen-ARN durch den Amazon-Ressourcennamen (ARN) der IAM-Rolle.
    Führe für Amazon Redshift Serverless den AWS-CLI-Befehl update-namespace aus:

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

    Hinweis: Ersetze Namespace-Namen durch den Namen des Namespace und IAM-Rollen-ARN durch den ARN der IAM-Rolle.

Weitere Informationen findest du unter erwalten der IAM-Rollenzuordnung mit einem Cluster.

Die IAM-Rolle hat nicht die erforderlichen S3-Berechtigungen

Wenn die IAM-Rolle nicht über die erforderlichen S3-Berechtigungen verfügt, schlägt der UNLOAD-Befehl fehl und du erhältst die folgende Fehlermeldung:

„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“.

Stelle sicher, dass die IAM-Rolle über die erforderlichen IAM-Berechtigungen verfügt, um Daten erfolgreich in den Ziel-S3-Bucket zu entladen.

Der Datenbankbenutzer hat nicht die erforderlichen Tabellen- oder Schemaberechtigungen

Wenn der Datenbankbenutzer nicht über die erforderlichen Berechtigungen für die Tabelle oder das Schema verfügt, wird dem Benutzer möglicherweise eine der folgenden Fehlermeldungen angezeigt:

  • „ERROR: permission denied for schema <Schema Name>“.
  • „ERROR: permission denied for relation <Table Name>“.

Um dem Datenbankbenutzer die USAGE-Berechtigung für das Schema und die SELECT-Berechtigung für die Tabelle zu gewähren, führe einen der folgenden GRANT-Befehle aus:

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

Hinweis: Ersetze in den vorherigen Befehlen den Schemanamen durch den Namen des Schemas, den Tabellennamen durch den Namen der Tabelle und den Benutzernamen durch den Benutzernamen des Benutzers.

Zusätzliche Problembehandlung

Informationen zur Identifizierung der Abfrage-ID und der Fehlermeldungen findest du unter STL_QUERY oder SYS_QUERY_HISTORY.

Weitere Informationen findest du unter STL_ERROR oder SYS_UNLOAD_HISTORY.

AWS OFFICIALAktualisiert vor 6 Monaten