support clients /

La procédure METALIB

La PROC METALIB devient un outil primordial avec SAS9.1.3 SP4 pour gérer les méta-données associées à des tables.

Dans quels cas utilisera-t-on la procédure METALIB ?

Le moteur metadata, en conjonction avec les fonctionnalités du 'SAS Open Metadata Architecture Authorization', permet à un administrateur de spécifier des droits (stockés dans les méta-données) pour les utilisateurs afin de contrôler les données auxquelles ils peuvent accéder.
Cet article traite du cas où les bibliothèques ont été assignées avec le moteur META (c'est-à-dire que les droits associés aux méta-données sont appliqués). Pour rappel, la méthode d'assignation des bibliothèques en 'mode META' avec la version SAS 9.1.3 est disponible sur notre site.

Avec la version SAS 9.1.3 Service Pack 3, une nouvelle procédure SAS est disponible: PROC METALIB. Elle permet l'automatisation de la création et de la mise à jour des méta-données pour des tables SAS (SAS Data Sets) associées à une bibliothèque.

Le fonctionnement du moteur META utilise l'option METAOUT=ALL par défaut. Avant le Service Pack 4, toute bibliothèque assignée en utilisant ce moteur META permettait une mise à jour simultanée de tables physiques ainsi que des méta-données associées. Le code suivant est un exemple possible de déclaration de bibliothèque de type META (encore une fois, l'option METAOUT=ALL est ici implicite, mais elle aurait pu aussi être précisée, sans changement) :

libname test meta library="bibliotheque de test" metarepository="Foundation" ;

Avec la version SAS 9.1.3 Service Pack 4, le fonctionnement de l'option METAOUT du moteur META n'est plus le même qu'auparavant. En effet, si on utilise une déclaration sans option particulière (comme dans l'exemple ci-dessus), il n'est plus possible de créer, d'effacer des tables ou leurs méta-données associées. Il est en revanche possible d'ajouter, de mettre à jour ou bien d'effacer des observations dans des tables, les méta-données (associées aux tables) devant être présentes au préalable.
Pour plus de renseignements, on pourra se référer à la documentation des nouveautés.

Toujours avec la version SAS 9.1.3 Service pack 4, si on utilise l'option METAOUT=DATA, le moteur META se comporte alors comme le moteur sous-jacent (BASE, V8, V9, ORACLE, ODBC, …) et il est alors possible de créer des tables :

libname test meta library="bibliotheque de test" metarepository="Foundation" metaout=data;

En revanche, les méta-données associées à cette nouvelle table ne sont pas automatiquement ajoutées ; c'est là qu'intervient la PROC METALIB.

Note : il est toujours, bien entendu, possible d'utiliser SAS® Management Console et d'importer la table nouvellement créée. L'intérêt de la PROC METALIB réside dans le fait qu'il est possible de l'intégrer à des fichiers 'batch', à des processus stockés, des tâches SAS Enterprise Guide, etc..

La procédure METALIB

La procédure METALIB met à jour la définition des tables dans les méta-données en se basant sur l'information courante disponible dans les tables physiques.
Le sens de la mise à jour, est toujours le même :
Définition physique > Méta-données

Voici les cas les plus usuels d'utilisation de la procédure METALIB :
Pour toute table présente dans la bibliothèque physique et qui n'a pas de méta-donnée associée, la procédure METALIB ajoutera la définition de la table aux méta-données.

Pour toute table présente dans la bibliothèque physique et qui a des méta-données associées dans le référentiel, la procédure METALIB mettra à jour les méta-données (notamment les informations concernant les colonnes, les index, et les clefs).

Si une table est définie dans les méta-données, mais n'existe pas physiquement, la procédure METALIB pourra supprimer la table des méta-données (de façon optionnelle, il ne s'agit pas du comportement par défaut).

Par défaut, la procédure s'applique à toutes les tables définies dans la bibliothèque ; il est cependant possible de l'appliquer uniquement à certaines tables, ou bien d'exclure certaines tables.

Exemples d'utilisation

Les exemples qui suivent utiliseront la définition de bibliothèque META suivante :
libname test meta library="bibliotheque de test" metarepository="Foundation" metaout=data;

On notera que le moteur sous-jacent (BASE, V8, V9, ORACLE, DB2, ….) à la bibliothèque 'bibliotheque de test' n'est pas précisé (il est contenu dans la définition de la bibliothèque dans les méta-données). Les exemples fournis s'appliquent donc à tous les types de bibliothèques.

Premier exemple :

proc metalib;

omr (library = "bibliotheque de test" user = "sasdemo" password= "sasdemo" repname = "Foundation" protocol = BRIDGE port = "8561");

report;
run;

Remarque : l'instruction report est optionnelle, elle permet d'avoir plus d'informations dans l'écran 'Output' de SAS. On notera la présence d'un espace entre l'instruction OMR et la parenthèse ouverte '( ', cet espace n'est pas optionnel.
Voici le résultat obtenu suite à l'exécution du code ci-dessus :

 

6 tables étaient présentes dans le répertoire physique sur le serveur (ce que l'on observe en regardant l'option 'Total tables analyzed'), sur ces 6 tables, 3 n'étaient pas présentes dans les méta-données et y ont été ajoutées (ce que l'on note en regardant l'option 'Tables added').
Nous pouvons y visualiser le nom des 3 tables ajoutées, ainsi que l'identifiant dans les méta-données.

Deuxième exemple :

options metaserver = linuxRH3 metaport = 8561 metauser = sasdemo metapass = sasdemo metarepository = Foundation;

proc metalib;

omr (library = "bibliotheque de test");

report;
run;

On notera tout d'abord que les paramètres de connexions (utilisateur, serveur, port, ..) sont passés en paramètres pour toute la session et non plus comme paramètre de la seule procédure METALIB.
Voici le résultat obtenu (fenêtre 'output') :

 

On notera donc qu'une seule table est présente en tant que donnée physique ('Total tables analyzed') et qu'elle était déjà présente dans les méta-données. Elle a toutefois été mise à jour ('Tables updated').
En descendant dans la fenêtre, le nom de la table mise à jour apparaît (ma_table_de_test) :

 

Plus bas dans la fenêtre apparaît le nom des variables qui ont été mises à jour :

Pour être plus précis, les variables 'Sex' et 'Age' ont été effacées ('Deleted') car elles existaient dans la définition de la table au niveau des méta-données mais n'existaient plus au niveau de la table physique (table réelle).
La variable 'Salary' a en revanche été ajoutée ('Added') car elle existait dans la table physique mais n'existait pas dans la définition de la table au niveau des méta-données.

A partir de la version SAS 9.1.3 Service Pack 4, la gestion des tables physiques et des meta-données se fait séparément. Il est toujours possible d'utiliser la 'SAS Management Console' pour mettre à jour les méta-données manuellement. Cela étant dit, la procédure METALIB permet une mise à jour aisée des méta-données en se basant sur les données physiques des tables contenues dans une bibliothèque de type META.

 Cet article a pour but de vous donner un aperçu de la PROC METALIB et surtout du 'pourquoi' de son utilisation. Il existe de nombreuses options qui sont détaillées dans la documentation de référence sur le sujet : Plus d'infos 

Antoine Tardien
Consultant Support Clients - SAS France