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!
* Création d'une table CAS temporaire pour l'exemple ;
data casuser.employees;
input EmpID Name $ Pos $ Salary;
datalines;
1 John Manager 60000
2 Jane Developer 70000
3 Mike Sales_Associate 50000
4 Sarah Manager 65000
5 David Developer 72000
6 Emily Sales_Associate 52000
7 Chris Manager 62000
8 Laura Developer 68000
;
run;
proc cas;
/* Exécuter une requête FedSQL simple pour compter les postes */
fedSql.execDirect result=r query='
select Pos, count(Pos) as Count_Pos
from casuser.employees
group by Pos
order by Count_Pos desc
';
print r;
quit;
1
2
* Création d'une table CAS temporaire pour l'exemple ;
3
DATA casuser.employees;
4
INPUT EmpID Name $ Pos $ Salary;
5
DATALINES;
6
1 John Manager 60000
7
2 Jane Developer 70000
8
3 Mike Sales_Associate 50000
9
4 Sarah Manager 65000
10
5 David Developer 72000
11
6 Emily Sales_Associate 52000
12
7 Chris Manager 62000
13
8 Laura Developer 68000
14
;
15
RUN;
16
17
PROC 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;
26
QUIT;
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!
/* La table casuser.employees est créée dans l'exemple 1 */
proc cas;
/* Sélectionner les développeurs gagnant plus de 70000 et trier par salaire */
fedSql.execDirect result=developers_high_salary query='
select EmpID, Name, Salary
from casuser.employees
where Pos = ''Developer'' and Salary > 70000
order by Salary desc
';
print developers_high_salary;
quit;
1
2
/* La table casuser.employees est créée dans l'exemple 1 */
3
4
PROC CAS;
5
/* Sélectionner les développeurs gagnant plus de 70000 et trier par salaire */
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!
/* La table casuser.employees est créée dans l'exemple 1 */
proc cas;
/* Étape 1: Obtenir les postes distincts */
fedSql.execDirect result=distinct_pos query='
select distinct Pos
from casuser.employees
';
/* Itérer sur les postes pour créer des tables spécifiques */
t = findtable(distinct_pos);
do i = 1 to t.nrows;
row = t[i];
jobTitle = trim(row['Pos']);
jobTitleNoSpaces = compress(jobTitle, ' ');
tableName = jobTitleNoSpaces;
createTableString = 'create table ' || tableName || ' {options replace=true} as ' ||
'select * from casuser.employees where Pos = ''' || jobTitle || '''';
print 'Création de la table ' || tableName || '...';
fedSql.execDirect query=createTableString;
end;
/* Afficher le contenu des tables créées dynamiquement (exemple pour 'Manager') */
title 'Contenu de la table Manager';
fedSql.execDirect query='select * from Manager';
run;
title 'Contenu de la table Developer';
fedSql.execDirect query='select * from Developer';
run;
title 'Contenu de la table SalesAssociate';
fedSql.execDirect query='select * from SalesAssociate';
run;
quit;
1
2
/* La table casuser.employees est créée dans l'exemple 1 */
3
4
PROC 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 */
'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';
30
RUN;
31
32
title 'Contenu de la table Developer';
33
fedSql.execDirect query='select * from Developer';
34
RUN;
35
36
title 'Contenu de la table SalesAssociate';
37
fedSql.execDirect query='select * from SalesAssociate';
38
RUN;
39
40
QUIT;
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!
* Création de deux tables CAS temporaires pour la jointure ;
data casuser.employees_details;
input EmpID Name $ Age;
datalines;
1 John 30
2 Jane 28
3 Mike 35
4 Sarah 40
5 David 32
6 Emily 29
7 Chris 45
8 Laura 31
;
run;
data casuser.employees_salary;
input EmpID Salary;
datalines;
1 60000
2 70000
3 50000
4 65000
5 72000
6 52000
7 62000
8 68000
;
run;
proc cas;
/* Charger les tables en mémoire CAS si elles ne le sont pas déjà */
table.loadtable caslib='casuser' path='employees_details' replace=TRUE;
table.loadtable caslib='casuser' path='employees_salary' replace=TRUE;
/* Joindre les deux tables en mémoire CAS */
fedSql.execDirect result=employees_full_info query='
select T1.EmpID, T1.Name, T1.Age, T2.Salary
from casuser.employees_details as T1
inner join casuser.employees_salary as T2
on T1.EmpID = T2.EmpID
order by T1.Name
';
print employees_full_info;
quit;
1
2
* Création de deux tables CAS temporaires pour la jointure ;
3
DATA casuser.employees_details;
4
INPUT EmpID Name $ Age;
5
DATALINES;
6
1 John 30
7
2 Jane 28
8
3 Mike 35
9
4 Sarah 40
10
5 David 32
11
6 Emily 29
12
7 Chris 45
13
8 Laura 31
14
;
15
RUN;
16
17
DATA casuser.employees_salary;
18
INPUT EmpID Salary;
19
DATALINES;
20
160000
21
270000
22
350000
23
465000
24
572000
25
652000
26
762000
27
868000
28
;
29
RUN;
30
31
PROC CAS;
32
/* Charger les tables en mémoire CAS si elles ne le sont pas déjà */
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.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.