Veröffentlicht am :
Makro INTERNE_ERSTELLUNG

Test der mv_jobflow-Makro zur Aufgabenorchestrierung

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript beginnt mit der Definition eines temporären SAS©-Programms (`testprog`), das Zufallsdaten unter Verwendung von Makrovariablen (`macrovar1`, `macrovar2`) generiert. Dieses Programm wird dann verwendet, um zwei SAS©-Jobs (`demo1`, `demo2`) über das Makro `%mv_createjob` zu erstellen, was unabhängige Aufgaben simuliert. Anschließend wird ein Kontrolldatensatz (`work.inputjobs`) erstellt. Dieser enthält die Metadaten, die `mv_jobflow` zur Ausführung der Jobs benötigt, einschließlich des Ausführungskontextes, der Flow-ID und spezifischer Makrovariablenwerte für jeden Job. Das Makro `%mv_jobflow` wird mit Parametern aufgerufen, um die Parallelität (`maxconcurrency=2`) zu steuern, die Ergebnisse nach `work.results` umzuleiten und ein detailliertes Log in `myjoblog` zu speichern. Die Option `raise_err=1` stellt die Fehlerfortpflanzung sicher. Das Skript überprüft anschließend den Inhalt des Ausführungslogs und verwendet das Makro `%mp_assert`, um zu validieren, dass der Systemrückgabecode (`syscc`) 0 ist, wodurch sichergestellt wird, dass der gesamte Workflow fehlerfrei abgeschlossen wurde.
Datenanalyse

Type : INTERNE_ERSTELLUNG


Alle in diesem Skript verwendeten Daten werden intern generiert oder dynamisch erstellt. Das Programm `testprog` wird in eine temporäre Datei geschrieben. Der Datensatz `work.inputjobs` wird über einen DATA Step im Skript erstellt. Die Ausgaben (`work.results`, `myjoblog`) sind ebenfalls Produkte der internen Ausführung des Skripts.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser Block erstellt eine temporäre SAS-Datei namens `testprog` und schreibt ein SAS-Programm hinein. Dieses interne Programm ist ein einfacher DATA Step, der Zufallszahlen und Beobachtungen basierend auf Makrovariablen (`&macrovar1`, `&macrovar2`) und Kontextinformationen (`&_program`, `&flow_id`) generiert. Die Datei `testprog` dient als Codequelle für später definierte SAS-Jobs, was eine parametrisierbare und wiederverwendbare Ausführung ermöglicht.
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 / ' output;'
12 / ' end;'
13 / 'run;'
14 ;
15RUN;
2 Codeblock
Macro mv_createjob
Erklärung :
Diese beiden Aufrufe des Makros `%mv_createjob` registrieren die SAS-Programme in `testprog` als zwei separate ausführbare Jobs mit den Namen `demo1` und `demo2` im Pfad `/Public/temp`. Dieser Schritt ist entscheidend für die Vorbereitung der Aufgaben, die anschließend vom Makro `mv_jobflow` orchestriert werden. Diese Jobs sind nun bereit, innerhalb eines Workflows referenziert und ausgeführt zu werden.
Kopiert!
1%mv_createjob(path=/Public/temp,name=demo1,code=testprog)
2%mv_createjob(path=/Public/temp,name=demo2,code=testprog)
3 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA Step erstellt den Datensatz `work.inputjobs`, der die Eingabequelle für das Makro `%mv_jobflow` ist. Er definiert einen Ausführungskontext ('SAS Job Execution compute context') und spezifiziert die Details für mehrere Ausführungen der Jobs `demo1` und `demo2` innerhalb von zwei Flows (`flow_id` 1 und 2). Für jeden Job werden unterschiedliche Werte für `macrovar1` und `macrovar2` definiert, wodurch die einzelnen Jobausführungen im Flow parametrisiert werden.
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;
4 Codeblock
Macro mv_jobflow
Erklärung :
Dieser Block ist der Hauptausführungsschritt des Workflows. Das Makro `%mv_jobflow` wird mit `work.inputjobs` als Quelle der Aufgabendefinitionen aufgerufen. Es ist konfiguriert, die Jobs mit maximal 2 gleichzeitig laufenden Jobs (`maxconcurrency=2`) auszuführen, die Ergebnisse im Datensatz `work.results` zu speichern und eine detaillierte Logdatei namens `myjoblog` zu generieren. Die Option `raise_err=1` ist aktiviert, damit alle Jobfehler über den Systemrückgabecode gemeldet werden. Die `%put`-Nachrichten zeigen den Wert von `syscc` vor und nach der Flow-Ausführung an.
Kopiert!
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 Codeblock
DATA STEP
Erklärung :
Dieser DATA Step liest den Inhalt der Datei `myjoblog`, die vom Makro `%mv_jobflow` generiert wird und Details zur Ausführung des Job-Flows (Status, Fehler usw.) enthält. Anschließend wird jede Zeile dieser Datei direkt im SAS-Log angezeigt. Dies ermöglicht eine vollständige Nachinspektion des Ablaufs und der Ergebnisse des Workflows.
Kopiert!
1DATA _null_;
2 INFILE myjoblog;
3 INPUT; put _infile_;
4RUN;
6 Codeblock
Macro mp_assert
Erklärung :
Dieser Block verwendet das Makro `%mp_assert`, um eine Nachausführungsprüfung durchzuführen. Er bewertet die Bedingung `&syscc eq 0`, was bedeutet, dass der Systemrückgabecode Null sein sollte, was darauf hinweist, dass der gesamte Job-Flow fehlerfrei ausgeführt wurde. Der Parameter `desc` liefert eine textuelle Beschreibung der Assertion, nützlich für das Debugging und die Testberichterstattung.
Kopiert!
1%mp_assert(
2 iftrue=(&syscc eq 0),
3 desc=Check that a zero return code is returned IF no called job fails
4)
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.