Pour utiliser la table STL_LOAD_ERRORS afin d’identifier les erreurs lors du chargement des données, procédez comme suit :
-
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).
-
Ouvrez la console Amazon Redshift.
-
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;
-
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);
-
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.
-
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
-
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.
-
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.