El ejemplo original se conecta a una base de datos Teradata para sus datos de origen. En los ejemplos siguientes, creamos una tabla de empleados ficticia directamente en la sesión CAS. Luego ejecuta una consulta FedSQL para identificar los puestos con al menos dos empleados, y luego itera sobre este conjunto de resultados. Para cada puesto identificado, construye y ejecuta dinámicamente una nueva consulta FedSQL para crear una tabla CAS distinta que contenga los empleados de ese puesto. Esto demuestra el poder de la integración entre FedSQL y las capacidades de programación nativas de CASL para la manipulación de datos distribuidos, todo de manera autónoma.
Análisis de datos
Type : CREACIÓN_INTERNA
Los ejemplos crean datos internos (paso DATA) directamente en la sesión CAS para asegurar su autonomía y evitar la dependencia de fuentes de datos externas.
1 Bloque de código
DATA / fedSql.execDirect Data
Explicación : Este ejemplo crea una tabla temporal 'employees' en la sesión CAS, luego usa `fedSql.execDirect` para contar el número de empleados por puesto y mostrar el resultado. Demuestra la sintaxis básica de una consulta FedSQL ejecutada a través de CASL.
¡Copiado!
* Création d'une table CAS temporaire pour l'exemple ;
data casuser.employees;
input EmpID Name $ Pos $ Salary;
datalines;
1 John Manager 60000
2 Jane Developer 70000
3 Mike Sales_Associate 50000
4 Sarah Manager 65000
5 David Developer 72000
6 Emily Sales_Associate 52000
7 Chris Manager 62000
8 Laura Developer 68000
;
run;
proc cas;
/* Exécuter une requête FedSQL simple pour compter les postes */
fedSql.execDirect result=r query='
select Pos, count(Pos) as Count_Pos
from casuser.employees
group by Pos
order by Count_Pos desc
';
print r;
quit;
1
2
* Création d'une table CAS temporaire pour l'exemple ;
3
DATA casuser.employees;
4
INPUT EmpID Name $ Pos $ Salary;
5
DATALINES;
6
1 John Manager 60000
7
2 Jane Developer 70000
8
3 Mike Sales_Associate 50000
9
4 Sarah Manager 65000
10
5 David Developer 72000
11
6 Emily Sales_Associate 52000
12
7 Chris Manager 62000
13
8 Laura Developer 68000
14
;
15
RUN;
16
17
PROC CAS;
18
/* Exécuter une requête FedSQL simple pour compter les postes */
19
fedSql.execDirect RESULT=r query='
20
select Pos, count(Pos) as Count_Pos
21
from casuser.employees
22
group by Pos
23
order by Count_Pos desc
24
';
25
PRINT r;
26
QUIT;
27
2 Bloque de código
fedSql.execDirect
Explicación : Basado en la tabla 'employees' creada anteriormente, este ejemplo usa `fedSql.execDirect` para filtrar a los empleados con el puesto 'Developer' con un salario superior a 70000, y ordena los resultados por salario descendente. Esto ilustra el uso de las cláusulas `WHERE` y `ORDER BY` en una consulta FedSQL simple.
¡Copiado!
/* La table casuser.employees est créée dans l'exemple 1 */
proc cas;
/* Sélectionner les développeurs gagnant plus de 70000 et trier par salaire */
fedSql.execDirect result=developers_high_salary query='
select EmpID, Name, Salary
from casuser.employees
where Pos = ''Developer'' and Salary > 70000
order by Salary desc
';
print developers_high_salary;
quit;
1
2
/* La table casuser.employees est créée dans l'exemple 1 */
3
4
PROC CAS;
5
/* Sélectionner les développeurs gagnant plus de 70000 et trier par salaire */
Explicación : Este ejemplo avanzado retoma el principio del ejemplo del documento original. Comienza recuperando todos los puestos distintos de la tabla 'employees'. Luego, se utiliza un bucle CASL para generar dinámicamente consultas FedSQL `CREATE TABLE AS SELECT`. Cada consulta crea una nueva tabla CAS (ej: `Manager`, `Developer`, `SalesAssociate`) que contiene solo los registros correspondientes a un puesto específico, demostrando una manipulación de datos flexible y automatizada.
¡Copiado!
/* La table casuser.employees est créée dans l'exemple 1 */
proc cas;
/* Étape 1: Obtenir les postes distincts */
fedSql.execDirect result=distinct_pos query='
select distinct Pos
from casuser.employees
';
/* Itérer sur les postes pour créer des tables spécifiques */
t = findtable(distinct_pos);
do i = 1 to t.nrows;
row = t[i];
jobTitle = trim(row['Pos']);
jobTitleNoSpaces = compress(jobTitle, ' ');
tableName = jobTitleNoSpaces;
createTableString = 'create table ' || tableName || ' {options replace=true} as ' ||
'select * from casuser.employees where Pos = ''' || jobTitle || '''';
print 'Création de la table ' || tableName || '...';
fedSql.execDirect query=createTableString;
end;
/* Afficher le contenu des tables créées dynamiquement (exemple pour 'Manager') */
title 'Contenu de la table Manager';
fedSql.execDirect query='select * from Manager';
run;
title 'Contenu de la table Developer';
fedSql.execDirect query='select * from Developer';
run;
title 'Contenu de la table SalesAssociate';
fedSql.execDirect query='select * from SalesAssociate';
run;
quit;
1
2
/* La table casuser.employees est créée dans l'exemple 1 */
3
4
PROC CAS;
5
/* Étape 1: Obtenir les postes distincts */
6
fedSql.execDirect RESULT=distinct_pos query='
7
select distinct Pos
8
from casuser.employees
9
';
10
11
/* Itérer sur les postes pour créer des tables spécifiques */
'select * from casuser.employees where Pos = ''' || jobTitle || '''';
22
23
PRINT'Création de la table ' || tableName || '...';
24
fedSql.execDirect query=createTableString;
25
END;
26
27
/* Afficher le contenu des tables créées dynamiquement (exemple pour 'Manager') */
28
title 'Contenu de la table Manager';
29
fedSql.execDirect query='select * from Manager';
30
RUN;
31
32
title 'Contenu de la table Developer';
33
fedSql.execDirect query='select * from Developer';
34
RUN;
35
36
title 'Contenu de la table SalesAssociate';
37
fedSql.execDirect query='select * from SalesAssociate';
38
RUN;
39
40
QUIT;
41
4 Bloque de código
DATA / fedSql.execDirect (jointure) Data
Explicación : Este ejemplo crea dos tablas distintas en la sesión CAS (`employees_details` y `employees_salary`). Luego las carga explícitamente en la memoria CAS. La potencia de FedSQL se utiliza para realizar una unión interna (`INNER JOIN`) entre estas dos tablas basándose en el identificador `EmpID`. El resultado combina la información detallada y salarial de los empleados, demostrando una integración clave de las capacidades de manipulación de datos de CAS con SQL.
¡Copiado!
* Création de deux tables CAS temporaires pour la jointure ;
data casuser.employees_details;
input EmpID Name $ Age;
datalines;
1 John 30
2 Jane 28
3 Mike 35
4 Sarah 40
5 David 32
6 Emily 29
7 Chris 45
8 Laura 31
;
run;
data casuser.employees_salary;
input EmpID Salary;
datalines;
1 60000
2 70000
3 50000
4 65000
5 72000
6 52000
7 62000
8 68000
;
run;
proc cas;
/* Charger les tables en mémoire CAS si elles ne le sont pas déjà */
table.loadtable caslib='casuser' path='employees_details' replace=TRUE;
table.loadtable caslib='casuser' path='employees_salary' replace=TRUE;
/* Joindre les deux tables en mémoire CAS */
fedSql.execDirect result=employees_full_info query='
select T1.EmpID, T1.Name, T1.Age, T2.Salary
from casuser.employees_details as T1
inner join casuser.employees_salary as T2
on T1.EmpID = T2.EmpID
order by T1.Name
';
print employees_full_info;
quit;
1
2
* Création de deux tables CAS temporaires pour la jointure ;
3
DATA casuser.employees_details;
4
INPUT EmpID Name $ Age;
5
DATALINES;
6
1 John 30
7
2 Jane 28
8
3 Mike 35
9
4 Sarah 40
10
5 David 32
11
6 Emily 29
12
7 Chris 45
13
8 Laura 31
14
;
15
RUN;
16
17
DATA casuser.employees_salary;
18
INPUT EmpID Salary;
19
DATALINES;
20
160000
21
270000
22
350000
23
465000
24
572000
25
652000
26
762000
27
868000
28
;
29
RUN;
30
31
PROC CAS;
32
/* Charger les tables en mémoire CAS si elles ne le sont pas déjà */
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.