Viya BASE Data Connector failed - Cross Environment Data Access (CEDA) translation failed. Some character data was lost during transcoding while loading the table

Lorsque vous essayer de charger des données SAS dans CAS, vous pouvez être confronté au message d'erreur suivant :

ERROR: BASE Data Connector, Cross Environment Data Access (CEDA) translation failed. Some character data was lost during transcoding while loading the table. Either the data contains characters that are not representable in the new encoding or truncation occurred during transcoding. The charMultiplier= import option may prevent the error.

ross Environment Data Access (CEDA) translation failed

Ce message signifie généralement qu'il n'y a pas assez d'espace dans une ou plusieurs colonnes de caractères pour convertir les données en UTF-8.

Ce problème peut se produire lorsque les caractères du codage d'origine sont convertis en un codage nécessitant plus d'octets pour représenter ces mêmes caractères. Par exemple, lorsque des caractères codés en tant que LATIN1, où chaque caractère est représenté avec 1 octet, sont transcodés en UTF-8, où certains caractères requièrent 1, 2 ou même 3 octets, une troncature peut se produire si la colonne de caractères est pas assez large.

Pour résoudre ce problème , vous pouvez utiliser le moteur CVP (character variable padding) avec l'instruction LIBNAME pour lire le jeu de données. Le moteur CVP ajoute un remplissage aux colonnes de caractères. Par défaut, les longueurs de variable de caractère sont multipliées par 1,5.

Dans SASStudio et en exécutant une proc contents sur cette table vous obtenez le message suivant :

NOTE: Le fichier STAFFWIN.DATA est au format d'un autre système ou le chiffrement du fichier ne correspond pas à celui de
la session. Un accès aux données inter-environnement va être utilisé, ce qui pourra nécessiter des ressources UC supplémentaires et réduire les performances.
et le résultat suivant :
sas-table-ceda-win-latin
Il est donc nécessaire de transformer la représentation des données et l'encoding afin de pouvoir les charger dans CAS. Pour cela, utilisons l'engine cvp et le code ci-dessous :
libname zhold cvp "/opt/data/cedaIn";
libname zhnew "/opt/data/cedaOut";
proc copy in=zhold out=zhnew noclone;
select staffwin;
run
Les bibliothèques accessibles avec le moteur CVP sont en lecture seule. Pour enregistrer une copie permanente des données, vous devez créer une nouvelle bibliothèque ( dans mon exemple zhnew) Vérifions maintenant les propriétés de notre nouvelle table :
proc contents data=zhnew.staffwin; run;
Voici une partie de la sortie lorsque l'exemple de code est exécuté sur Linux à l'aide du codage UTF-8: sas-dataset-windows-apres-cvp Il est maintenant possible de charger cette table dans CAS : chargement-data-windows-dans-cas-viya   data-cas-latin-utf8      

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.