L'exemple original se connecte à une base de données Teradata pour ses données sources. Dans les exemples ci-dessous, nous créons une table d'employés fictive directement dans la session CAS. Il exécute ensuite une requête FedSQL pour identifier les postes avec au moins deux employés, puis itère sur ce jeu de résultats. Pour chaque poste identifié, il construit et exécute dynamiquement une nouvelle requête FedSQL pour créer une table CAS distincte contenant les employés de ce poste. Ceci démontre la puissance de l'intégration entre FedSQL et les capacités de programmation natives de CASL pour la manipulation de données distribuées, le tout de manière autonome.
Analyse des données
Type : CREATION_INTERNE
Les exemples créent des données internes (DATA step) directement dans la session CAS pour assurer leur autonomie et éviter la dépendance à des sources de données externes.
1 Bloc de code
DATA / fedSql.execDirect Data
Explication : Cet exemple crée une table temporaire 'employees' dans la session CAS, puis utilise `fedSql.execDirect` pour compter le nombre d'employés par poste et afficher le résultat. Il démontre la syntaxe de base d'une requête FedSQL exécutée via CASL.
Copié !
* 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 Bloc de code
fedSql.execDirect
Explication : Basé sur la table 'employees' créée précédemment, cet exemple utilise `fedSql.execDirect` pour filtrer les employés ayant le poste 'Developer' avec un salaire supérieur à 70000, et trie les résultats par salaire décroissant. Ceci illustre l'utilisation de clauses `WHERE` et `ORDER BY` dans une requête FedSQL simple.
Copié !
/* 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 */
Explication : Cet exemple avancé reprend le principe de l'exemple du document original. Il commence par récupérer tous les postes distincts de la table 'employees'. Ensuite, une boucle CASL est utilisée pour générer dynamiquement des requêtes FedSQL `CREATE TABLE AS SELECT`. Chaque requête crée une nouvelle table CAS (ex: `Manager`, `Developer`, `SalesAssociate`) contenant uniquement les enregistrements correspondant à un poste spécifique, démontrant une manipulation de données flexible et automatisée.
Copié !
/* 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 Bloc de code
DATA / fedSql.execDirect (jointure) Data
Explication : Cet exemple crée deux tables distinctes dans la session CAS (`employees_details` et `employees_salary`). Il les charge ensuite explicitement en mémoire CAS. La puissance de FedSQL est ensuite utilisée pour effectuer une jointure interne (`INNER JOIN`) entre ces deux tables basées sur l'identifiant `EmpID`. Le résultat combine les informations de détail et de salaire des employés, démontrant une intégration clé des capacités de manipulation de données de CAS avec SQL.
Copié !
* 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à */
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.