Scénario de test & Cas d'usage
Gestión del estado de la sesión CAS.
Descubrir todas las acciones de sessionCreación de una tabla de clientes simulada con 1 millón de registros y varias características para el entrenamiento del modelo. La tabla 'WORK.CLIENT_DATA' se cargará en CAS.
| 1 | DATA WORK.CLIENT_DATA; |
| 2 | call streaminit(123); |
| 3 | DO i = 1 to 1000000; |
| 4 | ID_CLIENTE = i; |
| 5 | ANTIGUEDAD_MESES = floor(rand('UNIFORM') * 120) + 1; |
| 6 | NUM_PRODUCTOS = floor(rand('UNIFORM') * 5) + 1; |
| 7 | SALDO_CUENTA = rand('NORMAL', 10000, 2500); |
| 8 | PUNTUACION_CREDITO = floor(rand('UNIFORM') * 550) + 300; |
| 9 | ABANDONO = rand('BERNOULLI', 0.2); |
| 10 | OUTPUT; |
| 11 | END; |
| 12 | RUN; |
| 1 | PROC CAS; |
| 2 | TABLE.loadTable / |
| 3 | caslib='CASUSER' |
| 4 | path='CLIENT_DATA' |
| 5 | casOut={name='CLIENT_DATA_CAS', promote=true}; |
| 6 | RUN; |
| 1 | SESSION training_session; |
| 2 | ACTION logistic.glm / |
| 3 | TABLE={name='CLIENT_DATA_CAS'} |
| 4 | class={'NUM_PRODUCTOS'} |
| 5 | model={depvar='ABANDONO', effects={'ANTIGUEDAD_MESES', 'SALDO_CUENTA', 'PUNTUACION_CREDITO', 'NUM_PRODUCTOS'}} |
| 6 | async='logisticJob'; |
| 7 | RUN; |
| 1 | SESSION; /* Volver a la sesión principal */ |
| 2 | ACTION listSessions RESULT=r; |
| 3 | /* El siguiente paso en un programa real sería encontrar el UUID programáticamente */ |
| 4 | /* Para este test, asumimos que se ha identificado y almacenado en una macro variable o string */ |
| 1 | /* Asumir que 'sess_uuid' contiene el UUID de 'training_session' */ |
| 2 | |
| 3 | SESSION.batchresults uuid="<uuid_de_training_session>"; |
| 4 | RUN; |
| 5 |
La acción `logistic.glm` debe continuar ejecutándose en el servidor en la `training_session`. La sesión principal del cliente debe quedar libre inmediatamente después de la llamada a `batchresults`, permitiendo ejecutar otras acciones. El log debe confirmar que la acción fue cambiada a modo de lote. Más tarde, los resultados del trabajo 'logisticJob' podrán ser recuperados usando `fetchresult`.