Publicado el :
ETL CREACION_INTERNA

Unir tablas de múltiples caslibs con fedSql.execDirect

Este código también está disponible en: Deutsch English Français
En espera de validación
La acción fedSql.execDirect permite unir tablas de diferentes librerías de CAS (caslibs) en una sola consulta. Para consultas que involucran múltiples caslibs, se debe usar un nombre de dos niveles (caslib.nombre_de_tabla). Una consulta que une tablas de múltiples caslibs no es elegible para la transmisión implícita (implicit pass-through) de FedSQL. Este ejemplo ilustra la creación y manipulación de datos temporales en memoria CAS para demostraciones autónomas, cubriendo uniones simples, filtros, agregaciones y la creación de vistas FedSQL.
Análisis de datos

Type : CREACION_INTERNA


Los ejemplos utilizan datos generados (datalines) o SASHELP para las demostraciones. Las tablas Customers, Products y Sales se crean en memoria CAS a partir de pasos DATA.

1 Bloque de código
PROC FEDSQL Data
Explicación :
Este ejemplo muestra una unión simple entre las tablas 'Customers_Basic' y 'Sales_Basic' basadas en el ID de cliente (CUSTID). Selecciona el CUSTID, el nombre del cliente y el total de ventas, y almacena el resultado en una nueva tabla 'results_basic'.
¡Copiado!
1/* --- Données de démonstration pour l'exemple 1 --- */
2DATA Customers_data;
3 INFILE DATALINES dsd;
4 INPUT CUSTID NAME $ COUNTRY $;
5 DATALINES;
61,Peter Frank,USA
72,Jim Stewart,USA
83,Janet Chien,Japan
94,Qing Ziao,Japan
105,Humberto Sertu,Argentina
11;
12RUN;
13 
14DATA Sales_data;
15 INFILE DATALINES dsd;
16 INPUT PRODID CUSTID TOTALS;
17 DATALINES;
183421,4,781183
191424,3,555789
203975,5,899453
213421,2,2789654
223234,1,189400
231424,1,123456
243422,2,987654
25;
26RUN;
27 
28PROC CASUTIL;
29 load DATA=Customers_data outcaslib="casuser" casout="Customers_Basic" replace;
30 load DATA=Sales_data outcaslib="casuser" casout="Sales_Basic" replace;
31QUIT;
32 
33/* --- Exemple SAS --- */
34PROC CAS;
35 fedSql.execDirect query="
36 create table results_basic {options replace=true} as
37 select
38 C.CUSTID,
39 C.NAME,
40 S.TOTALS
41 from
42 casuser.Customers_Basic as C,
43 casuser.Sales_Basic as S
44 where
45 C.CUSTID = S.CUSTID
46 ";
47 fedSql.execDirect query="select * from results_basic";
48QUIT;
2 Bloque de código
PROC FEDSQL Data
Explicación :
Este ejemplo extiende la unión incluyendo la tabla 'Products_Common'. Filtra los resultados para mostrar solo las ventas a clientes ubicados en 'USA' y ordena los resultados por el total de ventas en orden descendente.
¡Copiado!
1/* --- Données de démonstration pour l'exemple 2 --- */
2DATA Customers_data;
3 INFILE DATALINES dsd;
4 INPUT CUSTID NAME $ COUNTRY $;
5 DATALINES;
61,Peter Frank,USA
72,Jim Stewart,USA
83,Janet Chien,Japan
94,Qing Ziao,Japan
105,Humberto Sertu,Argentina
11;
12RUN;
13 
14DATA Products_data;
15 INFILE DATALINES dsd;
16 INPUT PRODID PRODUCT $;
17 DATALINES;
183234,Rice
191424,Corn
203421,Wheat
213422,Oat
223975,Barley
23;
24RUN;
25 
26DATA Sales_data;
27 INFILE DATALINES dsd;
28 INPUT PRODID CUSTID TOTALS;
29 DATALINES;
303421,4,781183
311424,3,555789
323975,5,899453
333421,2,2789654
343234,1,189400
351424,1,123456
363422,2,987654
37;
38RUN;
39 
40PROC CASUTIL;
41 load DATA=Customers_data outcaslib="casuser" casout="Customers_Common" replace;
42 load DATA=Products_data outcaslib="casuser" casout="Products_Common" replace;
43 load DATA=Sales_data outcaslib="casuser" casout="Sales_Common" replace;
44QUIT;
45 
46/* --- Exemple SAS --- */
47PROC CAS;
48 fedSql.execDirect query="
49 create table results_common {options replace=true} as
50 select
51 P.PRODUCT,
52 C.NAME,
53 S.TOTALS,
54 C.COUNTRY
55 from
56 casuser.Products_Common as P,
57 casuser.Sales_Common as S,
58 casuser.Customers_Common as C
59 where
60 P.PRODID = S.PRODID and
61 C.CUSTID = S.CUSTID and
62 C.COUNTRY = 'USA'
63 order by S.TOTALS desc
64 ";
65 fedSql.execDirect query="select * from results_common";
66QUIT;
3 Bloque de código
PROC FEDSQL Data
Explicación :
Este ejemplo avanzado calcula el total de ventas para cada producto uniendo 'Products_Adv' y 'Sales_Adv', luego filtra los resultados para incluir solo los productos cuyo total de ventas supera 1.000.000. Los resultados se ordenan por el total de ventas.
¡Copiado!
1/* --- Données de démonstration pour l'exemple 3 --- */
2DATA Customers_data;
3 INFILE DATALINES dsd;
4 INPUT CUSTID NAME $ COUNTRY $;
5 DATALINES;
61,Peter Frank,USA
72,Jim Stewart,USA
83,Janet Chien,Japan
94,Qing Ziao,Japan
105,Humberto Sertu,Argentina
11;
12RUN;
13 
14DATA Products_data;
15 INFILE DATALINES dsd;
16 INPUT PRODID PRODUCT $;
17 DATALINES;
183234,Rice
191424,Corn
203421,Wheat
213422,Oat
223975,Barley
23;
24RUN;
25 
26DATA Sales_data;
27 INFILE DATALINES dsd;
28 INPUT PRODID CUSTID TOTALS;
29 DATALINES;
303421,4,781183
311424,3,555789
323975,5,899453
333421,2,2789654
343234,1,189400
351424,1,123456
363422,2,987654
37;
38RUN;
39 
40PROC CASUTIL;
41 load DATA=Customers_data outcaslib="casuser" casout="Customers_Adv" replace;
42 load DATA=Products_data outcaslib="casuser" casout="Products_Adv" replace;
43 load DATA=Sales_data outcaslib="casuser" casout="Sales_Adv" replace;
44QUIT;
45 
46/* --- Exemple SAS --- */
47PROC CAS;
48 fedSql.execDirect query="
49 create table top_selling_products {options replace=true} as
50 select
51 P.PRODUCT,
52 SUM(S.TOTALS) as TOTAL_SALES
53 from
54 casuser.Products_Adv as P,
55 casuser.Sales_Adv as S
56 where
57 P.PRODID = S.PRODID
58 group by
59 P.PRODUCT
60 having
61 SUM(S.TOTALS) > 1000000
62 order by
63 TOTAL_SALES desc
64 ";
65 fedSql.execDirect query="select * from top_selling_products";
66QUIT;
4 Bloque de código
PROC FEDSQL Data
Explicación :
Este ejemplo demuestra una integración más profunda con Viya creando una vista FedSQL llamada 'customer_sales_view' a partir de las tablas 'Customers_Viya' y 'Sales_Viya'. Luego, la vista se consulta para mostrar los registros donde el total de ventas es superior a 500.000.
¡Copiado!
1/* --- Données de démonstration pour l'exemple 4 --- */
2DATA Customers_data;
3 INFILE DATALINES dsd;
4 INPUT CUSTID NAME $ COUNTRY $;
5 DATALINES;
61,Peter Frank,USA
72,Jim Stewart,USA
83,Janet Chien,Japan
94,Qing Ziao,Japan
105,Humberto Sertu,Argentina
11;
12RUN;
13 
14DATA Sales_data;
15 INFILE DATALINES dsd;
16 INPUT PRODID CUSTID TOTALS;
17 DATALINES;
183421,4,781183
191424,3,555789
203975,5,899453
213421,2,2789654
223234,1,189400
231424,1,123456
243422,2,987654
25;
26RUN;
27 
28PROC CASUTIL;
29 load DATA=Customers_data outcaslib="casuser" casout="Customers_Viya" replace;
30 load DATA=Sales_data outcaslib="casuser" casout="Sales_Viya" replace;
31QUIT;
32 
33/* --- Exemple SAS --- */
34PROC CAS;
35 /* Créer une vue FedSQL sur des tables CAS */
36 fedSql.execDirect query="
37 create view customer_sales_view {options replace=true} as
38 select
39 C.NAME,
40 C.COUNTRY,
41 S.TOTALS
42 from
43 casuser.Customers_Viya as C,
44 casuser.Sales_Viya as S
45 where
46 C.CUSTID = S.CUSTID
47 ";
48 
49 /* Interroger la vue FedSQL */
50 fedSql.execDirect query="select * from customer_sales_view where TOTALS > 500000";
51QUIT;
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.