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.
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.
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é !
data work.libinfo;
/*declare and initialize variables */
length
type $ 20
lib_ref $ 8
lib_uri lib_name app_uri app_name dir_uri tab_uri tab_name $ 50
id lib_id $ 17
path $ 255;
keep lib_ref lib_name tab_name;
call missing(of _character_);
/* Define library search parameters. */
obj="omsobj:SASLibrary? @code_sas_json/RFValid.json contains '.'";
/* Search Metadata for libraries */
libcount=metadata_resolve(obj,type,id);
put "INFO: Found " libcount "libraries.";
/* for each library found, extract name and associated */
/* properties (first associated application server, path) */
if libcount > 0 then do n=1 to libcount;
rc=metadata_getnobj(obj,n,lib_uri);
rc=metadata_getattr(lib_uri,"Name",lib_name);
rc=metadata_getattr(lib_uri,"Id",lib_id);
rc=metadata_getattr(lib_uri,"Libref",lib_ref);
rc=metadata_getnasn(lib_uri,"DeployedComponents",1,app_uri);
rc=metadata_getattr(app_uri,"Name",app_name);
rc=metadata_getnasn(lib_uri,"UsingPackages",1,dir_uri);
rc=metadata_getattr(dir_uri,"DirectoryName",path);
/* Define a query to search for any tables */
/* associated with the library in Metadata. */
tabobj="omsobj:PhysicalTable?PhysicalTable[TablePackage/SASLibrary[ @Id='"||lib_id||"']] or [TablePackage/DatabaseSchema/UsedByPackages/SASLibrary[ @Id='"||lib_id||"']]";
/* Count how many associations exist. */
tabcount=metadata_resolve(tabobj,type,id);
/* If there are any, pull the name of each one and write out the data set. */
if tabcount > 0 then do t=1 to tabcount;
rc=metadata_getnobj(tabobj,t,tab_uri);
rc=metadata_getattr(tab_uri,"Name",tab_name);
output; /* Push results to table */
end;
call missing (path); /* clear path variable. */
end;
else put "INFO: No libraries to resolve.";
run;
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 THENDO 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.";
53
RUN;
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.