Wie identifiziere ich Data-API-Abfragefehler in Amazon Redshift?
Ich möchte herausfinden, warum meine Amazon-Redshift-Data-API-Abfrage fehlgeschlagen ist.
Lösung
Die Amazon-Redshift-Data-API ist asynchron. Du musst nicht auf den Abschluss warten, um lang andauernde Abfragen auszuführen.
Wenn eine Abfrage fehlschlägt, wird der Status der Abfrage nicht sofort angezeigt. Verwende die DescribeStatement-API-Aktion, um die Fehlerursachen für einzelne oder mehrere Abfragen zu ermitteln.
Einzelne Abfragen
Statement-ID identifizieren
Um eine einzelne Abfrage für einen Amazon Redshift-Cluster auszuführen, rufe zunächst die Statement-ID ab.
Um eine Statement-ID abzurufen, führe die ExecuteStatement-API-Aktion aus. Der folgende Beispielbefehl authentifiziert sich über AWS Secrets Manager und führt dein SQL-Statement für einen Cluster aus:
aws redshift-data execute-statement --region us-east-1 --secret arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier redshift-cluster-1 --sql "select * from test_table;" --database dev
Beispielausgabe:
{ "ClusterIdentifier": "redshift-cluster-1", "CreatedAt": "2022-09-16T12:22:31.894000+05:30", "Database": "dev", "Id": "458c568d-717b-4f36-90bd-e642bfb06cbf", "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn" }
Der Abschnitt Id in der Ausgabe zeigt die Statement-ID an.
Status überprüfen
Um den Status der Abfrage zu überprüfen, verwende DescribeStatement und gib die Statement-ID ein.
aws redshift-data describe-statement --id 458c568d-717b-4f36-90bd-e642bfb06cbf
Beispielausgabe:
{ "ClusterIdentifier": "redshift-cluster-1", "CreatedAt": "2022-09-16T12:22:31.894000+05:30", "Duration": -1, "Error": "ERROR: relation "test_table" does not exist", "HasResultSet": false, "Id": "458c568d-717b-4f36-90bd-e642bfb06cbf", "QueryString": "select * from test_table;", "RedshiftPid": 1074727629, "RedshiftQueryId": -1, "ResultRows": -1,< "ResultSize": -1, "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn", "Status": "FAILED", "UpdatedAt": "2022-09-16T12:22:32.365000+05:30" }
Der Abschnitt Fehler in der Ausgabe zeigt den folgenden Fehler an: „ERROR: relation "test_table" does not exist“.
Mehrere Abfragen
Statement-ID identifizieren
Um mehrere Abfragen für einen Amazon-Redshift-Cluster auszuführen, rufe zunächst die Statement-ID ab.
Verwende die BatchExecuteStatement-API-Aktion, um eine Statement-ID abzurufen. Siehe folgendes Beispiel:
aws redshift-data batch-execute-statement --region us-east-1 --secret-arn arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier redshift-cluster-1 --database dev --sqls "select * from test_table;" "select * from another_table;"
Beispielausgabe:
{ "ClusterIdentifier": "redshift-cluster-1", "CreatedAt": "2022-09-16T12:37:16.707000+05:30", "Database": "dev", "Id": "08b4b917-9faf-498a-964f-e82a5959d1cb", "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn" }
Der Abschnitt Id in der Ausgabe zeigt die Statement-ID an.
Status überprüfen
Um den Status der Abfrage zu überprüfen, verwende DescribeStatement und gib die Statement-ID ein:
aws redshift-data describe-statement --id 08b4b917-9faf-498a-964f-e82a5959d1cb
Beispielausgabe:
{ "ClusterIdentifier ": "redshift-cluster-1 ", "CreatedAt ": "2022-09-16T12:37:16.707000+05:30 ", "Duration ": 0, "Error ": "Query #1 failed with ERROR: relation \ "test_table\" does not exist ", "HasResultSet ": false, "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb ", "RedshiftPid ": 1074705048, "RedshiftQueryId ": 0, "ResultRows ":-1, "ResultSize ": -1, "SecretArn ": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn ", "Status ": "FAILED ", "SubStatements ": [ { "CreatedAt ": "2022-09-16T12:37:16.905000+05:30 ", "Duration ": -1, "Error ": "ERROR: relation \ "test_table\" does not exist ", "HasResultSet ": false, "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb:1", "QueryString ": "select * from test_table; ", "RedshiftQueryId ": -1, "ResultRows ": -1, "ResultSize ": -1, "Status ": "FAILED ", "UpdatedAt ": "2022-09-16T12:37:17.263000+05:30 " }, { "CreatedAt ": "2022-09-16T12:37:16.905000+05:30", "Duration ": -1, "Error ": "Connection or an prior query failed. ", "HasResultSet ": false, "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb:2 ", "QueryString ": "select * from another_table;", "RedshiftQueryId ": 0, "ResultRows ": -1, "ResultSize": -1, "Status ": "ABORTED ", "UpdatedAt ": "2022-09-16T12:37:17.263000+05:30 " } ], "UpdatedAt ": "2022-09-16T12:37:17.288000+05:30 " }
Die Ausgabe zeigt den Status jedes einzelnen SQL-Statements in deiner Abfrage mit mehreren Statements an. Im Abschnitt Fehler in der Ausgabe wird der Fehler für jedes Statement angezeigt.
Informationen zur Behebung von Problemen mit der Data-API findest du unter Problembehandlung für die Amazon-Redshift-Data-API.
Hinweis: Benutzer mit derselben AWS Identity and Access Management (IAM)-Rolle oder denselben IAM-Berechtigungen wie der Runner einer ExecuteStatement- oder BatchExecuteStatement-API-Operation können dasselbe Statement mit DescribeStatement bearbeiten. Wenn ein anderer Benutzer dasselbe SQL-Statement bearbeiten möchte, muss er die IAM-Rolle des Benutzers übernehmen, der das SQL-Statement ausgeführt hat.
Weitere Informationen findest du unter Überlegungen beim Aufrufen der Amazon-Redshift-Data-API.
Data-API-Ereignisse überwachen
Amazon EventBridge überwacht Data-API-Ereignisse. Wenn du diese Informationen an eine AWS-Lambda-Funktion sendest, stellt die Funktion eine Verbindung zum Amazon Simple Notification Service (Amazon SNS) her, um Benachrichtigungen zuzustellen.
Weitere Informationen findest du unter Erstellen einer ereignisgesteuerten Anwendung mit AWS Lambda und der Amazon-Redshift-Data-API.
- Themen
- Analysen
- Tags
- Amazon Redshift
- Sprache
- Deutsch

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Monaten