La console Amazon Redshift et la réponse du client SQL indique que la commande COPY a abouti, mais les données ne sont pas copiées dans la table Amazon Redshift. Aucune erreur n'est signalée dans les tables STL_LOAD_ERRORS, STL_LOADERROR_DETAIL et STL_ERROR.

Ce problème survient lorsque la commande COPY aboutit, mais qu'elle fait ensuite l'objet d'un rollback en raison d'une transaction SQL non validée. Pour garantir l'intégrité des transactions, la commande COPY est exécutée dans le cadre d'une transaction SQL. Toute transaction SQL non validée entraîne le rollback des commandes qui y sont exécutées. Comme ce comportement est intentionnel, aucune erreur n'apparaît dans la console Amazon Redshift ni dans les tables des journaux d'erreurs.

Pour évaluer et résoudre ce problème, suivez la procédure ci-dessous :

  1. A l'aide de l'ID de requête de la commande COPY, exécutez la requête suivante par rapport à la table STL_COMMIT_STATS :
         SELECT q.query, cs.xid, cs.endtime
         FROM stl_query q, stl_commit_stats cs
         WHERE q.query = QUERY ID
         AND q.xid = cs.xid;
    Si cette requête ne renvoie aucun résultat, la transaction de la commande COPY n'a pas été validée, initiant ainsi un rollback. Ce cas de figure se produit généralement en raison de la désactivation par défaut de la validation automatique des transactions par plusieurs clients SQL si celles-ci ne sont pas explicitement déclarées.
  2. Pour déterminer le comportement par défaut des transactions, consultez la documentation du client SQL correspondant.
  3. Si le comportement par défaut consiste à désactiver la validation automatique, procédez de l'une des manières suivantes pour résoudre ce problème :
    • Activez la validation automatique pour ce client SQL. Cette solution n'est pas toujours la plus appropriée, mais elle permet de résoudre le problème sans avoir à modifier les commandes SQL existantes. Cette solution reste toutefois la plus pratique dans certains cas, comme lorsque vous effectuez plusieurs chargements de données ad hoc.
    • Validez explicitement la transaction après la commande COPY avec l'instruction SQL COMMIT ou END. Si cette commande est exécutée par programme, sa syntaxe doit être similaire à l'instruction conn.commit() de la classe de connexion Python, comme décrit dans la documentation de Psycopg 2.6.

AWS, Amazon Redshift, commande COPY, SQL, transaction, validation automatique, aucun enregistrement


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.