Veröffentlicht am :
ETL CREATION_INTERNE

Visualisierung von DATA Step-Verarbeitungsinformationen mit automatischen Variablen

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Wenn der DATA Step in SAS© Cloud Analytic Services (CAS) ausgeführt wird, läuft er automatisch im Multithread-Modus, selbst auf einer einzelnen CAS-Maschine. Das DATA Step-Programm wird auf dem CAS-Cluster repliziert, wobei jeder Knoten den DATA Step mit mehreren Threads auf einem Teil der Tabelle ausführt. Die automatische Variable '_THREADID_' ermöglicht die Anzeige der ID des aktuellen Threads, der eine Datenzeile verarbeitet. Die Variable 'FIRST.variable' wird verwendet, um den Beginn einer in einer BY-Anweisung angegebenen Variablengruppe zu identifizieren, was entscheidend ist, um zu verstehen, wie Daten in einer verteilten Umgebung gruppiert und sortiert werden. Der Parameter SINGLE=YES kann verwendet werden, um eine Ausführung in einem einzigen Thread zu erzwingen, was für kleine bis mittelgroße Tabellen nützlich ist, bei denen die Reihenfolge wichtig ist und die Leistung keine Einschränkung darstellt.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden SASHELP-Daten (sashelp.cars) oder intern erstellte Tabellen (Datalines), um ihre Autonomie und Reproduzierbarkeit zu gewährleisten.

1 Codeblock
DATA STEP Data
Erklärung :
Dieses Beispiel veranschaulicht die Verwendung der automatischen Variable _THREADID_, um zu sehen, welcher Thread jede Beobachtung in einem Multithread-DATA Step auf CAS verarbeitet. Es verwendet auch FIRST.make, um den Beginn jeder 'make'-Gruppe zu identifizieren.
Kopiert!
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 Codeblock
DATA STEP Data
Erklärung :
Dieser Fall vergleicht die Standardausführung (Multithread) mit der erzwungenen Single-Thread-Ausführung (über SINGLE=YES) in CAS, wobei _THREADID_ verwendet wird, um den Unterschied in den zugewiesenen Thread-IDs zu zeigen. Nur die ersten 10 Beobachtungen werden zum Vergleich angezeigt.
Kopiert!
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 Codeblock
DATA STEP Data
Erklärung :
Dieses fortgeschrittene Beispiel kombiniert die automatischen Variablen _THREADID_, _N_ (Iterationsnummer des DATA Step) und _ERROR_ (Fehlerindikator) innerhalb eines in CAS ausgeführten DATA Step. Es zeigt, wie sich diese Variablen in einer Multithread-Umgebung verhalten und wie _ERROR_ manipuliert werden kann, um spezifische Bedingungen zu signalisieren, zusätzlich zur Identifizierung des Beginns von BY-Gruppen.
Kopiert!
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 Codeblock
DATA STEP Data
Erklärung :
Dieses Beispiel ist für Performance und Debugging in einer CAS-Umgebung konzipiert. Es erstellt einen Datensatz von 100 Beobachtungen, die in Gruppen aufgeteilt sind. Der DATA Step verwendet _THREADID_, um im Log (über die PUT-Anweisung) anzuzeigen, welcher Thread die Verarbeitung jeder neuen Gruppe beginnt. Dies kann nützlich sein, um die Verteilung der Arbeitslast und den effektiven Parallelismus des DATA Step auf dem CAS-Cluster zu verstehen, insbesondere um potenzielle Ungleichgewichte zu identifizieren oder zu überprüfen, ob die Verarbeitung gut verteilt ist. Die Ausgabe ist nur eine Vorschau, die Hauptinformation befindet sich im Log.
Kopiert!
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 
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved.