Comment identifier les erreurs liées à l'API de données dans Amazon Redshift ?

Lecture de 4 minute(s)
0

Comment identifier la raison pour laquelle une requête d'API de données dans Amazon Redshift a échoué ?

Solution

L'API Amazon Redshift Data est asynchrone, ce qui signifie que vous pouvez exécuter des requêtes de longue durée sans avoir à attendre qu'elles soient terminées. Lorsqu'une requête d'API de données échoue, l'état de la requête ne s'affiche pas immédiatement. Pour déterminer les raisons de l'échec, utilisez l'action DescribeStatement pour une ou plusieurs requêtes. Pour exécuter l'instruction DescribeStatement, vous devez disposer de l'ID de la déclaration.

Requête unique

Pour exécuter une seule requête sur le cluster, utilisez l'action ExecuteStatement pour renvoyer un ID d'instruction :

Remarque : L'exemple de commande suivant utilise la méthode d'authentification AWS Secrets Manager. La commande exécute une instruction SQL sur un cluster et renvoie un identifiant pour récupérer les résultats.

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

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Le résultat est similaire à ce qui suit :

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

L'instruction SQL précédente renvoie un ExecuteStatementOutput, qui inclut l'ID de l'instruction. Vous pouvez vérifier l'état de la requête à l'aide de DescribeStatement et en saisissant l'ID de la déclaration :

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

La sortie de DescribeStatement fournit les informations supplémentaires suivantes :

  • RedshiftPid
  • Durée de requête
  • Nombre de lignes dans
  • Taille du jeu de résultats
  • IdderequêteRedshift

Le résultat est similaire à ce qui suit :

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

La section « Erreur » : de la réponse précédente affiche l'erreur exacte. Ce qui, dans l'exemple précédent, est « ERROR : la relation \ » test_table \ « n'existe pas ».

Requêtes multiples

Pour exécuter plusieurs requêtes sur le cluster, utilisez l'action BatchExecuteStatement pour renvoyer un ID de déclaration :

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

Le résultat est similaire à ce qui suit :

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

Pour connaître l'état des requêtes, utilisez l'instruction DescribeStatement avec l'ID de l'instruction de la réponse précédente :

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

Le résultat est similaire à ce qui suit :

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

La sortie précédente affiche l'état de toutes les sous-instructions pour une requête à plusieurs instructions. La section « Erreur » : de la réponse précédente affiche l'erreur exacte pour chaque sous-instruction.

Pour résoudre les problèmes liés à l'API de données, consultez Résolution des problèmes liés à l'API de données Amazon Redshift.

Surveillance des événements d'API de données

Les événements liés à l'API de données peuvent être surveillés à l'aide d'Amazon EventBridge. Ces informations peuvent être envoyées à une fonction AWS Lambda intégrée à Amazon Simple Notification Service (Amazon SNS) pour envoyer des notifications. Pour plus d'informations, consultez Création d'une application pilotée par les événements avec AWS Lambda et l'API de données Amazon Redshift.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an