Les exemples créeront des données de démonstration (tables CAS éphémères) pour simuler l'accès à une table 'employees' qui résiderait normalement dans une base de données externe via une caslib nommée 'TDcaslib'. Cela garantit l'autonomie des exemples sans nécessiter une connexion réelle à une base de données Teradata.
1 Bloc de code
DATA STEP / PROC CAS fedSql.execDirect Data
Explication : Cet exemple illustre l'utilisation minimale de `fedSql.execDirect` pour envoyer une requête SQL native à une base de données externe via une caslib nommée `TDcaslib`. La requête native `select unique Pos from employees` est exécutée directement sur la source de données. Pour rendre l'exemple autonome, une table `casuser.employees` est d'abord créée dans CAS pour simuler la structure des données qui seraient attendues sur la base externe.
Copié !
/* Création d'une table CAS temporaire pour simuler la table 'employees' sur Teradata */
/* Dans un environnement réel, la table 'employees' existerait sur Teradata. */
/* Ici, 'TDcaslib' est une caslib logique pointant vers la table casuser.employees. */
data casuser.employees;
input EmployeeID Name $ Pos $;
datalines;
101 John Manager
102 Jane Developer
103 Mike Developer
104 Sarah Sales Associate
105 Chris Manager
106 Emily Executive Assistant
;
run;
proc cas;
/* Utilisation de fedSql.execDirect pour exécuter une requête SQL native sur la source de données via TDcaslib. */
/* La clause CONNECTION TO TDcaslib() encapsule la requête native pour Teradata. */
fedSql.execDirect query='
select pos from connection to TDcaslib
( select unique Pos from employees )';
quit;
/* Nettoyage de la table temporaire */
proc cas;
table.dropTable casin='casuser.employees';
quit;
1
/* Création d'une table CAS temporaire pour simuler la table 'employees' sur Teradata */
2
/* Dans un environnement réel, la table 'employees' existerait sur Teradata. */
3
/* Ici, 'TDcaslib' est une caslib logique pointant vers la table casuser.employees. */
4
DATA casuser.employees;
5
INPUT EmployeeID Name $ Pos $;
6
DATALINES;
7
101 John Manager
8
102 Jane Developer
9
103 Mike Developer
10
104 Sarah Sales Associate
11
105 Chris Manager
12
106 Emily Executive Assistant
13
;
14
RUN;
15
16
PROC CAS;
17
/* Utilisation de fedSql.execDirect pour exécuter une requête SQL native sur la source de données via TDcaslib. */
18
/* La clause CONNECTION TO TDcaslib() encapsule la requête native pour Teradata. */
19
fedSql.execDirect query='
20
select pos from connection to TDcaslib
21
( select unique Pos from employees )';
22
QUIT;
23
24
/* Nettoyage de la table temporaire */
25
PROC CAS;
26
TABLE.dropTable casin='casuser.employees';
27
QUIT;
2 Bloc de code
PROC CAS fedSql.execDirect
Explication : Cet exemple intermédiaire affine la requête SQL pass-through en ajoutant une clause `WHERE` pour filtrer les employés ayant la position 'Developer' et une clause `ORDER BY` pour trier les résultats par nom. Cela démontre comment des options SQL plus complexes (filtrage et tri) peuvent être transmises directement à la base de données externe via `fedSql.execDirect`.
Copié !
/* Pré-requis: La table casuser.employees est supposée exister et être chargée en CAS, comme dans l'Exemple 1. */
/* Nous la recréons pour garantir l'autonomie si cet exemple est exécuté seul. */
data casuser.employees;
input EmployeeID Name $ Pos $;
datalines;
101 John Manager
102 Jane Developer
103 Mike Developer
104 Sarah Sales Associate
105 Chris Manager
106 Emily Executive Assistant
;
run;
proc cas;
/* Cet exemple utilise une clause WHERE et ORDER BY dans la requête native passée via CONNECTION TO. */
/* Les données des employés avec la position 'Developer' sont filtrées et triées par nom. */
fedSql.execDirect query='
select EmployeeID, Name, Pos from connection to TDcaslib
( select EmployeeID, Name, Pos from employees where Pos = ''Developer'' order by Name )';
quit;
/* Nettoyage de la table temporaire */
proc cas;
table.dropTable casin='casuser.employees';
quit;
1
/* Pré-requis: La table casuser.employees est supposée exister et être chargée en CAS, comme dans l'Exemple 1. */
2
/* Nous la recréons pour garantir l'autonomie si cet exemple est exécuté seul. */
3
DATA casuser.employees;
4
INPUT EmployeeID Name $ Pos $;
5
DATALINES;
6
101 John Manager
7
102 Jane Developer
8
103 Mike Developer
9
104 Sarah Sales Associate
10
105 Chris Manager
11
106 Emily Executive Assistant
12
;
13
RUN;
14
15
PROC CAS;
16
/* Cet exemple utilise une clause WHERE et ORDER BY dans la requête native passée via CONNECTION TO. */
17
/* Les données des employés avec la position 'Developer' sont filtrées et triées par nom. */
18
fedSql.execDirect query='
19
select EmployeeID, Name, Pos from connection to TDcaslib
20
( select EmployeeID, Name, Pos from employees where Pos = ''Developer'' order by Name )';
21
QUIT;
22
23
/* Nettoyage de la table temporaire */
24
PROC CAS;
25
TABLE.dropTable casin='casuser.employees';
26
QUIT;
3 Bloc de code
PROC CAS fedSql.execDirect
Explication : Cet exemple avancé montre comment exécuter une agrégation complexe (comptage d'employés par position) directement sur la base de données externe en utilisant les clauses `GROUP BY` et `ORDER BY` dans la requête native pass-through. Cela optimise la performance en déléguant le traitement intensif (ici, l'agrégation) à la base de données source, réduisant ainsi le transfert de données inutiles vers CAS.
Copié !
/* Pré-requis: La table casuser.employees est supposée exister et être chargée en CAS, comme dans l'Exemple 1. */
/* Nous la recréons pour garantir l'autonomie si cet exemple est exécuté seul. */
data casuser.employees;
input EmployeeID Name $ Pos $;
datalines;
101 John Manager
102 Jane Developer
103 Mike Developer
104 Sarah Sales Associate
105 Chris Manager
106 Emily Executive Assistant
;
run;
proc cas;
/* Cet exemple utilise une requête native avec agrégation et groupement exécutée sur la source de données. */
/* Il compte le nombre d'employés par position et trie les résultats. */
fedSql.execDirect query='
select Pos, count(EmployeeID) as NumberOfEmployees
from connection to TDcaslib
( select EmployeeID, Pos from employees )
group by Pos
order by NumberOfEmployees desc';
quit;
/* Nettoyage de la table temporaire */
proc cas;
table.dropTable casin='casuser.employees';
quit;
1
/* Pré-requis: La table casuser.employees est supposée exister et être chargée en CAS, comme dans l'Exemple 1. */
2
/* Nous la recréons pour garantir l'autonomie si cet exemple est exécuté seul. */
3
DATA casuser.employees;
4
INPUT EmployeeID Name $ Pos $;
5
DATALINES;
6
101 John Manager
7
102 Jane Developer
8
103 Mike Developer
9
104 Sarah Sales Associate
10
105 Chris Manager
11
106 Emily Executive Assistant
12
;
13
RUN;
14
15
PROC CAS;
16
/* Cet exemple utilise une requête native avec agrégation et groupement exécutée sur la source de données. */
17
/* Il compte le nombre d'employés par position et trie les résultats. */
18
fedSql.execDirect query='
19
select Pos, count(EmployeeID) as NumberOfEmployees
20
from connection to TDcaslib
21
( select EmployeeID, Pos from employees )
22
group by Pos
23
order by NumberOfEmployees desc';
24
QUIT;
25
26
/* Nettoyage de la table temporaire */
27
PROC CAS;
28
TABLE.dropTable casin='casuser.employees';
29
QUIT;
4 Bloc de code
PROC CAS fedSql.execDirect / table.fetch
Explication : Cet exemple démontre une fonctionnalité clé de l'intégration CAS : la capacité de prendre le jeu de résultats d'une requête SQL pass-through native et de le matérialiser directement dans une nouvelle table en mémoire distribuée de CAS (`casuser.UniquePositions`). Cette approche est essentielle pour les workflows où les données sources doivent être traitées ultérieurement à l'aide des capacités analytiques et de la performance de CAS.
Copié !
/* Pré-requis: La table casuser.employees est supposée exister et être chargée en CAS, comme dans l'Exemple 1. */
/* Nous la recréons pour garantir l'autonomie si cet exemple est exécuté seul. */
data casuser.employees;
input EmployeeID Name $ Pos $;
datalines;
101 John Manager
102 Jane Developer
103 Mike Developer
104 Sarah Sales Associate
105 Chris Manager
106 Emily Executive Assistant
;
run;
proc cas;
/* Exécute une requête pass-through et charge le résultat directement dans une nouvelle table CAS. */
/* L'option 'replace=true' permet de recréer la table si elle existe déjà. */
fedSql.execDirect query='
create table casuser.UniquePositions {options replace=true} as
select distinct Pos from connection to TDcaslib
( select Pos from employees )';
/* Affiche le contenu de la nouvelle table CAS créée à partir du résultat du pass-through. */
table.fetch casin='casuser.UniquePositions';
quit;
/* Nettoyage */
proc cas;
table.dropTable casin='casuser.UniquePositions';
table.dropTable casin='casuser.employees';
quit;
1
/* Pré-requis: La table casuser.employees est supposée exister et être chargée en CAS, comme dans l'Exemple 1. */
2
/* Nous la recréons pour garantir l'autonomie si cet exemple est exécuté seul. */
3
DATA casuser.employees;
4
INPUT EmployeeID Name $ Pos $;
5
DATALINES;
6
101 John Manager
7
102 Jane Developer
8
103 Mike Developer
9
104 Sarah Sales Associate
10
105 Chris Manager
11
106 Emily Executive Assistant
12
;
13
RUN;
14
15
PROC CAS;
16
/* Exécute une requête pass-through et charge le résultat directement dans une nouvelle table CAS. */
17
/* L'option 'replace=true' permet de recréer la table si elle existe déjà. */
18
fedSql.execDirect query='
19
create table casuser.UniquePositions {options replace=true} as
20
select distinct Pos from connection to TDcaslib
21
( select Pos from employees )';
22
23
/* Affiche le contenu de la nouvelle table CAS créée à partir du résultat du pass-through. */
24
TABLE.fetch casin='casuser.UniquePositions';
25
QUIT;
26
27
/* Nettoyage */
28
PROC CAS;
29
TABLE.dropTable casin='casuser.UniquePositions';
30
TABLE.dropTable casin='casuser.employees';
31
QUIT;
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.
« L'utilisation de l'action fedSql.execDirect combinée au SQL Pass-Through explicite constitue la stratégie de performance ultime pour les environnements hybrides sous SAS Viya. En encapsulant votre requête dans la clause CONNECTION TO, vous déléguez l'exécution du code directement au moteur de la base de données distante (ici Teradata). Cette approche "Push-down" présente deux avantages majeurs : elle permet d'exploiter les fonctions propriétaires et les index natifs du fournisseur, tout en minimisant drastiquement le transfert de données sur le réseau, puisque seul le jeu de résultats final est rapatrié dans la mémoire CAS. »
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.