?>Array ( [lang] => es [id] => 53 ) Supervisión del Estado de Múltiples Cargas de Datos Asíncronas en Paralelo - WeAreCAS
session actionstatus

Supervisión del Estado de Múltiples Cargas de Datos Asíncronas en Paralelo

Scénario de test & Cas d'usage

Contexto empresarial

Un equipo de ingeniería de datos necesita cargar varias tablas grandes a CAS. Para acelerar el proceso, inician múltiples trabajos de carga de forma asíncrona. Necesitan un panel de control para ver el estado de todos los trabajos activos en su sesión de una sola vez.
Preparación de datos

Creación de tres tablas de ejemplo (ventas, clientes, productos) para simular una carga ETL.

¡Copiado!
1DATA ventas_2023; LENGTH region $20; DO i=1 to 100000; region='Norte'; ventas=rand('UNIFORM')*1000; OUTPUT; END; RUN;
2DATA clientes_activos; LENGTH STATUS $10; DO i=1 to 50000; STATUS='Activo'; cliente_id=i; OUTPUT; END; RUN;
3DATA catalogo_productos; LENGTH categoria $30; DO i=1 to 1000; categoria='Electrónica'; producto_id=i; OUTPUT; END; RUN;

Étapes de réalisation

1
Cargar las tablas locales a CAS para que sirvan como fuente para las acciones asíncronas.
¡Copiado!
1PROC casutil;
2 SESSION casauto;
3 load DATA=work.ventas_2023 out=ventas_2023 replace;
4 load DATA=work.clientes_activos out=clientes_activos replace;
5 load DATA=work.catalogo_productos out=catalogo_productos replace;
6QUIT;
2
Iniciar tres acciones de transformación de datos (`partition`) de forma asíncrona y en paralelo.
¡Copiado!
1PROC CAS;
2 SESSION casauto;
3 async 'job_ventas', TABLE.partition / TABLE={name='ventas_2023'}, casout={name='ventas_part', replace=true};
4 async 'job_clientes', TABLE.partition / TABLE={name='clientes_activos'}, casout={name='clientes_part', replace=true};
5 async 'job_productos', TABLE.partition / TABLE={name='catalogo_productos'}, casout={name='productos_part', replace=true};
6QUIT;
3
Usar `actionstatus` para obtener una vista consolidada del estado de todos los trabajos en la sesión.
¡Copiado!
1PROC CAS;
2 SESSION casauto;
3 SESSION.sessionId RESULT=r_sess;
4 uuid_actual = r_sess.SESSION;
5 PRINT 'Monitoreando todos los trabajos para el UUID:' uuid_actual;
6 SESSION.actionStatus / uuid=uuid_actual;
7 
8 /* Esperar a que todos los trabajos finalicen */
9 waitfor _all_;
10 
11 PRINT 'Verificando estado final de todos los trabajos:';
12 SESSION.actionStatus / uuid=uuid_actual;
13QUIT;

Resultado esperado


La primera llamada a `actionstatus` debe listar las tres acciones `table.partition` con su estado actual (probablemente 'En ejecución'). La segunda llamada, después de `waitfor _all_`, debe mostrar las tres acciones con el estado 'Completada', validando que `actionstatus` puede monitorear múltiples trabajos simultáneamente en una sesión.