Veröffentlicht am :
Administration CREATION_INTERNE

Orchestrierung und Test von SAS Viya Job-Flows

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Attention : Dieser Code erfordert Administratorrechte.
Das Skript beginnt mit der Definition eines temporären SAS©-Programms ('testprog'), das eine Geschäftsanwendung simuliert und je nach Makrovariablen zufällig fehlschlagen (`abort`) kann. Zwei Jobs, 'demo1' und 'demo2', werden aus diesem temporären Programm mithilfe des Makros `%mv_createjob` erstellt und im Ordner '/Public/temp' (typischerweise ein CASLIB) abgelegt. Ein `work.inputjobs`-Dataset wird erstellt, um die spezifischen Parameter (`_program`, `macrovar1`, `macrovar2`, `flow_id`, `_contextName`) für jede Jobausführung im Flow bereitzustellen. Das Makro `%mv_jobflow` wird anschließend mit diesem Eingabe-Dataset aufgerufen, um den Job-Flow parallel (maximale Parallelität von 2) zu starten, wobei ein Ausgabe-Dataset (`work.results`) und eine Referenz-Logdatei (`myjoblog`) angegeben werden. Die Option `raise_err=1` wird verwendet, um Fehler auf Systemebene weiterzuleiten, was eine bessere Verwaltung von Job-Fehlern ermöglicht. Der System-Rückgabecode (`syscc`) wird vor und nach der Ausführung des Flows zur Überwachung angezeigt. Schließlich wird der Inhalt des Flow-Logs (`myjoblog`) im SAS©-Log angezeigt, und das Makro `%mp_assert` wird verwendet, um zu überprüfen, ob der `syscc` ungleich Null ist, was bestätigt, dass der Fehler der Remote-Jobs korrekt gemeldet wird. Der `syscc` wird am Ende des Skripts zurückgesetzt.
Datenanalyse

Type : CREATION_INTERNE


Die Daten werden vollständig intern generiert. Ein temporäres SAS-Programm wird dynamisch mit einem DATA STEP `_null_` erstellt, das in eine `filename temp` schreibt. Die Eingabeparameter für den Job-Flow (`work.inputjobs`) werden ebenfalls durch einen expliziten DATA STEP erstellt. Es werden keine externen Dateien oder SASHELP-Datasets direkt für die Hauptdaten des Skripts gelesen.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser SAS-Block erstellt eine temporäre Datei namens `testprog` und schreibt ein SAS-Programm hinein. Dieses Programm simuliert eine Geschäftsanwendung, die Makrovariablen `&_program`, `&flow_id`, `&macrovar1` und `&macrovar2` verwendet. Es enthält eine bedingte Logik, bei der `abort` ausgelöst wird, wenn ein Zufallswert (`rand("uniform")`) größer als 0.50 ist, was einen Jobfehler simuliert. Das Programm generiert auch ein anonymes Dataset, das berechnete Variablen (`rval`, `rand`, `y`) enthält.
Kopiert!
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 / ' if (rval>0.50) then abort;'
12 / ' else output;'
13 / ' end;'
14 / 'run;'
15 ;
16RUN;
2 Codeblock
MACRO CALL (mv_createjob)
Erklärung :
Ruft das Makro `%mv_createjob` auf, um einen Job namens 'demo1' zu erstellen. Dieser Job wird im Pfad '/Public/temp' (wahrscheinlich ein Ordner in einem CASLIB) gespeichert und verwendet den in der temporären Datei `testprog` generierten SAS-Code als Quelle. Dieses Makro bereitet den Job für eine spätere Ausführung in einem Job-Flow in der SAS Viya-Umgebung vor.
Kopiert!
1%mv_createjob(path=/Public/temp,name=demo1,code=testprog)
3 Codeblock
MACRO CALL (mv_createjob)
Erklärung :
Ruft das Makro `%mv_createjob` erneut auf, um einen zweiten Job namens 'demo2' zu erstellen, der ebenfalls denselben Quellcode (`testprog`) und denselben Speicherpfad wie Job 'demo1' verwendet. Dadurch werden zwei unabhängige Jobs konfiguriert, die von demselben Ausführungsfluss verwaltet werden.
Kopiert!
1%mv_createjob(path=/Public/temp,name=demo2,code=testprog)
4 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA STEP erstellt das Dataset `work.inputjobs`. Dieses Dataset dient als Kontrolltabelle für den Job-Flow und spezifiziert die Ausführungsparameter für jede Job-Instanz. Es definiert den `_contextName` als 'SAS Job Execution compute context', iteriert über zwei separate `flow_id` und bereitet für jede `flow_id` Ausführungen für 'demo1' und 'demo2' mit unterschiedlichen Werten für `macrovar1` und `macrovar2` vor. Dies ermöglicht das Testen des Job-Verhaltens mit verschiedenen Eingaben und das Simulieren mehrerer Ausführungen.
Kopiert!
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;
5 Codeblock
MACRO CALL (%put)
Erklärung :
Zeigt den aktuellen Wert der automatischen Variablen `SYSCC` (System Return Code) im SAS-Log an. `SYSCC` enthält den Rückgabecode des letzten System- oder Makroaufrufs und dient hier als Prüfpunkt vor der Ausführung des Job-Flows, um einen bekannten Startzustand sicherzustellen, der bei Erfolg normalerweise 0 ist.
Kopiert!
1%put NOTE: &=syscc;
6 Codeblock
MACRO CALL (mv_jobflow)
Erklärung :
Ruft das Makro `%mv_jobflow` auf, um die definierten Jobs auszuführen. Es nimmt `work.inputjobs` als Eingabe-Dataset (`inds`), begrenzt die Parallelität auf 2 Jobs (`maxconcurrency=2`), speichert die Ergebnisse in `work.results` (`outds`) und die Log-Informationen in einem Fileref `myjoblog` (`outref`). Die Option `raise_err=1` ist entscheidend, da sie sicherstellt, dass Fehler, die in den ausgeführten Jobs auftreten, im `SYSCC` des aufrufenden Prozesses widergespiegelt werden, was eine zentralisierte Fehlerbehandlung ermöglicht. `mdebug=1` aktiviert den Debugging-Modus für das Makro, der detaillierte Informationen im Log bereitstellt.
Kopiert!
1%mv_jobflow(inds=work.inputjobs
2 ,maxconcurrency=2
3 ,outds=work.results
4 ,outref=myjoblog
5 ,raise_err=1
6 ,mdebug=1
7)
7 Codeblock
MACRO CALL (%put)
Erklärung :
Zeigt den Wert von `SYSCC` nach der Ausführung des Job-Flows an. Dies ermöglicht die Überprüfung, ob Fehler der internen Jobs (die `abort` ausführen können) vom Makro `%mv_jobflow` korrekt erfasst und an den aufrufenden Prozess weitergeleitet wurden und ob der `SYSCC` einen potenziellen Fehler des Flows widerspiegelt.
Kopiert!
1%put NOTE: &=syscc;
8 Codeblock
DATA STEP
Erklärung :
Dieser DATA STEP liest den Inhalt der Datei, auf die `myjoblog` verweist (die vom Makro `%mv_jobflow` ausgefüllt wurde und das konsolidierte Log des Job-Flows enthält), und druckt jede Zeile (`_infile_`) in das SAS-Log. Dies ist ein wesentlicher Schritt zur Fehlerbehebung und Überprüfung, um die Nachrichten und Status zu untersuchen, die von den im Flow ausgeführten Jobs generiert wurden.
Kopiert!
1DATA _null_;
2 INFILE myjoblog;
3 INPUT; put _infile_;
4RUN;
9 Codeblock
MACRO CALL (mp_assert)
Erklärung :
Verwendet das Makro `%mp_assert` (wahrscheinlich ein benutzerdefiniertes Test- oder Assertionsmakro), um eine logische Bedingung zu überprüfen. Hier stellt es sicher, dass die Variable `SYSCC` nicht gleich Null ist, was darauf hindeuten würde, dass ein Fehler im Job-Flow erkannt und weitergeleitet wurde. Die `desc`-Meldung erläutert das Ziel: 'Überprüfen, ob ein Rückgabecode ungleich Null zurückgegeben wird, wenn der aufgerufene Job fehlschlägt'. Diese Assertion ist entscheidend, um die Robustheit der Fehlerbehandlung des Flow-Systems zu validieren.
Kopiert!
1%mp_assert(
2 iftrue=(&syscc ne 0),
3 desc=Check that non zero return code is returned IF called job fails
4)
10 Codeblock
MACRO CALL (%let)
Erklärung :
Setzt die automatische Makrovariable `SYSCC` auf Null zurück. Diese Praxis ist am Ende eines Tests oder Codeabschnitts üblich, um zu verhindern, dass der `SYSCC` dieses Abschnitts spätere Überprüfungen oder den allgemeinen Status des Programms beeinflusst.
Kopiert!
1%let syscc=0;
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.