Publié le :

Récupération des bibliothèques de métadonnées

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script utilise la procédure `PROC METADATA` pour interroger le référentiel de métadonnées (OMR - SAS© 9 Metadata Server). Il envoie une requête XML pour lister les objets de type 'SASLibrary'. La réponse XML est ensuite lue via un mappage XML (SXLEMAP) créé dynamiquement pour produire une table SAS© contenant l'identifiant, le nom, le libref et le moteur de chaque bibliothèque. Ce code est typique des environnements SAS© 9 ou hybrides, mais ne permet pas d'interroger l'infrastructure native de SAS© Viya (qui utilise des microservices/CAS).
Analyse des données

Type : EXTERNE


Les données proviennent d'une interrogation du Serveur de Métadonnées SAS (Metadata Server) via PROC METADATA.

1 Bloc de code
DATA STEP
Explication :
Calcul et stockage dans une macro-variable des drapeaux (flags) nécessaires à la requête de métadonnées (OMI_SUCCINCT, OMI_GET_METADATA, OMI_ALL_SIMPLE).
Copié !
1DATA _null_;
2 flags=2048+256+8;
3 call symputx('flags',flags,'l');
4RUN;
2 Bloc de code
PROC METADATA
Explication :
Exécution de la requête vers le serveur de métadonnées pour récupérer tous les objets 'SASLibrary'. Le résultat XML est stocké dans la référence de fichier temporaire 'response'.
Copié !
1filename response temp;
2/* get list of libraries */
3PROC METADATA in=
4 '<GetMetadataObjects>
5 <Reposid>$METAREPOSITORY</Reposid>
6 <Type>SASLibrary</Type>
7 <Objects/>
8 <NS>SAS</NS>
9 <Flags>&flags</Flags>
10 <Options/>
11 </GetMetadataObjects>'
12 out=response;
13RUN;
3 Bloc de code
DATA STEP
Explication :
Étape de débogage qui écrit le contenu brut de la réponse XML dans le journal SAS.
Copié !
1/* write the response to the log for debugging */
2DATA _null_;
3 INFILE response lrecl=32767;
4 INPUT;
5 put _infile_;
6RUN;
4 Bloc de code
DATA STEP
Explication :
Génération dynamique d'un fichier SXLEMAP (XML Map) pour définir comment parser le fichier XML retourné et extraire les attributs souhaités (Id, Name, Libref, Engine) sous forme de colonnes.
Copié !
1filename sxlemap temp;
2DATA _null_;
3 file sxlemap;
4 put '<SXLEMAP version="1.2" name="SASLibrary">';
5 put '<TABLE name="SASLibrary">';
6 put '<TABLE-PATH syntax="XPath">//Objects/SASLibrary</TABLE-PATH>';
7 put '<COLUMN name="LibraryId">><LENGTH>17</LENGTH>';
8 put '<PATH syntax="XPath">//Objects/SASLibrary/ @Id</PATH></COLUMN>';
9 put '<COLUMN name="LibraryName"><LENGTH>256</LENGTH>>';
10 put '<PATH syntax="XPath">//Objects/SASLibrary/ @Name</PATH></COLUMN>';
11 put '<COLUMN name="LibraryRef"><LENGTH>8</LENGTH>';
12 put '<PATH syntax="XPath">//Objects/SASLibrary/ @Libref</PATH></COLUMN>';
13 put '<COLUMN name="Engine">><LENGTH>12</LENGTH>';
14 put '<PATH syntax="XPath">//Objects/SASLibrary/ @Engine</PATH></COLUMN>';
15 put '</TABLE></SXLEMAP>';
16RUN;
5 Bloc de code
PROC SORT Data
Explication :
Assignation du moteur XML utilisant le fichier de réponse et la map générée, suivie de la création de la table de sortie triée par nom de bibliothèque.
Copié !
1LIBNAME _XML_ xml xmlfileref=response xmlmap=sxlemap;
2 
3/* sort the response by library name */
4PROC SORT DATA=_XML_.saslibrary out=&outds;
5 BY libraryname;
6RUN;
6 Bloc de code
DATA STEP
Explication :
Nettoyage de l'environnement en libérant les références de fichiers (filename) et de bibliothèque (libname).
Copié !
1/* clear references */
2filename sxlemap clear;
3filename response clear;
4LIBNAME _XML_ clear;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Allan Bowe


Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Ce programme illustre une méthode de "bas niveau" extrêmement efficace pour interroger le serveur de métadonnées SAS 9 (OMR). Contrairement aux fonctions d'interface classiques, l'utilisation de PROC METADATA combinée à un moteur XML Mapper permet d'extraire des volumes importants d'informations structurelles en une seule requête réseau, optimisant ainsi les performances lors de l'audit de plateformes complexes.

Recommandations et points de vigilance
La logique des Flags : Le calcul initial (2048+256+8) est crucial. Ces drapeaux indiquent au serveur d'inclure les objets du dépôt courant, de traiter la requête de manière synchrone et de formater la sortie XML. Une erreur dans ces bits peut entraîner une réponse incomplète ou un XML illisible par le moteur SXLEMAP.

Agilité du XML Mapping : La création dynamique du fichier sxlemap est une pratique d'expert. Elle permet d'isoler uniquement les attributs dont vous avez besoin (Id, Name, Libref, Engine) via des expressions XPath. Cela transforme une réponse XML potentiellement verbeuse en une table SAS propre et immédiatement exploitable pour du reporting.

Limites de contexte : Ce code est conçu pour l'architecture Open Metadata Architecture (OMA) de SAS 9. Bien que la compatibilité descendante puisse exister, il est inopérant pour lister les caslibs natives de SAS Viya. Pour Viya, il est préférable d'utiliser l'instruction CASLIB _ALL_ LIST ou d'interroger les API REST via la PROC HTTP. »