Publié le :
ETL CREATION_INTERNE

Joindre des tables provenant de plusieurs caslibs avec fedSql.execDirect

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'action fedSql.execDirect permet de joindre des tables provenant de différentes bibliothèques de cas (caslibs) en une seule requête. Pour les requêtes impliquant plusieurs caslibs, un nom à deux niveaux (caslib.nom_de_table) doit être utilisé. Une requête joignant des tables de plusieurs caslibs n'est pas éligible à la transmission implicite (implicit pass-through) de FedSQL. Cet exemple illustre la création et la manipulation de données temporaires en mémoire CAS pour des démonstrations autonomes, couvrant des jointures simples, des filtres, des agrégations et la création de vues FedSQL.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou SASHELP pour les démonstrations. Les tables Customers, Products et Sales sont créées en mémoire CAS à partir de DATA steps.

1 Bloc de code
PROC FEDSQL Data
Explication :
Cet exemple montre une jointure simple entre les tables 'Customers_Basic' et 'Sales_Basic' basées sur l'identifiant client (CUSTID). Il sélectionne le CUSTID, le nom du client et le total des ventes, et stocke le résultat dans une nouvelle table 'results_basic'.
Copié !
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 Bloc de code
PROC FEDSQL Data
Explication :
Cet exemple étend la jointure en incluant la table 'Products_Common'. Il filtre les résultats pour n'afficher que les ventes aux clients situés aux 'USA' et trie les résultats par le total des ventes par ordre décroissant.
Copié !
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 Bloc de code
PROC FEDSQL Data
Explication :
Cet exemple avancé calcule le total des ventes pour chaque produit en joignant 'Products_Adv' et 'Sales_Adv', puis filtre les résultats pour n'inclure que les produits dont le total des ventes dépasse 1 000 000. Les résultats sont triés par le total des ventes.
Copié !
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 Bloc de code
PROC FEDSQL Data
Explication :
Cet exemple démontre une intégration plus poussée avec Viya en créant une vue FedSQL nommée 'customer_sales_view' à partir des tables 'Customers_Viya' et 'Sales_Viya'. Ensuite, la vue est interrogée pour afficher les enregistrements où le total des ventes est supérieur à 500 000.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« La force majeure de fedSql.execDirect réside dans sa capacité à agir comme un chef d'orchestre entre vos différentes sources de données. Contrairement à une étape DATA classique, FedSQL est nativement conçu pour l'architecture MPP (Massively Parallel Processing) de CAS.

Lorsqu'une jointure implique plusieurs caslibs, FedSQL gère intelligemment le mouvement des données entre les nœuds pour optimiser le traitement. Notez bien que si le 'Pass-Through' implicite est désactivé lors de jointures multi-caslibs, c'est pour permettre au moteur FedSQL de prendre le relais et d'appliquer ses propres algorithmes de jointure distribuée, garantissant ainsi une scalabilité maximale, que vous manipuliez des milliers ou des milliards de lign »