Vos jointures SAS Viya se traînent ? Boostez-les avec le partitionnement CAS (Performances x10 !)

Cet article en deux mots :

Fini les transferts réseau inutiles entre vos Workers CAS ! Ce guide vous montre comment utiliser le partitionnement des données via le paramètre groupBy. Une astuce technique indispensable pour accélérer drastiquement vos futures jointures (BY-group) et agrégations sur votre environnement SAS.

L'objectif : Répartir intelligemment les données sur les différents nœuds (Workers) de votre environnement CAS pour accélérer les jointures (BY-group processing) et les agrégations.

Explications détaillées : Par défaut, CAS distribue les lignes de manière aléatoire (Round-Robin) pour équilibrer la charge. Cependant, si vous savez que vos futurs traitements feront des regroupements sur une variable spécifique (par exemple l'identifiant client), charger la table en la partitionnant sur cette clé permet de s'assurer que toutes les lignes d'un même client se trouvent sur le même Worker. Cela élimine les transferts réseau inter-nœuds (shuffle) lors des calculs.

Exemple 1 : Charger et partitionner à la volée

1
2
3
4
5
6
7
proc cas;
table.loadTable /
caslib="Public"
path="transactions.sashdat"
casOut={name="TRANSAC_PART", caslib="Public", replace=True}
groupBy={"ID_Client"}; /* Les transactions d'un même ID seront sur le même nœud */
quit;

Exemple 2 : Sauvegarder une table partitionnée sur le disque

1
2
3
4
5
6
7
proc cas;
table.save /
table={name="TRANSAC_PART", caslib="Public", groupBy={"ID_Client"}}
name="transactions_partitionnees.sashdat"
caslib="Public"
replace=True;
quit;

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.