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!
/* 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 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!
/* 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 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!
/* 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 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!
/* 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;
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.