Veröffentlicht am :
Verwaltung CREATION_INTERNE

Extraktion von Metadaten aus SAS-Bibliotheken und -Tabellen

Dieser Code ist auch verfügbar auf: Español Français
Wartet auf Validierung
Attention : Dieser Code erfordert Administratorrechte.
Das Programm stellt eine Verbindung zu einem SAS©-Metadatenserver her, indem es Systemoptionen (Metaserver, Metaport usw.) verwendet. Anschließend durchläuft es alle in den Metadaten registrierten SAS©-Bibliotheken ('SASLibrary'). Für jede gefundene Bibliothek ruft es deren Attribute wie Name, Libref und ID ab. Danach führt es eine zweite Suche durch, um alle physischen Tabellen ('PhysicalTable') zu finden, die dieser Bibliothek zugeordnet sind. Schließlich werden die Informationen des Bibliotheks-Librefs, ihres Namens und des Namens jeder zugeordneten Tabelle in die Tabelle `work.libinfo` geschrieben.
Datenanalyse

Type : CREATION_INTERNE


Die Datenquelle ist der SAS-Metadatenserver selbst. Die Tabelle `work.libinfo` wird vollständig durch das Skript generiert, indem Metadaten über spezifische Funktionen wie `metadata_resolve` und `metadata_getnobj` abgefragt werden. Es werden keine externen Daten gelesen.

1 Codeblock
OPTIONS
Erklärung :
Dieser Block konfiguriert die Verbindungsparameter zum SAS-Metadatenserver. Er definiert die Serveradresse, den Port, die Benutzeranmeldeinformationen, das zu verwendende Repository und das Kommunikationsprotokoll.
Kopiert!
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 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA STEP erstellt die Tabelle `work.libinfo`. Er initialisiert die Variablen und verwendet dann die Funktion `metadata_resolve`, um alle SAS-Bibliotheken in den Metadaten zu finden. Hinweis: Die Abfrage `obj` enthält eine Dateireferenz, die für eine Metadatenabfrage ungültig zu sein scheint. Für jede gefundene Bibliothek durchläuft er eine Schleife, um deren Eigenschaften (`metadata_getattr`) zu extrahieren, und sucht anschließend über eine zweite `metadata_resolve`-Abfrage nach zugehörigen physischen Tabellen. Werden Tabellen gefunden, werden deren Namen extrahiert und eine Zeile in die Ausgabetabelle `work.libinfo` mit dem Libref, dem Bibliotheksnamen und dem Tabellennamen geschrieben.
Kopiert!
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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Author: Greg Wootton Date: 08FEB2017