table

partition

##set_table ##data_management

Description

L'action table.partition permet de partitionner (et éventuellement trier) une table en mémoireGemini said

Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya.
dans SAS Viya. Le partitionnement est crucial pour les performances des modèles d'apprentissage automatique et l'agrégation de données distribuées (parce que personne n'aime attendre des heures pour un 'group by'). Attention toutefois, une table partitionnée et triée refuse catégoriquement qu'on lui ajoute des lignes par la suite (pas de 'append' !) !

Syntaxe Officielle
proc cas;
table.partition /
table={name="nom_table", caslib="nom_caslib", groupBy={"var1", "var2"}, orderBy={"var3"}}
casout={name="table_sortie", caslib="caslib_sortie", replace=true};
run;
quit;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table d'entrée à partitionner. Vous pouvez définir le nom, la caslib, et utiliser groupBy pour indiquer les variables de partitionnement.
casout Définit les paramètres de la table de sortie, comme son nom, si elle remplace une table existante via replace , ou si elle doit être promue en mémoire globale avec promote .
groupBy Sous-paramètre de `table`. Indique la liste des variables utilisées pour répartir les données entre les nœuds. Toutes les lignes ayant les mêmes valeurs atterriront sur le même nœud, tout simplement magique !
orderBy Sous-paramètre de `table`. Permet de trier les données à l'intérieur de chaque partition (nœud).

Préparation des données

Création de données d'exemple

On crée une petite table de ventes avec des dates et des commerciaux pour tester le partitionnement dans notre espace de travail.

1DATA casuser.ventes;
2 INPUT commercial $ mois ventes_montant;
3 DATALINES;
4Jean 1 1500
5Marie 1 2000
6Jean 2 1200
7Marie 2 2500
8Paul 1 900
9Paul 2 1100
10;
11RUN;

Exemples d'utilisation

Partitionnement basique par commercial

Cet exemple divise la table selon la variable `commercial`. Utile pour préparer les données avant un calcul par groupe performant.

1PROC CAS;
2 TABLE.partition /
3 TABLE={name="ventes", caslib="casuser", groupBy={"commercial"}}
4 casout={name="ventes_part", caslib="casuser", replace=true};
5RUN;
6QUIT;
Résultat Attendu :
Une nouvelle table `ventes_part` est créée en mémoire, où les données sont physiquement regroupées par 'commercial'.
Partitionnement, Tri et calcul à la volée

Ici, on sort l'artillerie lourde : on partitionne par `commercial`, on trie par `mois` au sein de chaque partition, et on crée une variable `bonus` à la volée. On capture aussi le temps de traitement pour voir qui est le plus rapide !

1PROC CAS;
2 TABLE.partition RESULT=res STATUS=rc /
3 TABLE={
4 name="ventes",
5 caslib="casuser",
6 groupBy={"commercial"},
7 orderBy={{name="mois"}},
8 computedVars={{name="bonus"}},
9 computedVarsProgram="bonus = ventes_montant * 0.1;"
10 }
11 casout={
12 name="ventes_opti",
13 caslib="casuser",
14 replace=true,
15 compress=true,
16 replication=0
17 };
18 PRINT res;
19RUN;
20QUIT;
Résultat Attendu :
La table `ventes_opti` est générée. Elle contient la nouvelle colonne `bonus`, est regroupée, triée, et compressée. Les résultats de la variable 'res' afficheront des métriques comme rowsTransferred%%https://documentation.sas.com/doc/fr/pgmsascdc/v_073/caspg/cas-table-partition.htm#SAS.cas-table-partition-rslts%%.