Veröffentlicht am :
ETL CREATION_INTERNE

Betrieb eines FedSQL-Resultatsets mit nativer Sprache

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das ursprüngliche Beispiel verbindet sich mit einer Teradata-Datenbank für seine Quelldaten. In den folgenden Beispielen erstellen wir eine fiktive Mitarbeitertabelle direkt in der CAS-Sitzung. Es führt dann eine FedSQL-Abfrage aus, um Positionen mit mindestens zwei Mitarbeitern zu identifizieren, und iteriert dann über dieses Resultatset. Für jede identifizierte Position wird dynamisch eine neue FedSQL-Abfrage erstellt und ausgeführt, um eine separate CAS-Tabelle zu erstellen, die die Mitarbeiter dieser Position enthält. Dies demonstriert die Leistungsfähigkeit der Integration zwischen FedSQL und den nativen Programmierfunktionen von CASL für die Manipulation verteilter Daten, alles auf autonome Weise.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele erstellen interne Daten (DATA step) direkt in der CAS-Sitzung, um ihre Autonomie zu gewährleisten und die Abhängigkeit von externen Datenquellen zu vermeiden.

1 Codeblock
DATA / fedSql.execDirect Data
Erklärung :
Dieses Beispiel erstellt eine temporäre Tabelle 'employees' in der CAS-Sitzung und verwendet dann `fedSql.execDirect`, um die Anzahl der Mitarbeiter pro Position zu zählen und das Ergebnis anzuzeigen. Es demonstriert die grundlegende Syntax einer FedSQL-Abfrage, die über CASL ausgeführt wird.
Kopiert!
1
2* Création d'une table CAS temporaire pour l'exemple ;
3DATA casuser.employees;
4 INPUT EmpID Name $ Pos $ Salary;
5 DATALINES;
61 John Manager 60000
72 Jane Developer 70000
83 Mike Sales_Associate 50000
94 Sarah Manager 65000
105 David Developer 72000
116 Emily Sales_Associate 52000
127 Chris Manager 62000
138 Laura Developer 68000
14;
15RUN;
16 
17PROC CAS;
18 /* Exécuter une requête FedSQL simple pour compter les postes */
19 fedSql.execDirect RESULT=r query='
20 select Pos, count(Pos) as Count_Pos
21 from casuser.employees
22 group by Pos
23 order by Count_Pos desc
24 ';
25 PRINT r;
26QUIT;
27 
2 Codeblock
fedSql.execDirect
Erklärung :
Basierend auf der zuvor erstellten Tabelle 'employees' verwendet dieses Beispiel `fedSql.execDirect`, um Mitarbeiter mit der Position 'Developer' und einem Gehalt über 70000 zu filtern und die Ergebnisse nach absteigendem Gehalt zu sortieren. Dies veranschaulicht die Verwendung von `WHERE`- und `ORDER BY`-Klauseln in einer einfachen FedSQL-Abfrage.
Kopiert!
1 
2/* La table casuser.employees est créée dans l'exemple 1 */
3 
4PROC CAS;
5 /* Sélectionner les développeurs gagnant plus de 70000 et trier par salaire */
6 fedSql.execDirect RESULT=developers_high_salary query='
7 select EmpID, Name, Salary
8 from casuser.employees
9 where Pos = ''Developer'' and Salary > 70000
10 order by Salary desc
11 ';
12 PRINT developers_high_salary;
13QUIT;
14 
3 Codeblock
DATA / fedSql.execDirect (boucle CASL)
Erklärung :
Dieses fortgeschrittene Beispiel greift das Prinzip des Beispiels aus dem Originaldokument auf. Es beginnt mit dem Abrufen aller unterschiedlichen Positionen aus der Tabelle 'employees'. Anschließend wird eine CASL-Schleife verwendet, um dynamisch FedSQL-Abfragen vom Typ `CREATE TABLE AS SELECT` zu generieren. Jede Abfrage erstellt eine neue CAS-Tabelle (z.B. `Manager`, `Developer`, `SalesAssociate`), die nur die Datensätze enthält, die einer bestimmten Position entsprechen, was eine flexible und automatisierte Datenmanipulation demonstriert.
Kopiert!
1 
2/* La table casuser.employees est créée dans l'exemple 1 */
3 
4PROC CAS;
5 /* Étape 1: Obtenir les postes distincts */
6 fedSql.execDirect RESULT=distinct_pos query='
7 select distinct Pos
8 from casuser.employees
9 ';
10 
11 /* Itérer sur les postes pour créer des tables spécifiques */
12 t = findtable(distinct_pos);
13 DO i = 1 to t.nrows;
14 row = t[i];
15 jobTitle = trim(row['Pos']);
16 jobTitleNoSpaces = compress(jobTitle, ' ');
17 
18 tableName = jobTitleNoSpaces;
19 
20 createTableString = 'create table ' || tableName || ' {options replace=true} as ' ||
21 'select * from casuser.employees where Pos = ''' || jobTitle || '''';
22 
23 PRINT 'Création de la table ' || tableName || '...';
24 fedSql.execDirect query=createTableString;
25 END;
26 
27 /* Afficher le contenu des tables créées dynamiquement (exemple pour 'Manager') */
28 title 'Contenu de la table Manager';
29 fedSql.execDirect query='select * from Manager';
30RUN;
31 
32title 'Contenu de la table Developer';
33fedSql.execDirect query='select * from Developer';
34RUN;
35 
36title 'Contenu de la table SalesAssociate';
37fedSql.execDirect query='select * from SalesAssociate';
38RUN;
39 
40QUIT;
41 
4 Codeblock
DATA / fedSql.execDirect (jointure) Data
Erklärung :
Dieses Beispiel erstellt zwei separate Tabellen in der CAS-Sitzung (`employees_details` und `employees_salary`). Anschließend werden diese explizit in den CAS-Speicher geladen. Die Leistungsfähigkeit von FedSQL wird dann genutzt, um einen inneren Join (`INNER JOIN`) zwischen diesen beiden Tabellen basierend auf der ID `EmpID` durchzuführen. Das Ergebnis kombiniert die Detail- und Gehaltsinformationen der Mitarbeiter und demonstriert eine Schlüsselintegration der CAS-Datenmanipulationsfähigkeiten mit SQL.
Kopiert!
1
2* Création de deux tables CAS temporaires pour la jointure ;
3DATA casuser.employees_details;
4 INPUT EmpID Name $ Age;
5 DATALINES;
61 John 30
72 Jane 28
83 Mike 35
94 Sarah 40
105 David 32
116 Emily 29
127 Chris 45
138 Laura 31
14;
15RUN;
16 
17DATA casuser.employees_salary;
18 INPUT EmpID Salary;
19 DATALINES;
201 60000
212 70000
223 50000
234 65000
245 72000
256 52000
267 62000
278 68000
28;
29RUN;
30 
31PROC CAS;
32 /* Charger les tables en mémoire CAS si elles ne le sont pas déjà */
33 TABLE.loadtable caslib='casuser' path='employees_details' replace=TRUE;
34 TABLE.loadtable caslib='casuser' path='employees_salary' replace=TRUE;
35 
36 /* Joindre les deux tables en mémoire CAS */
37 fedSql.execDirect RESULT=employees_full_info query='
38 select T1.EmpID, T1.Name, T1.Age, T2.Salary
39 from casuser.employees_details as T1
40 inner join casuser.employees_salary as T2
41 on T1.EmpID = T2.EmpID
42 order by T1.Name
43 ';
44 PRINT employees_full_info;
45QUIT;
46 
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