Publicado el :

Limpieza de Claves Foráneas Huérfanas en los Metadatos

Este código también está disponible en: Deutsch English Français
Attention : Este código requiere privilegios de administrador.
Este script se conecta al servidor de metadatos de SAS© para buscar objetos de tipo 'ForeignKey' que están huérfanos, es decir, que no tienen una clave única asociada ('PartnerUniqueKey'). Según el valor de la macro-variable 'MODE', puede simplemente listar los objetos encontrados en el log (MODE=REPORT) o eliminarlos definitivamente (MODE=DELETE). Es una herramienta de mantenimiento para garantizar la coherencia de los metadatos.
Análisis de datos

Type : EXTERNE


Los datos no provienen de tablas SAS, sino que se leen directamente desde el servidor de metadatos de SAS. La conexión se establece a través de las opciones 'metaserver', 'metaport', etc. El script consulta la API de metadatos para encontrar objetos específicos.

1 Bloque de código
DATA STEP
Explicación :
Este bloque DATA _NULL_ es el núcleo del programa. No crea ninguna tabla SAS de salida. Inicializa variables, conserva el valor de la macro 'MODE', y luego construye una consulta para los metadatos. Utiliza la función `metadata_resolve` para contar el número de objetos 'ForeignKey' que coinciden con la consulta. Si encuentra alguno, itera sobre cada objeto, recupera su URI, su nombre, su ID y la información de la tabla asociada a través de `metadata_getnobj`, `metadata_getattr` y `metadata_getnasn`. Finalmente, muestra la información en el registro SAS y, si el modo es 'DELETE', intenta eliminar el objeto con `metadata_delobj` verificando el código de retorno de la operación.
¡Copiado!
1DATA _null_;
2 /* Initialize variables. */
3 LENGTH FK_id PT_id $17 type FK_uri PT_uri $50 PT_engine $64 PT_name $32 FK_name $60;
4 call missing ( of _character_ );
5 retain mode "&MODE";
6 
7 /* Define a query for ForeignKey FKobjects that do not have a PartnerUniqueKey association */
8 FK_obj="omsobj:ForeignKey?ForeignKey[not(PartnerUniqueKey/*)]";
9 
10 /* Determine how many foreign key objects meet the criteria */
11 FK_Count=metadata_resolve(FK_obj,type,FK_id);
12 put "NOTE: Found " FK_Count "ForeignKey objects that do not have an associated PartnerUniqueKey";
13 
14 /* If any were found, iterate through each one to get the attributes and associations */
15 IF FK_Count > 0 THEN DO i = 1 to FK_Count;
16 /* Get the URI for the nth ForeignKey found */
17 FK_rc=metadata_getnobj(FK_obj,i,FK_uri);
18 
19 /* Get the name and ID of the ForeignKey FKobject */
20 FK_rc=metadata_getattr(FK_uri,"Name",FK_name);
21 FK_rc=metadata_getattr(FK_uri,"Id",FK_id);
22
23 /* get the table name and id this ForeignKey is associated with */
24 PT_rc=metadata_getnasn(FK_uri,"Table",1,PT_uri);
25 IF PT_rc > 0 THEN DO;
26 /* Get the name and ID of the table. */
27 PT_rc=metadata_getattr(PT_uri,"SASTableName",PT_name);
28 PT_rc=metadata_getattr(PT_uri,"Id",PT_id);
29 END;
30 
31 /* REPORT and DELETE */
32 put "NOTE: Found foreign key: " FK_name "with id: " FK_id "for table: " PT_name "with id: " PT_id;
33 IF mode = "DELETE" THEN DO;
34 FK_rc = metadata_delobj(FK_uri);
35 IF FK_rc THEN put 'ERROR: metadata_delobj failed with return code ' FK_rc;
36 ELSE put 'NOTE: Foreign key successfully deleted';
37 END;
38 END;
39RUN;
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 : Copyright © 2025, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0