Publié le :
Administration CREATION_INTERNE

Extraction des métadonnées des bibliothèques et tables SAS

Ce code est également disponible en : Deutsch Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le programme établit une connexion à un serveur de métadonnées SAS© en utilisant les options système (metaserver, metaport, etc.). Il parcourt ensuite toutes les bibliothèques SAS© ('SASLibrary') enregistrées dans les métadonnées. Pour chaque bibliothèque trouvée, il récupère ses attributs comme le nom, le libref, et l'ID. Ensuite, il effectue une seconde recherche pour trouver toutes les tables physiques ('PhysicalTable') associées à cette bibliothèque. Finalement, il écrit les informations du libref de la bibliothèque, de son nom, et du nom de chaque table associée dans la table `work.libinfo`.
Analyse des données

Type : CREATION_INTERNE


La source de données est le serveur de métadonnées SAS lui-même. La table `work.libinfo` est entièrement générée par le script en interrogeant les métadonnées via des fonctions spécifiques comme `metadata_resolve` et `metadata_getnobj`. Aucune donnée externe n'est lue.

1 Bloc de code
OPTIONS
Explication :
Ce bloc configure les paramètres de connexion au serveur de métadonnées SAS. Il définit l'adresse du serveur, le port, les informations d'identification de l'utilisateur, le référentiel à utiliser et le protocole de communication.
Copié !
1/* Define Metadata Server connection. */
2options
3 metaserver="meta.demo.sas.com"
4 metaport=8561
5 metauser="sasadm @saspw"
6 metapass="password"
7 metarepository=Foundation
8 metaprotocol=bridge;
2 Bloc de code
DATA STEP Data
Explication :
Ce DATA STEP crée la table `work.libinfo`. Il initialise les variables, puis utilise la fonction `metadata_resolve` pour trouver toutes les bibliothèques SAS dans les métadonnées. Note: la requête `obj` contient une référence de fichier qui semble invalide pour une requête de métadonnées. Pour chaque bibliothèque trouvée, il boucle pour extraire ses propriétés (`metadata_getattr`) et recherche ensuite les tables physiques associées via une seconde requête `metadata_resolve`. Si des tables sont trouvées, leurs noms sont extraits et une ligne est écrite dans la table de sortie `work.libinfo` avec le libref, le nom de la bibliothèque et le nom de la table.
Copié !
1DATA work.libinfo;
2 
3/*declare and initialize variables */
4 LENGTH
5 type $ 20
6 lib_ref $ 8
7 lib_uri lib_name app_uri app_name dir_uri tab_uri tab_name $ 50
8 id lib_id $ 17
9 path $ 255;
10 keep lib_ref lib_name tab_name;
11 call missing(of _character_);
12 
13 /* Define library search parameters. */
14 obj="omsobj:SASLibrary? @code_sas_json/RFValid.json contains '.'";
15 
16 /* Search Metadata for libraries */
17 
18 libcount=metadata_resolve(obj,type,id);
19 put "INFO: Found " libcount "libraries.";
20 
21 /* for each library found, extract name and associated */
22 /* properties (first associated application server, path) */
23 IF libcount > 0 THEN DO n=1 to libcount;
24 
25 rc=metadata_getnobj(obj,n,lib_uri);
26 rc=metadata_getattr(lib_uri,"Name",lib_name);
27 rc=metadata_getattr(lib_uri,"Id",lib_id);
28 rc=metadata_getattr(lib_uri,"Libref",lib_ref);
29 rc=metadata_getnasn(lib_uri,"DeployedComponents",1,app_uri);
30 rc=metadata_getattr(app_uri,"Name",app_name);
31 rc=metadata_getnasn(lib_uri,"UsingPackages",1,dir_uri);
32 rc=metadata_getattr(dir_uri,"DirectoryName",path);
33 
34 /* Define a query to search for any tables */
35 /* associated with the library in Metadata. */
36 
37 tabobj="omsobj:PhysicalTable?PhysicalTable[TablePackage/SASLibrary[ @Id='"||lib_id||"']] or [TablePackage/DatabaseSchema/UsedByPackages/SASLibrary[ @Id='"||lib_id||"']]";
38 
39 /* Count how many associations exist. */
40 
41 tabcount=metadata_resolve(tabobj,type,id);
42 
43 /* If there are any, pull the name of each one and write out the data set. */
44 
45 IF tabcount > 0 THEN DO t=1 to tabcount;
46 rc=metadata_getnobj(tabobj,t,tab_uri);
47 rc=metadata_getattr(tab_uri,"Name",tab_name);
48 OUTPUT; /* Push results to table */
49 END;
50 call missing (path); /* clear path variable. */
51 END;
52 ELSE put "INFO: No libraries to resolve.";
53RUN;
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 : Author: Greg Wootton Date: 08FEB2017