Publicado el :
FedSQL CREATION_INTERNE

Uso de SQL Pass-Through Explícito con fedSql.execDirect

Este código también está disponible en: Deutsch English Français
En espera de validación
La función `fedSql.execDirect` de SAS© Viya 4 ofrece la capacidad de ejecutar instrucciones SQL nativas directamente en bases de datos externas, sin que FedSQL intente analizar o modificar la sintaxis. Esto es particularmente útil para explotar funcionalidades específicas del proveedor de la base de datos, como funciones propietarias u optimizaciones de consultas. El componente `CONNECTION TO <caslib_name> (SQL_nativo)` se utiliza en la cláusula `FROM` para especificar la conexión a la fuente de datos a través de una caslib existente y para encapsular la consulta SQL nativa. La documentación destaca que solo la sintaxis nativa que devuelve un conjunto de resultados es aceptada en este componente. El ejemplo proporcionado utiliza una `caslib` llamada `TDcaslib` (simulada aquí) que se supone está conectada a una base de datos Teradata, y recupera las posiciones únicas de una tabla `employees`.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos crearán datos de demostración (tablas CAS efímeras) para simular el acceso a una tabla 'employees' que residiría normalmente en una base de datos externa a través de una caslib llamada 'TDcaslib'. Esto garantiza la autonomía de los ejemplos sin requerir una conexión real a una base de datos Teradata.

1 Bloque de código
DATA STEP / PROC CAS fedSql.execDirect Data
Explicación :
Este ejemplo ilustra el uso mínimo de `fedSql.execDirect` para enviar una consulta SQL nativa a una base de datos externa a través de una caslib llamada `TDcaslib`. La consulta nativa `select unique Pos from employees` se ejecuta directamente en la fuente de datos. Para hacer el ejemplo autónomo, primero se crea una tabla `casuser.employees` en CAS para simular la estructura de los datos que se esperarían en la base externa.
¡Copiado!
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 Bloque de código
PROC CAS fedSql.execDirect
Explicación :
Este ejemplo intermedio refina la consulta SQL pass-through añadiendo una cláusula `WHERE` para filtrar los empleados con la posición 'Developer' y una cláusula `ORDER BY` para ordenar los resultados por nombre. Esto demuestra cómo opciones SQL más complejas (filtrado y ordenación) pueden ser transmitidas directamente a la base de datos externa a través de `fedSql.execDirect`.
¡Copiado!
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 Bloque de código
PROC CAS fedSql.execDirect
Explicación :
Este ejemplo avanzado muestra cómo ejecutar una agregación compleja (conteo de empleados por posición) directamente en la base de datos externa utilizando las cláusulas `GROUP BY` y `ORDER BY` en la consulta nativa pass-through. Esto optimiza el rendimiento al delegar el procesamiento intensivo (aquí, la agregación) a la base de datos de origen, reduciendo así la transferencia de datos innecesarios a CAS.
¡Copiado!
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 Bloque de código
PROC CAS fedSql.execDirect / table.fetch
Explicación :
Este ejemplo demuestra una funcionalidad clave de la integración de CAS: la capacidad de tomar el conjunto de resultados de una consulta SQL pass-through nativa y materializarlo directamente en una nueva tabla en memoria distribuida de CAS (`casuser.UniquePositions`). Este enfoque es esencial para los flujos de trabajo donde los datos de origen deben ser procesados posteriormente utilizando las capacidades analíticas y el rendimiento de CAS.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved