Publicado el :
Macro CREATION_INTERNE

Prueba de la macro mv_jobflow para la orquestación de tareas

Este código también está disponible en: Deutsch English Français
En espera de validación
El script comienza definiendo un programa SAS© temporal (`testprog`) que genera datos aleatorios usando macro-variables (`macrovar1`, `macrovar2`). Este programa se utiliza luego para crear dos jobs SAS© (`demo1`, `demo2`) a través de la macro `%mv_createjob`, simulando tareas independientes. A continuación, se construye un conjunto de datos de control (`work.inputjobs`). Contiene los metadatos necesarios para que `mv_jobflow` ejecute los jobs, incluyendo el contexto de ejecución, el ID de flujo y los valores específicos de las macro-variables para cada job. La macro `%mv_jobflow` se llama con parámetros para gestionar la concurrencia (`maxconcurrency=2`), redirigir los resultados a `work.results` y guardar un log detallado en `myjoblog`. La opción `raise_err=1` asegura la propagación de errores. El script verifica luego el contenido del log de ejecución y utiliza la macro `%mp_assert` para validar que el código de retorno del sistema (`syscc`) es 0, garantizando que todo el flujo de trabajo finalizó sin errores.
Análisis de datos

Type : CREATION_INTERNE


Todos los datos utilizados en este script se generan internamente o se crean dinámicamente. El programa `testprog` se escribe en un archivo temporal. El conjunto de datos `work.inputjobs` se crea a través de un paso DATA en el script. Las salidas (`work.results`, `myjoblog`) también son productos de la ejecución interna del script.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea un archivo SAS temporal llamado `testprog` y escribe un programa SAS en él. Este programa interno es un simple paso DATA que genera números aleatorios y observaciones basadas en macro-variables (`&macrovar1`, `&macrovar2`) e información de contexto (`&_program`, `&flow_id`). El archivo `testprog` servirá como fuente de código para los jobs SAS definidos posteriormente, permitiendo una ejecución parametrizable y reutilizable.
¡Copiado!
1filename testprog temp;
2DATA _null_;
3 file testprog;
4 put '%put this is job: &_program;'
5 / '%put this was run in flow &flow_id;'
6 / 'data ;'
7 / ' rval=rand("uniform");'
8 / ' rand=rval*&macrovar1;'
9 / ' do x=1 to rand;'
10 / ' y=rand*&macrovar2;'
11 / ' output;'
12 / ' end;'
13 / 'run;'
14 ;
15RUN;
2 Bloque de código
Macro mv_createjob
Explicación :
Estas dos llamadas a la macro `%mv_createjob` registran los programas SAS en `testprog` como dos jobs ejecutables distintos, llamados `demo1` y `demo2`, en la ruta `/Public/temp`. Este paso es crucial para preparar las tareas que serán orquestadas posteriormente por la macro `mv_jobflow`. Estos jobs están ahora listos para ser referenciados y ejecutados dentro de un flujo de trabajo.
¡Copiado!
1%mv_createjob(path=/Public/temp,name=demo1,code=testprog)
2%mv_createjob(path=/Public/temp,name=demo2,code=testprog)
3 Bloque de código
DATA STEP Data
Explicación :
Este paso DATA construye el conjunto de datos `work.inputjobs`, que es la fuente de entrada para la macro `%mv_jobflow`. Define un contexto de ejecución ('SAS Job Execution compute context') y especifica los detalles para varias ejecuciones de los jobs `demo1` y `demo2` dentro de dos flujos (`flow_id` 1 y 2). Para cada job, se definen diferentes valores de `macrovar1` y `macrovar2`, parametrizando así las ejecuciones individuales de los jobs en el flujo.
¡Copiado!
1DATA work.inputjobs;
2 _contextName='SAS Job Execution compute context';
3 DO flow_id=1 to 2;
4 DO i=1 to 4;
5 _program='/Public/temp/demo1';
6 macrovar1=10*i;
7 macrovar2=4*i;
8 OUTPUT;
9 i+1;
10 _program='/Public/temp/demo2';
11 macrovar1=40*i;
12 macrovar2=44*i;
13 OUTPUT;
14 END;
15 END;
16RUN;
4 Bloque de código
Macro mv_jobflow
Explicación :
Este bloque es el paso de ejecución principal del flujo de trabajo. La macro `%mv_jobflow` se llama con `work.inputjobs` como fuente de las definiciones de tareas. Se configura para ejecutar los jobs con un máximo de 2 jobs concurrentes (`maxconcurrency=2`), almacenar los resultados en el conjunto de datos `work.results`, y generar un archivo de log detallado llamado `myjoblog`. La opción `raise_err=1` está activada para que cualquier error de job sea reportado por el código de retorno del sistema. Los mensajes `%put` muestran el valor de `syscc` antes y después de la ejecución del flujo.
¡Copiado!
1* Trigger the flow ;
2 
3%put NOTE: &=syscc;
4 
5%mv_jobflow(inds=work.inputjobs
6 ,maxconcurrency=2
7 ,outds=work.results
8 ,outref=myjoblog
9 ,raise_err=1
10 ,mdebug=1
11)
12 
13%put NOTE: &=syscc;
5 Bloque de código
DATA STEP
Explicación :
Este paso DATA lee el contenido del archivo `myjoblog`, que es generado por la macro `%mv_jobflow` y contiene los detalles de la ejecución del flujo de jobs (estado, errores, etc.). Luego muestra cada línea de este archivo directamente en el log SAS. Esto permite una inspección post-ejecución completa del desarrollo y los resultados del flujo de trabajo.
¡Copiado!
1DATA _null_;
2 INFILE myjoblog;
3 INPUT; put _infile_;
4RUN;
6 Bloque de código
Macro mp_assert
Explicación :
Este bloque utiliza la macro `%mp_assert` para realizar una verificación post-ejecución. Evalúa la condición `&syscc eq 0`, lo que significa que el código de retorno del sistema debe ser cero, indicando que todo el flujo de jobs se ejecutó sin errores. El parámetro `desc` proporciona una descripción textual de la aserción, útil para la depuración y el reporte de pruebas.
¡Copiado!
1%mp_assert(
2 iftrue=(&syscc eq 0),
3 desc=Check that a zero return code is returned IF no called job fails
4)
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.