Skip to content

Wie identifiziere ich Data-API-Abfragefehler in Amazon Redshift?

Lesedauer: 4 Minute
0

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.

AWS OFFICIALAktualisiert vor 2 Monaten