Veröffentlicht am :
Datenanalyse INTERNE ERSTELLUNG

Ausführungsdetails einer FedSQL-Abfrage abrufen

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Die Aktion fedsql.execdirect ermöglicht das direkte Senden von SQL-Abfragen an den CAS-Server. Durch Angabe des Parameters 'showStages=true' kann ein detaillierter Bericht des Abfrage-Ausführungsplans abgerufen werden. Dieser Bericht unterteilt die Ausführung in mehrere Phasen, zeigt die verwendeten Methoden (z. B. Sortierung, Aggregation, sequenzielles Scannen), die für jede Phase generierte SQL-Abfrage (stage query), die Anzahl der Datenzugriffs-Threads pro Worker, die Eingabetabellen mit ihren Eigenschaften (Anzahl der Zeilen, Spalten, Partitionierung) und die Ausführungszeiten für jede Phase und für die gesamte Abfrage. Diese Informationen sind entscheidend für die Optimierung von Abfragen und das Verständnis des Verhaltens von FedSQL auf der verteilten Architektur von CAS.
Datenanalyse

Type : INTERNE ERSTELLUNG


Die Beispiele verwenden eine intern mit einem DATA Step erstellte Tabelle 'crimeCensus' mit fiktiven Daten, um das in der Dokumentation beschriebene Verhalten zu simulieren.

1 Codeblock
DATA STEP / FEDSQL.EXECDIRECT Data
Erklärung :
Dieses minimale Beispiel erstellt eine temporäre Tabelle 'crimeCensus' in CASUSER mit fiktiven Daten. Anschließend wird eine einfache FedSQL-Abfrage ausgeführt, die die Anzahl der Vorkommen für jeden 'primary_type' zählt und die Ergebnisse absteigend nach der Anzahl sortiert. Der Parameter 'showStages' wird hier nicht verwendet, um die grundlegende Verwendung der Aktion zu veranschaulichen.
Kopiert!
1DATA casuser.crimeCensus;
2 INFILE DATALINES dlm=';';
3 INPUT primary_type $ date :yymmdd10. community_area hardship_index per_capita_income;
4 FORMAT date yymmdd10.;
5 DATALINES;
6THEFT;2015-01-15;10;80;25000
7THEFT;2015-02-20;10;80;25000
8THEFT;2015-03-01;10;80;25000
9THEFT;2015-04-10;10;80;25000
10THEFT;2015-05-05;10;80;25000
11THEFT;2016-01-20;10;80;25000
12THEFT;2016-02-25;10;80;25000
13THEFT;2016-03-05;10;80;25000
14THEFT;2016-04-15;10;80;25000
15THEFT;2016-05-10;10;80;25000
16ASSAULT;2015-01-01;20;70;30000
17ASSAULT;2015-01-02;20;70;30000
18ASSAULT;2015-01-03;20;70;30000
19ASSAULT;2015-01-04;20;70;30000
20ASSAULT;2015-01-05;20;70;30000
21ROBBERY;2016-06-01;30;90;20000
22ROBBERY;2016-06-02;30;90;20000
23ROBBERY;2016-06-03;30;90;20000
24ROBBERY;2016-06-04;30;90;20000
25ROBBERY;2016-06-05;30;90;20000
26;
27RUN;
28 
29PROC CAS;
30 fedsql.execdirect
31 query="select primary_type, count(*) as count from crimeCensus group by primary_type order by count desc";
32QUIT;
33 
2 Codeblock
FEDSQL.EXECDIRECT
Erklärung :
Dieses Beispiel reproduziert den in der Dokumentation angegebenen Anwendungsfall. Es wird eine komplexere FedSQL-Abfrage übermittelt, die nach Kriminalitätstyp ('THEFT') und einem Datumsbereich filtert, nach mehreren Variablen gruppiert und eine 'HAVING'-Bedingung enthält. Der Parameter 'showStages=true' ist aktiviert, um die Details des Ausführungsplans zu erhalten, die die verschiedenen Schritte der Abfrageverarbeitung auf dem CAS-Server zeigen.
Kopiert!
1PROC CAS;
2 fedsql.execdirect
3 showStages=true
4 query="select primary_type, count(*) as count, community_area,
5 hardship_index, per_capita_income from crimeCensus
6 where primary_type='THEFT'
7 and date between date '2015-01-01' and date'2016-01-01'
8 group by primary_type, community_area, hardship_index, per_capita_income
9 having count(*) >= 5
10 order by count desc";
11QUIT;
3 Codeblock
FEDSQL.EXECDIRECT
Erklärung :
Dieses fortgeschrittene Beispiel führt einen Join zwischen der Tabelle 'crimeCensus' (erstellt in Beispiel 1) und einer neuen Tabelle 'population_data' ein. Die Abfrage berechnet die Gesamtzahl der Vorfälle und die Vorfallsrate pro 1000 Einwohner für spezifische Kriminalitätstypen über einen längeren Zeitraum. Die Verwendung von 'showStages=true' ermöglicht die Analyse des Ausführungsplans für diese Multi-Tabellen-Abfrage, einschließlich der Art und Weise, wie der Join und komplexe Berechnungen von FedSQL auf CAS gehandhabt werden.
Kopiert!
1DATA casuser.population_data;
2 INFILE DATALINES dlm=';';
3 INPUT community_area $ population;
4 DATALINES;
510;50000
620;75000
730;60000
8;
9RUN;
10 
11PROC CAS;
12 fedsql.execdirect
13 showStages=true
14 query="select c.primary_type, count(c.*) as total_incidents,
15 c.community_area, p.population,
16 (count(c.*) * 1000 / p.population) as incidents_per_1000
17 from crimeCensus as c
18 join population_data as p
19 on c.community_area = p.community_area
20 where c.primary_type in ('THEFT', 'ROBBERY')
21 and c.date between date '2015-01-01' and date '2016-12-31'
22 group by c.primary_type, c.community_area, p.population
23 having count(c.*) >= 2
24 order by incidents_per_1000 desc";
25QUIT;
4 Codeblock
FEDSQL.EXECDIRECT / TABLE.REPLICATE
Erklärung :
Dieses Beispiel konzentriert sich auf die Viya/CAS-Integration, indem die Tabelle 'crimeCensus' (zu Demonstrationszwecken wird die Tabelle bei Bedarf zuerst neu erstellt) im CAS-Server-Speicher mithilfe der Aktion 'table.replicate' repliziert wird. Die Replikation kann die Leistung für kleine, häufig aufgerufene Tabellen verbessern. Anschließend wird eine FedSQL-Abfrage auf der replizierten Tabelle mit 'showStages=true' ausgeführt, um zu beobachten, wie der Ausführungsplan die replizierte Tabelle nutzt (z. B. 'Replicated to one worker' in der Planausgabe), was eine effizientere Datenzugriffszeit zeigen kann.
Kopiert!
1PROC CAS;
2 /* Créer la table crimeCensus si elle n'existe pas déjà (dupliqué pour l'autonomie) */
3 DATA casuser.crimeCensus;
4 INFILE DATALINES dlm=';';
5 INPUT primary_type $ date :yymmdd10. community_area hardship_index per_capita_income;
6 FORMAT date yymmdd10.;
7 DATALINES;
8THEFT;2015-01-15;10;80;25000
9THEFT;2015-02-20;10;80;25000
10THEFT;2015-03-01;10;80;25000
11THEFT;2015-04-10;10;80;25000
12THEFT;2015-05-05;10;80;25000
13THEFT;2016-01-20;10;80;25000
14THEFT;2016-02-25;10;80;25000
15THEFT;2016-03-05;10;80;25000
16THEFT;2016-04-15;10;80;25000
17THEFT;2016-05-10;10;80;25000
18ASSAULT;2015-01-01;20;70;30000
19ASSAULT;2015-01-02;20;70;30000
20ASSAULT;2015-01-03;20;70;30000
21ASSAULT;2015-01-04;20;70;30000
22ASSAULT;2015-01-05;20;70;30000
23ROBBERY;2016-06-01;30;90;20000
24ROBBERY;2016-06-02;30;90;20000
25ROBBERY;2016-06-03;30;90;20000
26ROBBERY;2016-06-04;30;90;20000
27ROBBERY;2016-06-05;30;90;20000
28;
29 RUN;
30 
31 /* Répliquer la table crimeCensus dans CAS pour une meilleure performance */
32 TABLE.replicate /
33 name='crimeCensus',
34 caslib='casuser',
35 target='crimeCensus_replicated',
36 numreplicas=1; /* Répliquer sur un seul worker pour une petite table */
37 
38 /* Exécuter une requête FedSQL sur la table répliquée avec showStages */
39 fedsql.execdirect
40 showStages=true
41 query="select primary_type, count(*) as count from crimeCensus_replicated group by primary_type order by count desc";
42QUIT;
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