Veröffentlicht am :
FedSQL CREATION_INTERNE

Verwendung von explizitem SQL Pass-Through mit fedSql.execDirect

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Die Funktion `fedSql.execDirect` in SAS© Viya 4 bietet die Möglichkeit, native SQL-Anweisungen direkt auf externen Datenbanken auszuführen, ohne dass FedSQL versucht, die Syntax zu analysieren oder zu ändern. Dies ist besonders nützlich, um anbieterspezifische Datenbankfunktionen, wie proprietäre Funktionen oder Abfrageoptimierungen, zu nutzen. Die Komponente `CONNECTION TO <caslib_name> (SQL_natif)` wird in der `FROM`-Klausel verwendet, um die Verbindung zur Datenquelle über eine vorhandene Caslib anzugeben und die native SQL-Abfrage zu kapseln. Die Dokumentation weist darauf hin, dass in dieser Komponente nur native Syntax akzeptiert wird, die ein Resultset zurückgibt. Das bereitgestellte Beispiel verwendet eine `Caslib` namens `TDcaslib` (hier simuliert), die angeblich mit einer Teradata-Datenbank verbunden ist, und ruft die eindeutigen Positionen aus einer `employees`-Tabelle ab.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele erstellen Demodaten (temporäre CAS-Tabellen), um den Zugriff auf eine 'employees'-Tabelle zu simulieren, die normalerweise in einer externen Datenbank über eine Caslib namens 'TDcaslib' liegen würde. Dies gewährleistet die Autonomie der Beispiele, ohne eine tatsächliche Verbindung zu einer Teradata-Datenbank zu benötigen.

1 Codeblock
DATA STEP / PROC CAS fedSql.execDirect Data
Erklärung :
Dieses Beispiel zeigt die minimale Verwendung von `fedSql.execDirect`, um eine native SQL-Abfrage an eine externe Datenbank über eine Caslib namens `TDcaslib` zu senden. Die native Abfrage `select unique Pos from employees` wird direkt auf der Datenquelle ausgeführt. Um das Beispiel eigenständig zu machen, wird zunächst eine Tabelle `casuser.employees` in CAS erstellt, um die Struktur der Daten zu simulieren, die auf der externen Datenbank erwartet würden.
Kopiert!
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 Codeblock
PROC CAS fedSql.execDirect
Erklärung :
Dieses Zwischenbeispiel verfeinert die SQL-Pass-Through-Abfrage, indem es eine `WHERE`-Klausel zum Filtern von Mitarbeitern mit der Position 'Developer' und eine `ORDER BY`-Klausel zum Sortieren der Ergebnisse nach Namen hinzufügt. Dies zeigt, wie komplexere SQL-Optionen (Filtern und Sortieren) direkt über `fedSql.execDirect` an die externe Datenbank übermittelt werden können.
Kopiert!
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 Codeblock
PROC CAS fedSql.execDirect
Erklärung :
Dieses fortgeschrittene Beispiel zeigt, wie eine komplexe Aggregation (Zählung der Mitarbeiter nach Position) direkt auf der externen Datenbank mithilfe der `GROUP BY`- und `ORDER BY`-Klauseln in der nativen Pass-Through-Abfrage ausgeführt wird. Dies optimiert die Leistung, indem die intensive Verarbeitung (hier die Aggregation) an die Quellendatenbank delegiert wird, wodurch die Übertragung unnötiger Daten an CAS reduziert wird.
Kopiert!
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 Codeblock
PROC CAS fedSql.execDirect / table.fetch
Erklärung :
Dieses Beispiel demonstriert eine Schlüsselfunktion der CAS-Integration: die Möglichkeit, das Resultset einer nativen SQL-Pass-Through-Abfrage direkt in einer neuen verteilten In-Memory-Tabelle von CAS (`casuser.UniquePositions`) zu materialisieren. Dieser Ansatz ist entscheidend für Workflows, bei denen die Quelldaten später mit den analytischen Fähigkeiten und der Leistung von CAS verarbeitet werden müssen.
Kopiert!
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;
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.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved