Publié le :
ETL CREATION_INTERNE

Visualiser les informations de traitement DATA Step avec les variables automatiques

Ce code est également disponible en : Deutsch English Español
En attente de validation
Lorsque le DATA Step s'exécute dans SAS© Cloud Analytic Services (CAS), il fonctionne automatiquement en mode multithread, même sur une machine CAS unique. Le programme DATA Step est répliqué sur le cluster CAS, chaque nœud exécutant le DATA Step avec plusieurs threads sur une partie de la table. La variable automatique '_THREADID_' permet de visualiser l'ID du thread actuel traitant une ligne de données. La variable 'FIRST.variable' est utilisée pour identifier le début d'un groupe de variables spécifié dans une instruction BY, ce qui est crucial pour comprendre comment les données sont regroupées et ordonnées dans un environnement distribué. Le paramètre SINGLE=YES peut être utilisé pour forcer une exécution en thread unique, utile pour des tables de petite ou moyenne taille où l'ordre est important et la performance n'est pas une contrainte.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données SASHELP (sashelp.cars) ou des tables créées en interne (datalines) pour assurer leur autonomie et leur reproductibilité.

1 Bloc de code
DATA STEP Data
Explication :
Cet exemple illustre l'utilisation de la variable automatique _THREADID_ pour voir quel thread traite chaque observation dans un DATA Step multithreaded sur CAS. Il utilise également FIRST.make pour identifier le début de chaque groupe 'make'.
Copié !
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 Bloc de code
DATA STEP Data
Explication :
Ce cas compare l'exécution par défaut (multithread) et l'exécution forcée en monothread (via SINGLE=YES) dans CAS, en utilisant _THREADID_ pour montrer la différence dans les IDs de thread attribués. Seuls les 10 premières observations sont affichées pour la comparaison.
Copié !
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 Bloc de code
DATA STEP Data
Explication :
Cet exemple avancé combine les variables automatiques _THREADID_, _N_ (numéro d'itération du DATA Step) et _ERROR_ (indicateur d'erreur) au sein d'un DATA Step exécuté en CAS. Il montre comment ces variables se comportent dans un environnement multithread et comment _ERROR_ peut être manipulé pour signaler des conditions spécifiques, en plus d'identifier le début des groupes BY.
Copié !
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 Bloc de code
DATA STEP Data
Explication :
Cet exemple est conçu pour la performance et le débogage dans un environnement CAS. Il crée un jeu de données de 100 observations réparties en groupes. Le DATA Step utilise _THREADID_ pour afficher dans le log (via l'instruction PUT) quel thread commence le traitement de chaque nouveau groupe. Cela peut être utile pour comprendre la distribution de la charge de travail et le parallélisme effectif du DATA Step sur le cluster CAS, en particulier pour identifier des déséquilibres potentiels ou pour vérifier que le traitement est bien distribué. L'output n'est qu'un aperçu, l'information principale étant dans le log.
Copié !
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 
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.