Publicado el :
ETL CREACIÓN_INTERNA

Operar en un conjunto de resultados FedSQL con lenguaje nativo

Este código también está disponible en: Deutsch English Français
En espera de validación
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!
1
2* Création d'une table CAS temporaire pour l'exemple ;
3DATA casuser.employees;
4 INPUT EmpID Name $ Pos $ Salary;
5 DATALINES;
61 John Manager 60000
72 Jane Developer 70000
83 Mike Sales_Associate 50000
94 Sarah Manager 65000
105 David Developer 72000
116 Emily Sales_Associate 52000
127 Chris Manager 62000
138 Laura Developer 68000
14;
15RUN;
16 
17PROC 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;
26QUIT;
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!
1 
2/* La table casuser.employees est créée dans l'exemple 1 */
3 
4PROC CAS;
5 /* Sélectionner les développeurs gagnant plus de 70000 et trier par salaire */
6 fedSql.execDirect RESULT=developers_high_salary query='
7 select EmpID, Name, Salary
8 from casuser.employees
9 where Pos = ''Developer'' and Salary > 70000
10 order by Salary desc
11 ';
12 PRINT developers_high_salary;
13QUIT;
14 
3 Bloque de código
DATA / fedSql.execDirect (boucle CASL)
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!
1 
2/* La table casuser.employees est créée dans l'exemple 1 */
3 
4PROC 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 */
12 t = findtable(distinct_pos);
13 DO i = 1 to t.nrows;
14 row = t[i];
15 jobTitle = trim(row['Pos']);
16 jobTitleNoSpaces = compress(jobTitle, ' ');
17 
18 tableName = jobTitleNoSpaces;
19 
20 createTableString = 'create table ' || tableName || ' {options replace=true} as ' ||
21 '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';
30RUN;
31 
32title 'Contenu de la table Developer';
33fedSql.execDirect query='select * from Developer';
34RUN;
35 
36title 'Contenu de la table SalesAssociate';
37fedSql.execDirect query='select * from SalesAssociate';
38RUN;
39 
40QUIT;
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!
1
2* Création de deux tables CAS temporaires pour la jointure ;
3DATA casuser.employees_details;
4 INPUT EmpID Name $ Age;
5 DATALINES;
61 John 30
72 Jane 28
83 Mike 35
94 Sarah 40
105 David 32
116 Emily 29
127 Chris 45
138 Laura 31
14;
15RUN;
16 
17DATA casuser.employees_salary;
18 INPUT EmpID Salary;
19 DATALINES;
201 60000
212 70000
223 50000
234 65000
245 72000
256 52000
267 62000
278 68000
28;
29RUN;
30 
31PROC CAS;
32 /* Charger les tables en mémoire CAS si elles ne le sont pas déjà */
33 TABLE.loadtable caslib='casuser' path='employees_details' replace=TRUE;
34 TABLE.loadtable caslib='casuser' path='employees_salary' replace=TRUE;
35 
36 /* Joindre les deux tables en mémoire CAS */
37 fedSql.execDirect RESULT=employees_full_info query='
38 select T1.EmpID, T1.Name, T1.Age, T2.Salary
39 from casuser.employees_details as T1
40 inner join casuser.employees_salary as T2
41 on T1.EmpID = T2.EmpID
42 order by T1.Name
43 ';
44 PRINT employees_full_info;
45QUIT;
46 
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