ETL CAS

Jointures SAS Viya : FedSQL vs CASL, quelle méthode choisir pour vos tables ?

Ce code est également disponible en : Deutsch English Español

Niveau de difficulté
Confirmé
Publié le :
Stéphanie

Le Conseil de l'Expert

Stéphanie
Spécialiste Machine Learning et IA.

Pour des jointures simples, restez sur FEDSQL. Pour des traitements intégrés dans des modèles analytiques complexes ou nécessitant une logique métier avancée, passez par les actions CASL pour un contrôle total sur l'exécution

L'analyse fonctionnelle de ce script SAS© se décompose en plusieurs étapes principales. Initialement, il configure une session CAS et assigne toutes les 'caslibs' disponibles. Ensuite, il prépare deux tables CAS (baseball_location et baseball_stats) dans la bibliothèque 'casuser' à partir de la table sashelp.baseball, en séparant les informations de localisation des statistiques. Après avoir défini 'casuser' comme la 'caslib' active, le script procède à l'illustration de trois types de jointures. La première utilise PROC FEDSQL pour un 'LEFT JOIN' standard. Les deux suivantes sont des exemples de jointures CASL plus avancées, exploitant les actions 'dlJoin' de l'ensemble 'deepLearn' et 'searchJoin' de l'ensemble 'searchAnalytics'. Chaque méthode crée une nouvelle table CAS résultante de la jointure.
Analyse des données

Type : SASHELP


Les données source proviennent de la table standard 'sashelp.baseball'. Deux tables CAS intermédiaires, 'casuser.baseball_location' et 'casuser.baseball_stats', sont créées à partir de cette source pour faciliter les démonstrations de jointure. Aucune donnée externe n'est directement lue en dehors de 'sashelp'.

1 Bloc de code
CAS setup
Explication :
Ce bloc initialise une session CAS et assigne toutes les caslibs disponibles, permettant l'accès et la manipulation des données en mémoire CAS. La ligne commentée `cas casauto terminate;` suggère une option pour terminer une session CAS existante.
Copié !
1/* cas casauto terminate;
2*/
3cas;
4caslib _all_ assign;
5 
2 Bloc de code
DATA STEP Data
Explication :
Création d'une nouvelle table CAS nommée 'baseball_location' dans la caslib 'casuser'. Cette table est dérivée de 'sashelp.baseball', en ne conservant que les colonnes relatives à l'identification du joueur et à sa position/équipe.
Copié !
1DATA casuser.baseball_location;
2 SET sashelp.baseball;
3 keep name team div division league position;
4RUN;
3 Bloc de code
DATA STEP Data
Explication :
Création d'une seconde table CAS nommée 'baseball_stats' dans la caslib 'casuser'. Cette table est également dérivée de 'sashelp.baseball', mais toutes les colonnes de localisation et d'équipe sont supprimées pour isoler les statistiques des joueurs.
Copié !
1DATA casuser.baseball_stats;
2 SET sashelp.baseball;
3 drop team div division league position ;
4RUN;
4 Bloc de code
OPTIONS Statement
Explication :
Définit 'casuser' comme la caslib active par défaut pour les opérations CAS suivantes, simplifiant ainsi la syntaxe pour référencer les tables dans cette bibliothèque.
Copié !
1/* set the active CASLIB */
2options caslib=casuser;
3 
5 Bloc de code
PROC FEDSQL Data
Explication :
Exécute une requête FedSQL pour effectuer une jointure gauche (LEFT JOIN) entre les tables 'baseball_location' et 'baseball_stats' sur la colonne 'name'. Le résultat est stocké dans une nouvelle table CAS nommée 'fedsql'.
Copié !
1/* FedSQL Left join example */
2PROC FEDSQL sessref=casauto;
3 create TABLE fedsql as
4 select distinct a.div, a.division, a.league, a.position, a.team, b.*
5 from baseball_location as a left join
6 baseball_stats as b
7 on a.name=b.name;
8QUIT;
Result
6 Bloc de code
PROC CAS
Explication :
Charge les ensembles d'actions CASL 'searchAnalytics' et 'deepLearn'. Ces ensembles d'actions contiennent des fonctionnalités avancées, y compris des actions de jointure spécifiques qui seront utilisées dans les blocs suivants.
Copié !
1/* CASL Join Examples */
2PROC CAS;
3LOADACTIONSET 'searchAnalytics';
4LOADACTIONSET 'deepLearn';
5QUIT;
7 Bloc de code
PROC CAS (deepLearn.dlJoin) Data
Explication :
Démontre l'utilisation de l'action 'dlJoin' de l'ensemble 'deepLearn' pour réaliser une jointure gauche. Elle joint 'baseball_location' avec 'baseball_stats' en utilisant la colonne 'name' comme identifiant, et crée une table 'dlJoin' en sortie.
Copié !
1/* Deep Learning Action Set dljon action: Examples */
2/* joinType="APPEND" | "FULL" | "INNER" | "LEFT" | "RIGHT" */
3PROC CAS;
4 DEEPLEARN.dlJoin /
5 joinType="LEFT"
6 annotatedTable={name="baseball_location"}
7 casOut={name="dlJoin", replace=TRUE}
8 id="name"
9 TABLE={name="baseball_stats"};
10 RUN;
11QUIT;
Result
8 Bloc de code
PROC CAS (searchAnalytics.searchJoin) Data
Explication :
Illustre l'action 'searchJoin' de l'ensemble 'searchAnalytics' pour une jointure gauche. Elle joint 'baseball_location' et 'baseball_stats' sur la colonne 'name', mais avec une spécification plus détaillée des colonnes, y compris un renommage pour distinguer les colonnes 'name' des tables gauche et droite. Le résultat est enregistré dans la table 'searchJoin'.
Copié !
1/* searchAnalytics Action Set searchJoin action: Examples */
2/* joinType="APPEND" | "FULL" | "INNER" | "LEFT" | "RIGHT" */
3PROC CAS;
4 searchAnalytics.searchJoin /
5 joinType="LEFT"
6 casOut={name="searchJoin", replace=TRUE}
7 leftTable={columns={{isKey=TRUE, name="name"},
8 {name="name",
9 reName="name_left"
10 }
11 }
12 TABLE={name="baseball_location"}
13 }
14 rightTable={columns={{isKey=TRUE, name="name"},
15 {name="name",
16 reName="name_right"
17 }
18 }
19 TABLE={name="baseball_stats"}
20 };
21RUN;
22QUIT;
Result
L'Astuce Pro
L'astuce technique déterminante pour choisir entre ces méthodes réside dans la gestion de la topologie des données : utilisez PROC FEDSQL pour sa flexibilité sur les jointures complexes impliquant plusieurs tables ou des types de données mixtes, mais privilégiez l'action searchJoin pour les volumes massifs car elle est spécifiquement optimisée pour les recherches indexées et permet de renommer les colonnes à la volée via le paramètre reName, évitant ainsi les collisions de noms sans nécessiter d'étape de renommage préalable. Notez que l'action dlJoin, bien qu'issue du jeu d'actions Deep Learning, est l'une des plus rapides pour les jointures binaires simples (1:1 ou N:1) car elle minimise les mouvements de données entre les noeuds workers en exploitant directement les identifiants de lignes.
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.
Informations de Copyright : Copyright © 2021, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. SPDX-License-Identifier: Apache-2.0


Documentation liée

Aucune documentation spécifique pour cette catégorie.