Comment résoudre un problème lié à l'échec d'un chargement de données Amazon Redshift ?

Date de la dernière mise à jour : 27/08/2020

Comment résoudre un problème lié à l'échec d'un chargement de données Amazon Redshift ?

Brève description

Utilisez la table STL_LOAD_ERRORS pour identifier les erreurs qui se sont produites au cours de chargements.

Solution

Remarque : les étapes suivantes utilisent un ensemble de données comprenant des villes et des lieux.

1.    Créez le fichier brut venue_pipe0000_part_00 dans un compartiment Amazon Simple Storage Service (Amazon S3) avec le contenu suivant :

7|BMO Field|Toronto|ON|0
16|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

Pour plus d'informations, consultez Charger la table LISTING à partir d'un fichier séparé par une barre verticale (délimiteur par défaut).

2.    Créez une table main_schema.venue1 :

CREATE TABLE VENUE1(
VENUEID SMALLINT,
VENUENAME VARCHAR(100),
VENUECITY VARCHAR(30),
VENUESTATE CHAR(2),
VENUESEATS INTEGER
) DISTSTYLE EVEN;

3.    Créez une vue de chargement pour identifier l'erreur de chargement :

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

4.    Utilisez la commande Copier pour charger des données :

testdb=# copy venue1
testdb-# from 's3://your_S3_bucket/venue/'
testdb-# iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3' delimiter '|' ;

Remarque : Remplacez your_S3_bucket par le nom de votre compartiment S3. Remplacez ensuite arn:aws:iam::123456789012:role/redshiftcopyfroms3 par l'Amazon Resource Name (ARN) de votre rôle AWS Identity and Access Management (IAM). Pour plus d'informations, consultez Paramètres.

5.    Interrogez la vue de chargement pour afficher les informations relatives au chargement de la table :

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

Remarque : Les utilisateurs standard peuvent uniquement afficher leurs propres données lors de l'interrogation de la table STL_LOAD_ERRORS. Pour afficher toutes les données de la table, vous devez être un super-utilisateur.

Le résultat de cette requête contient les informations importantes suivantes :

  • Le fichier à l'origine de l'erreur
  • La colonne à l'origine de l'erreur
  • Le numéro de ligne dans le fichier en entrée
  • La raison de l'exception

Dans l'exemple ci-dessus, l'exception est causée par la valeur de longueur qui doit être ajoutée à la colonne venuestate. La valeur (NC, 25 |) est plus longue que la durée définie dans la DDL VENUESTATE CHAR (2). Pour résoudre cette exception, modifiez le fichier en insérant la valeur correcte :

7|BMO Field|Toronto|ON|0
16|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

6.    Rechargez les données :

testdb=# copy venue1
from '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.

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?