session batchresults

Standardfall: Umwandlung einer langlaufenden Finanzaggregation in den Batch-Modus

Scénario de test & Cas d'usage

Geschäftskontext

Ein Finanzanalyst führt eine komplexe Aggregationsanalyse für vierteljährliche Transaktionsdaten durch. Die Abfrage dauert länger als erwartet und blockiert seine interaktive SAS Viya-Sitzung. Ein CAS-Administrator greift ein, um den laufenden Job in den Batch-Modus zu versetzen, damit der Analyst seine Arbeit fortsetzen kann, während die Analyse im Hintergrund abgeschlossen wird.
Über das Set : session

Verwaltung des CAS-Sitzungsstatus.

Entdecken Sie alle Aktionen von session
Datenaufbereitung

Erstellung einer großen Tabelle mit Finanztransaktionen, um eine langlaufende Aggregation zu simulieren.

Kopiert!
1DATA casuser.transactions_large;
2 call streaminit(123);
3 DO customer_id = 1 to 5000;
4 DO i = 1 to rand('integer', 50, 200);
5 transaction_date = '01JAN2023'd + rand('integer', 0, 365);
6 amount = 10 + rand('uniform') * 5000;
7 category = byte(int(rand('uniform')*5) + 65); /* A-F */
8 OUTPUT;
9 END;
10 END;
11 FORMAT transaction_date date9.;
12RUN;

Étapes de réalisation

1
Sitzung 1 (Analyst): Starten Sie eine langlaufende `simple.summary`-Aktion asynchron.
Kopiert!
1cas analyst_session name='analyst_sess';
2PROC CAS;
3 SESSION caslib='casuser';
4 SIMPLE.summary TABLE={name='transactions_large'}, inputs={{name='amount'}}, subSet={'SUM'}, _async='long_summary';
5RUN;
6QUIT;
2
Sitzung 2 (Admin): Finden Sie die Job-UUID der asynchronen Aktion.
Kopiert!
1cas admin_session name='admin_sess';
2PROC CAS;
3 SESSION.actionstatus RESULT=STATUS job='long_summary' SESSION='analyst_sess';
4 IF (STATUS.ActionStatus[1, 'State'] == 'Running') THEN DO;
5 job_uuid = STATUS.ActionStatus[1, 'JobUUID'];
6 put 'INFO: Job ' || job_uuid || ' wird ausgeführt. Verschiebe in den Batch-Modus.';
7 END;
8RUN;
9QUIT;
3
Sitzung 2 (Admin): Verwenden Sie `batchresults`, um den Job in den Batch-Modus zu versetzen.
Kopiert!
1PROC CAS SESSION=admin_session;
2 /* Die Variable job_uuid wird aus dem vorherigen Schritt übernommen */
3 SESSION.batchresults / uuid=job_uuid;
4RUN;
5QUIT;
4
Sitzung 1 (Analyst): Überprüfen Sie, ob die Sitzung nicht mehr blockiert ist und die Aktion nicht mehr aktiv ist.
Kopiert!
1PROC CAS SESSION=analyst_session;
2 /* Dieser Aufruf sollte sofort zurückkehren */
3 BUILTINS.echo message='Analystensitzung ist frei.';
4 /* Überprüfen, ob der Job nicht mehr in der Sitzung aktiv ist */
5 SESSION.actionstatus RESULT=STATUS job='long_summary';
6 /* Erwartet, dass der Job nicht gefunden wird, da er jetzt ein Batch-Job ist */
7RUN;
8QUIT;

Erwartetes Ergebnis


Die Aktion `batchresults` wird erfolgreich ausgeführt. Die Sitzung des Analysten wird sofort freigegeben. Die `summary`-Aktion wird im Hintergrund weiter ausgeführt, und ihre Ergebnisse können später mit `fetchresult` unter Verwendung der Job-UUID abgerufen werden. Der Status des Jobs in der ursprünglichen Sitzung wird nicht mehr als 'Running' angezeigt.