Scénario de test & Cas d'usage
Erstellung einer großen Tabelle mit Finanztransaktionen, um eine langlaufende Aggregation zu simulieren.
| 1 | DATA 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.; |
| 12 | RUN; |
| 1 | cas analyst_session name='analyst_sess'; |
| 2 | PROC CAS; |
| 3 | SESSION caslib='casuser'; |
| 4 | SIMPLE.summary TABLE={name='transactions_large'}, inputs={{name='amount'}}, subSet={'SUM'}, _async='long_summary'; |
| 5 | RUN; |
| 6 | QUIT; |
| 1 | cas admin_session name='admin_sess'; |
| 2 | PROC 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; |
| 8 | RUN; |
| 9 | QUIT; |
| 1 | PROC CAS SESSION=admin_session; |
| 2 | /* Die Variable job_uuid wird aus dem vorherigen Schritt übernommen */ |
| 3 | SESSION.batchresults / uuid=job_uuid; |
| 4 | RUN; |
| 5 | QUIT; |
| 1 | PROC 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 */ |
| 7 | RUN; |
| 8 | QUIT; |
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.