Publié le :
ETL CREATION_INTERNE

Opérer sur un jeu de résultats FedSQL avec langage natif

Ce code est également disponible en : Deutsch English Español
En attente de validation
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é !
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 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é !
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 Bloc de code
DATA / fedSql.execDirect (boucle CASL)
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é !
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 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é !
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 
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.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved