Cartographie des données SAS : Le guide complet pour extraire vos structures via le serveur de métadonnées

Ce code est également disponible en : Deutsch Español
Niveau de difficulté
Expert
Publié le :
Michael

Le Conseil de l'Expert

Michael
Responsable de l'infrastructure Viya.

L'extraction de métadonnées via le langage SAS est une compétence d'audit indispensable pour tout administrateur souhaitant garantir la gouvernance et la traçabilité de ses données. Ce script ne se contente pas de lister des fichiers ; il interroge intelligemment l'architecture logique de votre environnement.

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="my.sas.server"
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;
L'Astuce Pro
Soyez vigilant sur les droits d'accès. La fonction metadata_getnobj ne retournera que les objets pour lesquels l'utilisateur spécifié dans les options metauser possède l'autorisation "ReadMetadata". Une liste incomplète dans work.libinfo est souvent le signe de restrictions de sécurité au niveau du référentiel de métadonnées plutôt qu'une erreur de code.
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


Documentation liée

Aucune documentation spécifique pour cette catégorie.