web-dev-qa-db-fra.com

Délimiteur de commande COPIE Redshift introuvable

J'essaie de charger des fichiers texte sur Redshift. Ils sont délimités par des tabulations, sauf après la valeur de la dernière ligne. Cela provoque une erreur de délimiteur non trouvé. Je vois seulement un moyen de définir le délimiteur de champ dans l'instruction COPY, pas un moyen de définir un délimiteur de ligne. Des idées n'impliquant pas le traitement de tous mes fichiers pour ajouter un onglet à la fin de chaque ligne?

Merci

24
Erik Darling

Je ne pense pas que le problème réside dans l'absence de <tab> à la fin des lignes. Etes-vous sûr que TOUTES les lignes ont un nombre correct de champs?

Exécutez la requête:

select le.starttime, d.query, d.line_number, d.colname, d.value,
le.raw_line, le.err_reason    
from stl_loaderror_detail d, stl_load_errors le
where d.query = le.query
order by le.starttime desc
limit 100

pour obtenir le rapport d'erreur complet. Il montrera le nom du fichier avec des erreurs, un numéro de ligne incorrect et des détails d'erreur.

Cela aidera à trouver où se situe le problème.

39
Tomasz Tybulewicz

Vous pouvez obtenir l'erreur de délimiteur non trouvé si votre ligne contient moins de colonnes que prévu. Certains générateurs CSV peuvent ne générer qu'un seul guillemet à la fin si les dernières colonnes sont nulles.

Pour résoudre ce problème, vous pouvez utiliser FILLRECORD avec les options de copie Redshift.

34
Madhava Carrillo

Cela peut ne pas être directement lié à la question du PO mais j'ai reçu la même erreur Delimiter not found qui était provoquée par des caractères de nouvelle ligne dans l'un des champs.

Pour tout champ que vous pensez avoir des caractères de nouvelle ligne, vous pouvez les supprimer avec: 

replace(my_field, chr(10), '')
1
ameier38

Je sais que cela a été répondu, mais je viens de traiter avec la même erreur et j'avais une solution simple, donc je vais le partager.

Cette erreur peut également être résolue en indiquant les colonnes spécifiques de la table copiées à partir des fichiers s3 (si vous savez quelles sont les colonnes dans les données de s3) . Dans mon cas, les données contenaient moins de colonnes que le nombre La réponse de Madahava avec l'option 'FILLRECORD' DID résout le problème pour moi, mais j'ai remarqué qu'une colonne supposée être remplie avec des valeurs par défaut restait nulle.

COPY <table> (col1, col2, col3) from 's3://somebucket/file' ...
1
ChicoDelaBarrio