Publié le :
DATA Step CREATION_INTERNE

Exécuter DATA Step en Multi-threads (CAS)

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'exécution multi-thread d'une étape DATA en CAS permet une parallélisation automatique des opérations de traitement de données sur tous les nœuds disponibles du serveur CAS. Cela améliore considérablement les performances pour les grands ensembles de données. Le moteur CAS gère la distribution des données et la coordination des threads, rendant cette fonctionnalité transparente pour l'utilisateur dans la plupart des cas. L'option 'SINGLE=NO' n'est généralement pas requise car le multi-threading est le comportement par défaut pour les étapes DATA qui lisent et écrivent sur des tables CAS. L'exception principale est une étape DATA sans données d'entrée, qui s'exécute par défaut en un seul thread.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou la bibliothèque SASHELP.

1 Bloc de code
DATA STEP Data
Explication :
Cet exemple illustre le comportement par défaut de l'étape DATA en CAS, qui est de s'exécuter en plusieurs threads. Tout d'abord, une table SAS de démonstration (sashelp.class) est chargée en mémoire CAS. Ensuite, une seconde étape DATA lit cette table CAS et écrit une nouvelle table CAS. La variable automatique `_NTHREADS_` est utilisée pour confirmer que l'étape DATA s'exécute bien en utilisant plusieurs threads.
Copié !
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 Bloc de code
DATA STEP Data
Explication :
Cet exemple crée une petite table CAS directement à partir de 'datalines'. Ensuite, il effectue un calcul simple (Total_Valeur = Prix * Quantite) dans une étape DATA. L'option `single=no` est explicitement ajoutée à la table de sortie, bien que ce soit le comportement par défaut, pour souligner l'intention d'exécution multi-threadée. La variable `_NTHREADS_` confirme l'utilisation de plusieurs threads et montre le numéro de thread pour chaque observation traitée.
Copié !
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 Bloc de code
DATA STEP (MERGE) Data
Explication :
Cet exemple avancé démontre une opération de jointure (MERGE) entre deux tables CAS ('employes' et 'salaires') en utilisant l'étape DATA multi-threadée. Le tri préalable par 'EmpID' est implicitement géré par CAS si les tables sont déjà triées ou si CAS peut l'optimiser. L'option `single=no` est utilisée pour confirmer le comportement multi-thread. Une vérification conditionnelle sur `_NTHREADS_` est ajoutée pour afficher si l'opération se déroule en multi-thread ou non, ce qui devrait être le cas ici.
Copié !
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 Bloc de code
PROC CAS / DATA STEP Data
Explication :
Cet exemple illustre une intégration plus poussée avec l'environnement Viya/CAS. Il commence par s'assurer qu'une session CAS est active. Ensuite, il crée une table CAS avec un grand nombre d'observations pour mieux simuler un scénario de production où le multi-threading est essentiel. Une 'proc cas' est utilisée pour exécuter une action CAS ('simple.summary') afin de générer des statistiques descriptives, démontrant l'interaction entre les PROC CAS et les étapes DATA. Enfin, une étape DATA est exécutée en mode multi-threadé pour ajouter une colonne 'categorie' basée sur une condition, tout en affichant le thread de traitement pour chaque observation, confirmant l'exécution parallèle. Les options `casport` et `cashost` sont des placeholders et doivent être adaptés à l'environnement CAS de l'utilisateur.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved.