Déboguer facilement une bibliothèque SAS META ?

[caption id="" align="aligncenter" width="444"] Même Tom Hanks galère quand il faut déboguer un libname ![/caption]   Aujourd'hui, je vous propose de découvrir une option simple à mettre en oeuvre afin de déboguer facilement une bibliothèque Meta. Si vous ne connaissez pas ce type de bibliothèque utilisant le moteur Meta, vous pouvez commencer par lire la documentation SAS sur ce type de bibliothèque, disponible ici et la. Maintenant, si vous travaillez avec un libname défini dans les métadonnées vous êtes à l'aise avec la syntaxe suivante :
libname nom_libname META library=nom_bibiliotheque_meta metaserver=adresse_serveur_metadata
metaport=port_server_metadata
metaprotocol=bridge
metauser=login_metadata
metapass=password_metadata
metarepository='Foundation';
Toutefois, en utilisant un libname s'appuyant sur l'engine Meta vous ne connaissez pas les options associés à la bibliothèque , ni la syntaxe libname utilisée. Aussi , en cas de problème de connexion, par exemple, il peut être donc intéressant de connaitre la syntaxe soumise ; de savoir ce qui se cache "behind the scenes" comme disent les américains. C'est la qu'entre en scène l'option  LIBDEBUG. Son utilisation est enfantine :
libname TEST META library="malib" libdebug;
syntaxe-sas-option-libdebug En soumettant le code SAS ci-dessus, nous allons créer  la bibliothèque NTZ définit dans les métadonnées : utilisation_de_libdebug
NOTE: Libref NTZ was successfully assigned as follows:
Engine: META
Physical Name: 172.28.193.3
Toutefois, avec l'option libdebug, une ligne est ajouté dans le journal SAS précisant l'instruction libname utilisé pour créer la bibliothèque. Dans le cas de mon exemple voici la ligne correspondante affichée dans le journal :
LIBDEBUG: Libname NTZ NETEZZA 
DATABASE=TEST 
BULKUNLOAD=YES 
PRESERVE_COL_NAMES=YES 
DBMAX_TEXT=2048
AUTOCOMMIT=NO 
PRESERVE_TAB_NAMES=YES 
ACCESS=READONLY 
CONNECTION_GROUP=CONNECT_A 
CONNECTION=SHAREDREAD
TRACE=YES 
SQL_FUNCTIONS=ALL 
INSERTBUFF=10 
MULTI_DATASRC_OPT=IN_CLAUSE 
DIRECT_SQL=NOGENSQL
SERVER="172.28.193.3" USER="admin" 
PASSWORD='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
Magique, non ? L'option nous permet ainsi de visualiser l'ensemble des options utilisé "behind the scenes". Nous pouvons constater que de nombreuses options sont utilisés. L'option permet également de connaitre l'utilisateur de la base de données utilisé (admin) et permet également de se rendre compte que l'accès à la base est en lecture seule (ACCESS=READONLY). Aussi, je vous invite à prendre connaissance de la note Usage Note 46712: Option for debugging META Libname Engine libraries concernant cette option. A noter, que cette option n'est disponible qu'à partir de SAS 9.3 mais activable avec SAS 9.2 Maintenance 3 après avoir installé le hotfix SAS B25226. Pour conclure en beauté, le code ci-dessous permet de remonter quelques informations utiles pour pousser vos investigations : options metadebug; %let my_metauser=%scan(&_METAUSER,1,'@'); %put _metauser="&my_metauser"; %let mymetauser = %scan(%sysget(METAUSER),1,'@'); %put metauser="&mymetauser"; %let mymetapass = %scan(%sysget(METAPASS),1,'@'); %put metapass="&mymetapass"; options msglevel=I sastrace='d,,d,d' nostsuffix sastraceloc=saslog; proc options option=metauser value;run; options sql_ip_trace=all; libname TEST META library='malib' libdebug; Si vous souhaitez en savoir un peu plus sur SAS/ACCESS, vous pouvez visiter le site de SAS mais également parcourir mes articles dédiés à SAS/ACCESS Pour faire un lien vers cet article : https://tinyurl.com/metalibdebug 

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.