Publié le :
Administration CREATION_INTERNE

Extraction des Chemins de Fichiers depuis les Métadonnées

Ce code est également disponible en : English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Ce programme configure une connexion vers un serveur de métadonnées SAS© (paramètres codés en dur) et effectue un inventaire des fichiers physiques référencés. Il utilise l'interface de programmation des métadonnées (fonctions `metadata_*`) pour requêter les objets de type `Directory` (en parcourant leurs associations `Files`) et les objets `SASFileRef`. Le résultat est consolidé dans une table SAS© nommée 'directories'.
Analyse des données

Type : CREATION_INTERNE


Les données sont extraites dynamiquement du référentiel de métadonnées via les fonctions SAS (metadata_resolve, metadata_getnobj, etc.).

1 Bloc de code
OPTIONS
Explication :
Définition des options globales pour la connexion au serveur de métadonnées SAS (serveur, port, protocole, utilisateur sasadm).
Copié !
1options
2 metaserver='meta.demo.sas.com'
3 metaport=8561
4 metaprotocol='bridge'
5 metauser='sasadm @saspw'
6 metapass='password'
7 metarepository='Foundation'
8 metaconnect='NONE';
2 Bloc de code
DATA STEP Data
Explication :
Étape Data principale qui interroge les métadonnées. Elle utilise `metadata_resolve` pour identifier les objets, puis boucle sur les résultats. Pour chaque répertoire (`Directory`), elle récupère le chemin (`DirectoryName`) et explore l'association `Files` pour obtenir les noms de fichiers. Pour les objets `SASFileRef`, elle récupère directement l'attribut `Name`. Les chemins complets sont stockés dans la variable `fqn`.
Copié !
1DATA directories;
2 
3 /* Initialize variables. */
4 LENGTH type id dir_uri file_uri $ 50 path file_name fqn $ 255;
5 call missing(of _character_);
6 keep fqn;
7 
8 /* Define a query to find all directory objects */
9 obj="omsobj:Directory?Directory[Files/File[ @code_sas_json/downside_frequency_test.json contains '.']";
10 
11 /* Count the objects that match this query. */
12 dir_count=metadata_resolve(obj,type,id);
13 
14 /* Proceed if any directories are found. */
15 IF dir_count > 0 THEN DO i=1 to dir_count;
16 rc=metadata_getnobj(obj,i,dir_uri);
17 rc=metadata_getattr(dir_uri,"DirectoryName",path);
18 
19 /* Find the files associated with the path. */
20 file_count=metadata_getnasn(dir_uri,"Files",1,file_uri);
21 IF file_count > 0 THEN DO j=1 to file_count;
22 rc=metadata_getnasn(dir_uri,"Files",j,file_uri);
23 rc=metadata_getattr(file_uri,"FileName",file_name);
24 fqn=catx("/",path,file_name);
25 OUTPUT;
26 END;
27 END;
28 /* Define a search query to find any "SASFileRef" object types. */
29 obj2="omsobj:SASFileRef? @code_sas_json/downside_frequency_test.json contains '.'";
30 fileref_count=metadata_resolve(obj2,type,id);
31 IF fileref_count > 0 THEN DO i = 1 to fileref_count;
32 rc=metadata_getnobj(obj2,i,file_uri);
33 rc=metadata_getattr(file_uri,"Name",fqn);
34 OUTPUT;
35 END;
36 
37RUN;
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.
Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« Cet inventaire est la première étape pour détecter des "fichiers fantômes" (références en métadonnées pointant vers des fichiers supprimés du disque). Pour aller plus loin, vous pourriez coupler ce script avec la fonction fileexist() afin de valider immédiatement l'existence réelle de chaque ressource sur le serveur. »