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
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.
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.
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), '')
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' ...