10
votes

S3 -> Redshift ne peut pas gérer UTF8

Nous avons un fichier dans S3 qui est chargé dans redshift via la commande copie . L'importation échoue car un Varcharchar (20) contient un Ä qui est en cours de traduction en .. pendant la commande de copie et est maintenant aussi long pour les 20 caractères.

J'ai vérifié que les données sont correctes dans S3, mais la commande copie ne comprend pas les caractères UTF-8 pendant l'importation. Quelqu'un a-t-il trouvé une solution pour cela?


0 commentaires

5 Réponses :


1
votes

1 commentaires

Mais les personnages ne sont pas invalides. Je ne veux pas qu'il détruisait les données, je veux qu'il importe correctement.



0
votes

J'ai une expérience similaire que certains caractères que certains caractères comme Ä n'ont pas été copiés correctement lors du chargement de données MySqldump dans notre cluster redshift. C'était parce que l'encodage de MySqldump était latin1 qui est l'ensemble de caractères par défaut de MySQL. Il est préférable de vérifier le codage du personnage des fichiers pour copier en premier. Si l'encodage de vos fichiers n'est pas UTF-8, vous devez coder vos fichiers.


0 commentaires

15
votes

TL; DR

La longueur des octets pour votre varchar doit simplement être plus grande.

Détail

Les caractères multi-octets (UTF-8) sont pris en charge dans le type de données varchar , mais la longueur fournie est dans octets , pas caractères.

Documentation AWS pour la charge de caractères multibytes Erreurs stipule les éléments suivants:

varchar Les colonnes acceptent des caractères multibyte utf-8, à un maximum de quatre octets.

Par conséquent, si vous voulez que le caractère Ä soit autorisé, vous devez autoriser 2 octets pour ce caractère, au lieu de 1 octet.

AWS documentation VARCHAR ou caractère variable étage ce qui suit:

... de sorte qu'un varchar (120) Colonne est composé d'un maximum de 120 caractères monocycliques, 60 caractères de deux octets, 40 caractères de trois octets, ou 30 caractères de quatre octets.

Pour une liste de caractères UTF-8 et leurs longueurs d'octets, c'est une bonne référence: liste de caractères complète pour UTF-8

Informations détaillées sur le caractère Unicode 'Lettre latin Capital Lettre A avec la diagèse' (U + 00C4) peut être trouvé ici .


0 commentaires

0
votes

Utilisation "AccepterSInvCharrs Escape" dans la commande Copy a résolu le problème pour nous avec une altération des données mineures.


0 commentaires

0
votes

Vous devez augmenter la taille de votre colonne VARCHAR. Vérifiez la table stl_load_errors, voir quelle est la longueur de la valeur du champ réelle des lignes en panne et augmentez donc la taille. EDIT: Il suffit de réaliser que c'est un article très ancien, de toute façon si quelqu'un en a besoin.


0 commentaires