Wie identifiziere ich Fehler im Zusammenhang mit der Daten-API in Amazon Redshift?

Letzte Aktualisierung: 31.10.2022

Wie erkenne ich den Grund, warum eine Daten-API-Abfrage in Amazon Redshift fehlgeschlagen ist?

Auflösung

Die Daten-API von Amazon Redshift ist asynchron, was bedeutet, dass Sie Abfragen mit langer Ausführungsdauer ausführen können, ohne warten zu müssen, bis sie abgeschlossen sind. Wenn eine Daten-API-Abfrage fehlschlägt, wird der Status der Abfrage nicht sofort angezeigt. Verwenden Sie die Aktion DescribeStatement für einzelne oder mehrere Abfragen, um die Gründe für den Fehler zu ermitteln. Um DescribeStatement ausführen zu können, benötigen Sie die Anweisungs-ID.

Einzelne Abfrage

Um eine einzelne Abfrage für den Cluster auszuführen, verwenden Sie die Aktion ExecuteStatement, um eine Anweisungs-ID zurückzugeben:

Hinweis: Der folgende Beispielbefehl verwendet die Authentifizierungsmethode von AWS Secrets Manager. Der Befehl führt eine SQL-Anweisung für einen Cluster aus und gibt einen Bezeichner zurück, um die Ergebnisse abzurufen.

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

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version des AWS CLI verwenden.

Die Ausgabe sieht wie folgt aus:

{
    "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"
}

Die vorhergehende SQL-Anweisung gibt ein ExecuteStatementOutput zurück, das die Anweisung Id enthält. Sie können den Status der Abfrage mit DescribeStatement überprüfen und die Anweisungs-ID eingeben:

aws redshift-data describe-statement --id 458c568d-717b-4f36-90bd-e642bfb06cbf

Die Ausgabe für DescribeStatement enthält die folgenden zusätzlichen Details:

  • RedshiftPid
  • Abfragedauer
  • Anzahl der Zeilen in
  • Größe der Ergebnismenge
  • RedshiftQueryID

Die Ausgabe sieht wie folgt aus:

{
    "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 vorherigen Antwort zeigt den genauen Fehler an. Das ist im vorherigen Beispiel „ERROR: relation\"test_table\" ist nicht vorhanden“.

Mehrfache Abfragen

Um mehrere Abfragen für den Cluster auszuführen, verwenden Sie die Aktion BatchExecuteStatement, um eine Anweisungs-ID zurückzugeben:

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;"

Die Ausgabe sieht wie folgt aus:

{
    "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"
}

Um den Status der Abfragen abzurufen, verwenden Sie das DescribeStatement mit der Anweisungs-ID aus der vorherigen Antwort:

aws redshift-data describe-statement --id 08b4b917-9faf-498a-964f-e82a5959d1cb

Die Ausgabe sieht wie folgt aus:

{
    "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 "
}

In der vorherigen Ausgabe wird der Status aller Unteranweisungen für eine Abfrage mit mehreren Anweisungen angezeigt. Der Abschnitt „Error“: in der vorherigen Antwort zeigt den genauen Fehler für jede Unteranweisung an.

Informationen zur Behebung von Problemen mit der Daten-API finden Sie unter Problembehandlung für Amazon-Redshift-Daten-API.

Überwachen von Daten-API-Ereignissen

Daten-API-Ereignisse können mit Amazon EventBridge überwacht werden. Diese Informationen können an eine AWS-Lambda-Funktion gesendet werden, die in Amazon Simple Notification Service (Amazon SNS) integriert ist, um Benachrichtigungen zu senden. Weitere Informationen finden Sie unter Erstellen einer ereignisgesteuerten Anwendung mit AWS Lambda und der Amazon-Redshift-Daten-API.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?