Publicado el :
DATA Step CREATION_INTERNE

Ejecutar DATA Step en Multihilos (CAS)

Este código también está disponible en: Deutsch English Français
En espera de validación
La ejecución multihilo de un paso DATA en CAS permite la paralelización automática de las operaciones de procesamiento de datos en todos los nodos disponibles del servidor CAS. Esto mejora significativamente el rendimiento para grandes conjuntos de datos. El motor CAS gestiona la distribución de datos y la coordinación de los hilos, haciendo que esta funcionalidad sea transparente para el usuario en la mayoría de los casos. La opción 'SINGLE=NO' generalmente no es necesaria ya que el multihilo es el comportamiento predeterminado para los pasos DATA que leen y escriben en tablas CAS. La excepción principal es un paso DATA sin datos de entrada, que se ejecuta por defecto en un solo hilo.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) o la biblioteca SASHELP.

1 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo ilustra el comportamiento predeterminado del paso DATA en CAS, que es ejecutarse en múltiples hilos. Primero, una tabla de demostración de SAS (sashelp.class) se carga en la memoria CAS. Luego, un segundo paso DATA lee esta tabla CAS y escribe una nueva tabla CAS. La variable automática `_NTHREADS_` se utiliza para confirmar que el paso DATA se ejecuta utilizando múltiples hilos.
¡Copiado!
1LIBNAME mycas cas;
2 
3/* Crée une table CAS à partir de sashelp.class */
4DATA mycas.class_data;
5 SET sashelp.class;
6RUN;
7 
8/* Exécute une étape DATA multi-threadée sur la table CAS */
9DATA mycas.class_processed;
10 SET mycas.class_data;
11 /*_NTHREADS_ est une variable automatique qui affiche le nombre de threads*/
12 put 'Nombre de threads actifs : ' _nthreads_;
13RUN;
2 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo crea una pequeña tabla CAS directamente a partir de 'datalines'. Luego, realiza un cálculo simple (Total_Valeur = Prix * Quantite) en un paso DATA. La opción `single=no` se añade explícitamente a la tabla de salida, aunque sea el comportamiento predeterminado, para resaltar la intención de ejecución multihilo. La variable `_NTHREADS_` confirma el uso de múltiples hilos y muestra el número de hilo para cada observación procesada.
¡Copiado!
1LIBNAME mycas cas;
2 
3/* Création d'une table d'exemple dans CAS */
4DATA mycas.produits;
5 INPUT ID Produit $ Prix Quantite;
6 DATALINES;
7 1 Pomme 1.5 100
8 2 Poire 2.0 150
9 3 Banane 0.75 200
10 4 Orange 1.2 120
11 ;
12RUN;
13 
14/* Traitement multi-threadé avec calcul de la valeur totale */
15DATA mycas.produits_valeur(single=no);
16 SET mycas.produits;
17 Total_Valeur = Prix * Quantite;
18 put 'Traitement sur thread ' _nthreads_ ' pour ID ' ID;
19RUN;
3 Bloque de código
DATA STEP (MERGE) Data
Explicación :
Este ejemplo avanzado demuestra una operación de unión (MERGE) entre dos tablas CAS ('employes' y 'salaires') utilizando el paso DATA multihilo. La ordenación previa por 'EmpID' es gestionada implícitamente por CAS si las tablas ya están ordenadas o si CAS puede optimizarlo. La opción `single=no` se utiliza para confirmar el comportamiento multihilo. Se añade una verificación condicional sobre `_NTHREADS_` para mostrar si la operación se realiza en multihilo o no, lo cual debería ser el caso aquí.
¡Copiado!
1LIBNAME mycas cas;
2 
3/* Création de deux tables CAS pour la jointure */
4DATA mycas.employes;
5 INPUT EmpID Nom $ Departement $;
6 DATALINES;
7 101 Alice Ventes
8 102 Bob Marketing
9 103 Charlie Ventes
10 104 David IT
11 ;
12RUN;
13 
14DATA mycas.salaires;
15 INPUT EmpID Salaire Annuel;
16 DATALINES;
17 101 60000
18 102 75000
19 103 62000
20 104 80000
21 ;
22RUN;
23 
24/* Jointure des tables en multi-threads */
25DATA mycas.employes_complet (single=no);
26 MERGE mycas.employes mycas.salaires;
27 BY EmpID;
28 IF _nthreads_ > 1 THEN put 'Jointure en cours sur un thread multiple.';
29 ELSE put 'Jointure en cours sur un seul thread.';
30RUN;
4 Bloque de código
PROC CAS / DATA STEP Data
Explicación :
Este ejemplo ilustra una integración más profunda con el entorno Viya/CAS. Comienza asegurándose de que una sesión CAS esté activa. Luego, crea una tabla CAS con un gran número de observaciones para simular mejor un escenario de producción donde el multihilo es esencial. Se utiliza una 'proc cas' para ejecutar una acción CAS ('simple.summary') para generar estadísticas descriptivas, demostrando la interacción entre las PROC CAS y los pasos DATA. Finalmente, se ejecuta un paso DATA en modo multihilo para añadir una columna 'categorie' basada en una condición, mientras se muestra el hilo de procesamiento para cada observación, confirmando la ejecución paralela. Las opciones `casport` y `cashost` son marcadores de posición y deben adaptarse al entorno CAS de su usuario.
¡Copiado!
1LIBNAME mycas cas;
2 
3/* Démarrer une session CAS si non déjà active (pour l'autonomie de l'exemple) */
4/* Si une session est déjà active, cette étape sera ignorée ou signalée. */
5options casport=5570 cashost='localhost'; /* Adaptez si votre configuration CAS est différente */
6cas mycas;
7 
8/* Création d'une table temporaire en CAS avec des données plus volumineuses */
9DATA mycas.donnees_large;
10 DO i = 1 to 100000;
11 valeur1 = rand('Uniform');
12 valeur2 = i * 10;
13 OUTPUT;
14 END;
15RUN;
16 
17/* Utilisation d'une action CAS pour obtenir des statistiques, puis traitement DATA step multi-threadé */
18PROC CAS;
19 LOADACTIONSET 'simple';
20 SIMPLE.summary RESULT=summary_res /
21 TABLE={name='donnees_large', caslib='mycas'}
22 inputs={'valeur1', 'valeur2'};
23 PRINT summary_res;
24RUN;
25 
26/* Traitement conditionnel et agrégation en multi-threads */
27DATA mycas.resultat_agrege;
28 SET mycas.donnees_large;
29 IF valeur1 > 0.5 THEN categorie = 'Haute';
30 ELSE categorie = 'Basse';
31 put 'Thread ' _nthreads_ ': Traitement de l''observation ' _n_;
32RUN;
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.