Publicado el :
ETL CREATION_INTERNE

Visualizar información de procesamiento DATA Step con variables automáticas

Este código también está disponible en: Deutsch English Français
En espera de validación
Cuando DATA Step se ejecuta en SAS© Cloud Analytic Services (CAS), funciona automáticamente en modo multithread, incluso en una única máquina CAS. El programa DATA Step se replica en el clúster CAS, y cada nodo ejecuta el DATA Step con múltiples threads en una parte de la tabla. La variable automática '_THREADID_' permite visualizar el ID del thread actual que procesa una fila de datos. La variable 'FIRST.variable' se usa para identificar el inicio de un grupo de variables especificado en una instrucción BY, lo cual es crucial para comprender cómo se agrupan y ordenan los datos en un entorno distribuido. El parámetro SINGLE=YES se puede usar para forzar una ejecución de thread único, útil para tablas de tamaño pequeño a mediano donde el orden es importante y el rendimiento no es una restricción.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos SASHELP (sashelp.cars) o tablas creadas internamente (datalines) para asegurar su autonomía y reproducibilidad.

1 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo ilustra el uso de la variable automática _THREADID_ para ver qué thread procesa cada observación en un DATA Step multithread en CAS. También usa FIRST.make para identificar el inicio de cada grupo 'make'.
¡Copiado!
1DATA mycas.cars;
2 SET sashelp.cars;
3RUN;
4
5DATA mycas.cars_processed;
6 SET mycas.cars;
7 BY make type;
8 IF first.make THEN first_make_flag="BY Group";
9 ELSE first_make_flag="";
10 threadid = _threadid_;
11 keep make type first_make_flag threadid;
12RUN;
13PROC PRINT DATA=mycas.cars_processed;
14 title 'Cars By Make By Type - Multithreaded Processing';
15RUN;
16 
2 Bloque de código
DATA STEP Data
Explicación :
Este caso compara la ejecución predeterminada (multithread) y la ejecución forzada en monothread (mediante SINGLE=YES) en CAS, utilizando _THREADID_ para mostrar la diferencia en los IDs de thread asignados. Solo se muestran las 10 primeras observaciones para la comparación.
¡Copiado!
1DATA mycas.cars;
2 SET sashelp.cars;
3RUN;
4 
5/* Exécution multithread par défaut */
6DATA mycas.cars_multi;
7 SET mycas.cars;
8 threadid = _threadid_;
9 keep make model threadid;
10RUN;
11 
12/* Exécution monothread forcée */
13DATA mycas.cars_single(single=yes);
14 SET mycas.cars;
15 threadid = _threadid_;
16 keep make model threadid;
17RUN;
18 
19PROC PRINT DATA=mycas.cars_multi(obs=10);
20 title 'Traitement Multithread (extrait)';
21RUN;
22PROC PRINT DATA=mycas.cars_single(obs=10);
23 title 'Traitement Monothread (extrait)';
24RUN;
25 
3 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo avanzado combina las variables automáticas _THREADID_, _N_ (número de iteración del DATA Step) y _ERROR_ (indicador de error) dentro de un DATA Step ejecutado en CAS. Muestra cómo estas variables se comportan en un entorno multithread y cómo se puede manipular _ERROR_ para señalar condiciones específicas, además de identificar el inicio de los grupos BY.
¡Copiado!
1DATA _null_;
2 INPUT id $ value;
3 DATALINES;
41 A
51 B
62 C
73 D
83 E
94 F
10;
11RUN;
12 
13DATA mycas.test_data;
14 SET _null_;
15RUN;
16 
17DATA mycas.processed_data;
18 SET mycas.test_data;
19 BY id;
20 IF first.id THEN group_start = 1;
21 ELSE group_start = 0;
22 record_num = _n_;
23 thread_id = _threadid_;
24 IF value = 'B' THEN _error_ = 1;
25 error_flag = _error_;
26 keep id value group_start record_num thread_id error_flag;
27RUN;
28 
29PROC PRINT DATA=mycas.processed_data;
30 title 'Analyse des Variables Automatiques _N_ et _ERROR_ dans CAS';
31RUN;
32 
4 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo está diseñado para el rendimiento y la depuración en un entorno CAS. Crea un conjunto de datos de 100 observaciones divididas en grupos. El DATA Step utiliza _THREADID_ para mostrar en el log (mediante la instrucción PUT) qué thread comienza el procesamiento de cada nuevo grupo. Esto puede ser útil para comprender la distribución de la carga de trabajo y el paralelismo efectivo del DATA Step en el clúster CAS, especialmente para identificar posibles desequilibrios o para verificar que el procesamiento está bien distribuido. La salida es solo una vista previa, la información principal está en el log.
¡Copiado!
1/* Création d'une table CAS temporaire */
2DATA mycas.sample_data;
3 DO i = 1 to 100;
4 group = ceil(i/10);
5 value = ranuni(0) * 100;
6 OUTPUT;
7 END;
8RUN;
9 
10/* DATA Step avec logging pour suivre les threads */
11DATA mycas.debug_output;
12 SET mycas.sample_data;
13 BY group;
14 thread_id = _threadid_;
15 IF first.group THEN DO;
16 put 'DEBUG: Nouveau groupe ' group ' sur thread ' thread_id;
17 END;
18 OUTPUT;
19RUN;
20 
21/* Affichage des 10 premières lignes du résultat pour validation */
22PROC PRINT DATA=mycas.debug_output(obs=10);
23 title 'Sortie du DATA Step avec IDs de Thread';
24RUN;
25 
26/* Pour une analyse complète du logging, consulter le log SAS Studio */
27 
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved.