La macro no utiliza datos de SAS (tablas o conjuntos de datos) como fuente. Opera directamente en el sistema de metadatos de SAS, consultando y modificando las definiciones de los procesos almacenados. Por lo tanto, no hay dependencia de datos externos o bibliotecas específicas para su ejecución funcional.
1 Bloque de código
DATA STEP
Explicación : Este bloque `DATA _NULL_` se utiliza para interactuar con el servidor de metadatos de SAS. La función `metadata_pathobj` intenta localizar el proceso almacenado especificado por el parámetro `target` y extraer su tipo (`cmtype`) y su URI (`stpuri`). Esta información se almacena luego en variables macro locales. Se realiza una verificación para asegurar que el objeto encontrado es un 'StoredProcess'. Si no es el caso, se emite una advertencia y la macro finaliza.
¡Copiado!
data _null_;
length type uri $256;
rc=metadata_pathobj("","&target",'StoredProcess',type,uri);
call symputx('cmtype',type,'l');
call symputx('stpuri',uri,'l');
run;
%if &cmtype ne ClassifierMap %then %do;
%put %str(WARN)ING: No Stored Process found at ⌖
%return;
%end;
%put %str(WARN)ING: No Stored Process found at ⌖
9
%return;
10
%END;
2 Bloque de código
MACRO LOGIQUE
Explicación : Este simple bloque lógico de macro determina el valor del tipo de servidor a definir. Si el parámetro `type` es 'WKS', la variable macro `newtype` se establece en 'Wks'. De lo contrario, se establece en 'Sps'. Esta variable se utilizará más adelante para construir la cadena XML de actualización de metadatos.
Explicación : Este segundo bloque `DATA _NULL_` es el núcleo de la lógica de actualización. Itera sobre las notas asociadas a la URI del proceso almacenado (`stpuri`) utilizando `metadata_getnasn`. Busca específicamente la nota cuyo nombre es 'Stored Process'. Una vez encontrada, la función `METADATA_SETATTR` se utiliza para modificar su atributo 'StoredText'. Este atributo se actualiza con una nueva cadena XML que define el `LogicalServerType` del proceso almacenado utilizando la variable macro `&newtype` determinada previamente. El éxito de esta operación se registra en la variable macro `result`.
¡Copiado!
data _null_;
length uri name value $256;
n=1;
do while(metadata_getnasn("&stpuri","Notes",n,uri)>0);
n+1;
rc=metadata_getattr(uri,"Name",name);
if name='Stored Process' then do;
rc = METADATA_SETATTR(uri,'StoredText'
,'<?xml version="1.0" encoding="UTF-8"?>'
!!'<StoredProcess><ServerContext LogicalServerType="'!!"&newtype"
!!'" OtherAllowed="false"/><ResultCapabilities Package="false" '
!!' Streaming="true"/><OutputParameters/></StoredProcess>');
if rc=0 then call symputx('result','SUCCESS');
stop;
end;
end;
run;
1
DATA _null_;
2
LENGTH uri name value $256;
3
n=1;
4
DO while(metadata_getnasn("&stpuri","Notes",n,uri)>0);
Explicación : Este bloque final es una instrucción de macro condicional que muestra un mensaje en el log de SAS. Si la variable macro `result` es 'SUCCESS', se muestra un mensaje de confirmación, indicando que el tipo de servidor del proceso almacenado ha sido modificado. De lo contrario, se emite un mensaje de error general, señalando un problema durante la ejecución de la macro.
¡Copiado!
%if &result=SUCCESS %then %put NOTE: SUCCESS: STP &target changed to &type type;
%else %put %str(ERR)OR: Issue with &sysmacroname;
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 : La información de derechos de autor se detecta en los archivos referenciados: 'Copyright (c) 2001-2006 Rodney Sparapani' (bajo licencia GNU General Public License) para _version.sas, y 'Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de' (parte de SASUnit) para macro_without_brief_tag.sas. Estas referencias se incluyen en el bloque de ayuda de la macro principal.
« La macro %mm_updatestpservertype ilustra una técnica de administración avanzada: la modificación directa de la configuración de ejecución de un Stored Process. Aunque la descripción menciona SAS Viya 4, el código utiliza la Open Metadata Architecture (OMA) específica de SAS 9.x. Al manipular el atributo StoredText, estás instruyendo directamente al Object Spawner sobre cómo debe instanciar el motor de SAS para atender una petición.
Recomendaciones estratégicas y mejores prácticas
WKS vs. STP (SPS): La elección del tipo de servidor es vital para el rendimiento. WKS (Workspace Server) es ideal para procesos pesados con sesiones dedicadas, mientras que STP (Stored Process Server) utiliza un pool de sesiones multiusuario, proporcionando tiempos de respuesta más rápidos para peticiones frecuentes y ligeras.
El riesgo de sobreescribir StoredText: La función METADATA_SETATTR en este script inyecta una cadena XML predefinida. Atención: este método sobrescribe el atributo completo. Si tu Stored Process tenía configuraciones personalizadas (capacidades de resultado específicas, parámetros de entrada, etc.), estas se perderán. Un enfoque experto sería leer primero el XML existente y modificar únicamente el atributo LogicalServerType.
Persistencia de metadatos: A diferencia de los cambios realizados mediante la SAS Management Console, las modificaciones vía METADATA_SETATTR son inmediatas y permanentes en el repositorio. Realiza siempre un respaldo (SPK) del objeto antes de ejecutar macros de automatización que alteren atributos. »
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.