Publié le :
FedSQL CREATION_INTERNE

Utilisation du SQL Pass-Through Explicite avec fedSql.execDirect

Ce code est également disponible en : Deutsch English Español
En attente de validation
La fonction `fedSql.execDirect` de SAS© Viya 4 offre la capacité d'exécuter des instructions SQL natives directement sur des bases de données externes, sans que FedSQL ne tente d'analyser ou de modifier la syntaxe. Ceci est particulièrement utile pour exploiter des fonctionnalités spécifiques au fournisseur de la base de données, comme des fonctions propriétaires ou des optimisations de requêtes. Le composant `CONNECTION TO <caslib_name> (SQL_natif)` est utilisé dans la clause `FROM` pour spécifier la connexion à la source de données via une caslib existante et pour encapsuler la requête SQL native. La documentation met en évidence que seule la syntaxe native qui renvoie un jeu de résultats est acceptée dans ce composant. L'exemple fourni utilise une `caslib` nommée `TDcaslib` (simulée ici) qui est censée être connectée à une base de données Teradata, et récupère les positions uniques d'une table `employees`.
Analyse des données

Type : CREATION_INTERNE


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é !
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. */
4DATA casuser.employees;
5 INPUT EmployeeID Name $ Pos $;
6 DATALINES;
7101 John Manager
8102 Jane Developer
9103 Mike Developer
10104 Sarah Sales Associate
11105 Chris Manager
12106 Emily Executive Assistant
13;
14RUN;
15 
16PROC 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 )';
22QUIT;
23 
24/* Nettoyage de la table temporaire */
25PROC CAS;
26 TABLE.dropTable casin='casuser.employees';
27QUIT;
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é !
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. */
3DATA casuser.employees;
4 INPUT EmployeeID Name $ Pos $;
5 DATALINES;
6101 John Manager
7102 Jane Developer
8103 Mike Developer
9104 Sarah Sales Associate
10105 Chris Manager
11106 Emily Executive Assistant
12;
13RUN;
14 
15PROC 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 )';
21QUIT;
22 
23/* Nettoyage de la table temporaire */
24PROC CAS;
25 TABLE.dropTable casin='casuser.employees';
26QUIT;
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é !
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. */
3DATA casuser.employees;
4 INPUT EmployeeID Name $ Pos $;
5 DATALINES;
6101 John Manager
7102 Jane Developer
8103 Mike Developer
9104 Sarah Sales Associate
10105 Chris Manager
11106 Emily Executive Assistant
12;
13RUN;
14 
15PROC 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';
24QUIT;
25 
26/* Nettoyage de la table temporaire */
27PROC CAS;
28 TABLE.dropTable casin='casuser.employees';
29QUIT;
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é !
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. */
3DATA casuser.employees;
4 INPUT EmployeeID Name $ Pos $;
5 DATALINES;
6101 John Manager
7102 Jane Developer
8103 Mike Developer
9104 Sarah Sales Associate
10105 Chris Manager
11106 Emily Executive Assistant
12;
13RUN;
14 
15PROC 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';
25QUIT;
26 
27/* Nettoyage */
28PROC CAS;
29 TABLE.dropTable casin='casuser.UniquePositions';
30 TABLE.dropTable casin='casuser.employees';
31QUIT;
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


Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« 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. »