Comment résoudre les erreurs de chargement des données rencontrées lorsque j’utilise la commande COPY dans Amazon Redshift ?

Lecture de 4 minute(s)
0

J’ai essayé d’utiliser la commande COPY pour charger un fichier plat. Cependant, je rencontre des problèmes ou des erreurs lors du chargement des données dans Amazon Redshift.

Brève description

Utilisez la table STL_LOAD_ERRORS pour identifier les erreurs de chargement des données qui se produisent lors du chargement d’un fichier plat. La table STL_LOAD_ERRORS peut en effet vous aider à suivre la progression d’un chargement de données et à enregistrer ses éventuelles défaillances ou erreurs. Une fois le problème résolu, utilisez la commande COPY pour charger à nouveau les données du fichier plat.

Remarque : si vous utilisez la commande COPY pour charger un fichier plat au format Parquet, vous pouvez également utiliser la table SVL_S3LOG pour identifier les erreurs.

Résolution

Remarque : les étapes suivantes utilisent un exemple de jeu de données portant sur des villes et des sites.

Pour utiliser la table STL_LOAD_ERRORS afin d’identifier les erreurs lors du chargement des données, procédez comme suit :

  1. Examinez les données de votre exemple de fichier plat et confirmez que les données source sont valides :

    7|BMO Field|Toronto|ON|016|TD Garden|Boston|MA|0  
    23|The Palace of Auburn Hills|Auburn Hills|MI|0  
    28|American Airlines Arena|Miami|FL|0  
    37|Staples Center|Los Angeles|CA|0  
    42|FedExForum|Memphis|TN|0  
    52|PNC Arena|Raleigh|NC  ,25   |0  
    59|Scotiabank Saddledome|Calgary|AB|0  
    66|SAP Center|San Jose|CA|0  
    73|Heinz Field|Pittsburgh|PA|65050

    Dans l’exemple de fichier demo.txt ci-dessus, une barre verticale sépare les cinq champs utilisés. Pour en savoir plus, consultez la page Charger la table LISTING à partir d’un fichier délimité par une barre verticale (délimiteur par défaut).

  2. Ouvrez la console Amazon Redshift.

  3. Utilisez le langage de définition de données (DDL) suivant pour créer un exemple de table :

    CREATE TABLE VENUE1(VENUEID SMALLINT,  
    VENUENAME VARCHAR(100),  
    VENUECITY VARCHAR(30),  
    VENUESTATE CHAR(2),  
    VENUESEATS INTEGER  
    ) DISTSTYLE EVEN;
  4. Pour identifier la cause de l’erreur de chargement des données, créez une vue pour prévisualiser les colonnes pertinentes de la table STL_LOAD_ERRORS :

    create view loadview as(select distinct tbl, trim(name) as table_name, query, starttime,  
    trim(filename) as input, line_number, colname, err_code,  
    trim(err_reason) as reason  
    from stl_load_errors sl, stv_tbl_perm sp  
    where sl.tbl = sp.id);
  5. Pour charger les données, exécutez la commande COPY :

    copy Demofrom 's3://your_S3_bucket/venue/'  
    iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3'  
    delimiter '|' ;

    Remarque : remplacez your_S3_bucket par le nom de votre compartiment S3 et arn:aws:iam::123456789012:role/redshiftcopyfroms3 par l’ARN de votre rôle AWS Identity and Access Management (AWS IAM). Le rôle IAM doit être autorisé à accéder aux données de votre compartiment S3. Pour en savoir plus, consultez la page Paramètres.

  6. Pour afficher et consulter les détails de l’erreur de chargement dans la table, interrogez la vue du chargement :

    testdb=# select * from loadview where table_name='venue1';tbl | 265190  
    table_name | venue1  
    query | 5790  
    starttime | 2017-07-03 11:54:22.864584  
    input | s3://  
    your_S3_bucket/venue/venue_pipe0000_part_00  
    line_number | 7  
    colname | venuestate  
    err_code | 1204  
    reason | Char length exceeds DDL length

    Dans l’exemple précédent, l’exception est provoquée par la valeur de longueur et doit être ajoutée à la colonne venuestate. La valeur (NC ,25 |) est supérieure à la longueur définie dans le DDL VENUESTATE CHAR(2).
    Pour résoudre ce problème, effectuez l’une des opérations suivantes :
    Si les données sont censées dépasser la longueur définie de la colonne, mettez à jour la définition de la table pour modifier la longueur de la colonne.
    -ou-
    Si les données ne sont pas correctement formatées ou transformées, modifiez les données du fichier pour utiliser la valeur appropriée.
    Le résultat de la requête inclut les informations suivantes :
    Le fichier à l’origine de l’erreur
    La colonne à l’origine de l’erreur
    Le numéro de ligne dans le fichier d’entrée
    La raison de l’exception

  7. Modifiez les données de votre fichier de chargement pour utiliser les valeurs correctes :

    7|BMO Field|Toronto|ON|016|TD Garden|Boston|MA|0  
    23|The Palace of Auburn Hills|Auburn Hills|MI|0  
    28|American Airlines Arena|Miami|FL|0  
    37|Staples Center|Los Angeles|CA|0  
    42|FedExForum|Memphis|TN|0  
    52|PNC Arena|Raleigh|NC|0  
    59|Scotiabank Saddledome|Calgary|AB|0  
    66|SAP Center|San Jose|CA|0  
    73|Heinz Field|Pittsburgh|PA|65050

    Remarque : la longueur doit correspondre à la longueur de colonne définie.

  8. Tentez à nouveau de charger les données :

    testdb=# copy Demofrom 's3://your_S3_bucket/sales/'  
    iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3' delimiter '|' ;  
    INFO:  Load into table 'venue1' completed, 808 record(s) loaded successfully.

    Remarque : la table STL_LOAD_ERRORS ne peut contenir qu’un nombre limité de journaux pour une durée d’environ 4 à 5 jours. Les utilisateurs standard peuvent uniquement consulter leurs propres données lorsqu’ils interrogent la table STL_LOAD_ERRORS. Pour afficher toutes les données de la table, vous devez être un super-utilisateur.

Informations connexes

Bonnes pratiques Amazon Redshift pour la conception de tables

Bonnes pratiques de chargement des données sur Amazon Redshift

Tables système pour la résolution des problèmes de chargement de données

Utilisation des recommandations d’Amazon Redshift Advisor

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