Passer au contenu

Comment identifier les erreurs de requête d'API de données dans Amazon Redshift ?

Lecture de 4 minute(s)
0

Je souhaite déterminer pourquoi ma requête d'API de données Amazon Redshift a échoué.

Résolution

L'API de données Amazon Redshift est asynchrone. Il n’est pas nécessaire d'attendre la fin de l’opération pour exécuter des requêtes de longue durée.

Lorsqu'une requête échoue, son statut ne s'affiche pas immédiatement. Utilisez l'action d'API DescribeStatement pour déterminer les raisons de l'échec d'une ou de plusieurs requêtes.

Requêtes uniques

Identifier l'ID d’instruction

Pour exécuter une requête unique sur un cluster Amazon Redshift, commencez par obtenir l'ID d’instruction.

Pour obtenir un ID d’instruction, exécutez l'action d'API ExecuteStatement. L'exemple de commande suivant s'authentifie via AWS Secrets Manager et exécute votre instruction SQL sur un cluster :

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

Exemple de sortie :

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

La section Id de la sortie affiche l'ID d’instruction.

Vérifier le statut

Pour vérifier le statut de la requête, utilisez DescribeStatement et entrez l'ID d’instruction.

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

Exemple de sortie :

{
    "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 sortie affiche l'erreur suivante : « ERROR: relation "test_table" does not exist ».

Requêtes multiples

Identifier l'ID d’instruction

Pour exécuter plusieurs requêtes sur un cluster Amazon Redshift, commencez par obtenir l'ID d’instruction.

Pour obtenir un ID d’instruction, utilisez l'action d'API BatchExecuteStatement. Reportez-vous à l’exemple suivant :

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

Exemple de sortie :

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

La section Id de la sortie affiche l'ID d’instruction.

Vérifier le statut

Pour vérifier le statut de la requête, utilisez DescribeStatement et entrez l'ID d’instruction :

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

Exemple de sortie :

{
    "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 affiche l'état de chaque instruction SQL individuelle de votre requête multi-instructions. La section Erreur de la sortie affiche l'erreur pour chaque instruction.

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

Remarque : Les utilisateurs ayant le même rôle Gestion des identités et des accès AWS (AWS IAM) ou les mêmes autorisations IAM que l'exécutant d'une opération d'API ExecuteStatement ou BatchExecuteStatement peuvent agir sur la même instruction avec DescribeStatement. Si un autre utilisateur souhaite agir sur la même instruction SQL, il doit endosser le rôle IAM de l'utilisateur qui a exécuté l'instruction SQL.

Pour plus d'informations, consultez la section Considérations à prendre en compte lors de l'appel de l'API de données Amazon Redshift.

Événements de l'API de surveillance des données

Amazon EventBridge surveille les événements de l'API de données. Si vous envoyez ces informations à une fonction AWS Lambda, celle-ci se connecte à Amazon Simple Notification Service (Amazon SNS) pour envoyer des notifications.

Pour plus d'informations, consultez la section Création d'une application basée sur les événements avec AWS Lambda et l'API de données Amazon Redshift.

AWS OFFICIELA mis à jour il y a 8 mois