Publicado el :
Administración CREATION_INTERNE

Extracción de metadatos de bibliotecas y tablas SAS

Este código también está disponible en: Deutsch Français
En espera de validación
Attention : Este código requiere privilegios de administrador.
El programa establece una conexión a un servidor de metadatos de SAS© utilizando las opciones del sistema (metaserver, metaport, etc.). Luego, recorre todas las bibliotecas de SAS© ('SASLibrary') registradas en los metadatos. Para cada biblioteca encontrada, recupera sus atributos como el nombre, el libref y el ID. Después, realiza una segunda búsqueda para encontrar todas las tablas físicas ('PhysicalTable') asociadas a esta biblioteca. Finalmente, escribe la información del libref de la biblioteca, su nombre y el nombre de cada tabla asociada en la tabla `work.libinfo`.
Análisis de datos

Type : CREATION_INTERNE


La fuente de datos es el propio servidor de metadatos de SAS. La tabla `work.libinfo` es generada completamente por el script al consultar los metadatos a través de funciones específicas como `metadata_resolve` y `metadata_getnobj`. No se lee ningún dato externo.

1 Bloque de código
OPTIONS
Explicación :
Este bloque configura los parámetros de conexión al servidor de metadatos de SAS. Define la dirección del servidor, el puerto, las credenciales del usuario, el repositorio a utilizar y el protocolo de comunicación.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este DATA STEP crea la tabla `work.libinfo`. Inicializa las variables y luego utiliza la función `metadata_resolve` para encontrar todas las bibliotecas SAS en los metadatos. Nota: la consulta `obj` contiene una referencia a un archivo que parece inválida para una consulta de metadatos. Para cada biblioteca encontrada, itera para extraer sus propiedades (`metadata_getattr`) y luego busca las tablas físicas asociadas a través de una segunda consulta `metadata_resolve`. Si se encuentran tablas, se extraen sus nombres y se escribe una línea en la tabla de salida `work.libinfo` con el libref, el nombre de la biblioteca y el nombre de la tabla.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Author: Greg Wootton Date: 08FEB2017