Exemple de programme SAS SPDE (SPDS)
Avant Propos.
Le but de cet article n’est pas de se substituer à une formation appliquée de SAS SPDE, mais de présenter ce fabuleux produit, même si les techniciens SAS avancés seront surement capable de s’en contenter pour comprendre, assimiler et utiliser SAS SPDE.
Cet article ne prétends pas non plus à se substituer à la documentation officielle de SAS Institute sur SAS SPDE, un lien vers celle-ci (documentation en anglais) se trouve en bas de la page.
Description générale de SAS SPDE
SAS SPDE est un moteur de gestion de données SAS, SAS SPDS est un serveur à part entière de gestion des données et au fonctionnant proche de SAS SPDE. SAS SPDE est intégré au module SAS Base comme moteur de gestion des données .
Aujourd’hui intégré au produit / module SAS Base, son nom à été changé en SAS SPDE.
Ce moteur de données SAS offre des performances exceptionnelles et trouve sa raison d’être dans le besoin de performances accrues lors de requêtes sur des tables de très gros volumes. C’est à dire des tables allant de 512 méga à plusieurs terra octets.
En synthèse, si on souhaite pouvoir lancer une requête contenant plusieurs critères sur une table de plusieurs terra octets et obtenir une réponse en quelques secondes, alors la solution SAS SPDE est une solution appropriée.
SAS SPDE est donc l’un des procédé d’optimisation, il en existe bien d’autre, pour l’accès à des données décisionnelles, données d’entreprise, de fortes volumétrie et nécessitant des performances accrues en terme de temps de réponse à des requêtes.
Description technique de SAS SPDE
Pourquoi SAS SPDE est encore plus rapide que SAS Base, qui déjà offre des performance hors du commun ?
Le principe de fonctionnement du moteur SAS SPDE tire profit des architectures SMP (Symmetric Multiprocessing). Dans cette architecture, les processeurs partagent le bus d’accès à la mémoire vive, communiquent entre eux et peuvent travailler en parallèle.
Et enfin ajoutons également une batterie de disque dur rapide sur lesquels seront réparti un partitionnement des grosses table SAS.
Simplification et synthèse :
Pour effectuer une requête sur une table de 4 terra-octets, sur une machine possédant 16 processeurs et 9 disques durs :
SAS SPDE, avec les doigts de l’administrateur
partitionne la table (partie donnée) en 6 blocs et implémente chacun de ces blocs sur un disque dur différent, crée un descripteur nommé méta-data sur un autre disque dur, qui contiendra les informations sur la table et enfin utilisera les deux derniers disques durs afin d’y stocker les fichiers d’index.
Un choix de la taille du partitionnement, par exemple 128 Mo, donnera un total de 32 blocs poue cette table de 4 terra-octets, et ces blocs seront répartit sur les 6 disques durs prévue à cet effet via l’allocation faite lors du libname.
Ensuite lors de la requête 1 ou 2 des CPU travailleront sur les fichiers d’index, une dizaine sur les blocs de donnée, 1 sur les méta-data et le reste sur le tri automatique à la volée sur l’éventuelle classification induite par des group by.
SAS SPDE ne nécessite plus l’utilisation de la PROC SORT, en effet, les données sont triées automatiquement à la volée en cas de besoin.
Tout ce petit monde travaillera en parallèle et communiquera ensemble afin de fournir un résultat très rapide et cohérent à l’utilisateur.
Programme SAS d’exemple sur SAS SPDE
Se programme à pour vocation et vous fournir des informations synthétique sur la syntaxe générale à utiliser lors d’un travail sur des données à faire gérer par le moteur de donnée SAS SPDE.
Le programme ci dessous proposé, ne prétend pas vous fournir toutes les informations sur le produit SAS SPDE, mais une base sérieuse afin de vous permettre de commencer à travailler avec SAS SPDE. Attention toutefois, lors de l’utilisation de SAS SPDE, les performances ne peuvent être significative que si votre machine possède plusieurs processeurs et plusieurs disques durs. La connexion à ces derniers via fibre optique est un plus.
Cet exemple de programme SAS, utilise les modules SAS : SAS Base, SAS SPDE, SAS SQL et SAS MACRO.
/* Options d'otimisation et de conte rendu */
options fullstimer bufno=16 bufsize=16384;
/* Exemple d'utilisation du moteur SAS SPDE */
/* définition et mise en place de l'accès via LIBNAME */
libname mon_spde spde "D:\SAS Divers\SAS_SPDE/disk1/metadata"
datapath = ("D:\SAS Divers\SAS_SPDE/disk2/userdata"
"D:\SAS Divers\SAS_SPDE/disk3/userdata")
indexpath = ("D:\SAS Divers\SAS_SPDE/disk4/userindexes"
"D:\SAS Divers\SAS_SPDE/disk5/userindexes")
; /* temp=yes; Attention ! Cette option vide les libnames
de SPDE à la fin de la session SAS. */
/* MACRO itérative pour la création d'une table SAS
de 400 variables et d'environ 80 000 observations */
options nomprint nosymbolgen;
/* Définition, compilation et stockage temporaire */
%macro test(deb=1,fin=200);
data mon_spde.test_spde(index=(total /unique)asyncindex=yes partsize=24);
%do i = &deb %to &fin;
%do inc = 1 %to 399;
a&inc = &i * &inc;
total=sum(of a:);
output;
%end;
%end;
run;
%mend test;
/* Appel de la macro pour création de la table */
%test ;
/* Requête de création d'une table via une
selection d'observations sur critères .. */
proc sql;
create table mon_spde.select_spde as
select * from mon_spde.test_spde
where total between 400000 and 5000000
and a1 >= 5 and a1 <= 63;
quit;
/* MACRO Itérative exemple en SAS Base */
options nomprint nosymbolgen;
%macro test(deb=1,fin=200);
data toto(index=(total /unique));
%do i = &deb %to &fin;
%do inc = 1 %to 399;
a&inc = &i * &inc;
total=sum(of a:);
output;
%end;
%end;
run;
%mend test;
%test ;
proc sql;
create table select_toto as
select * from toto
where total between 400000 and 5000000
and a1 >= 5 and a1 <= 63;
quit;
/* Copie d'une table de SAS base vers SAS SPDE */
proc copy in = work out = mon_spde;
select toto;
run;
/* Copie d'une table de SAS base vers SAS SPDE,
bien plus performant que la PROC COPY */
proc append base=mon_spde.toto(asyncindex=yes partsize=24)
data=work.toto;
run;
/* Compte rendu du contenu d'une biblithèque SAS SPDE */
proc contents data=mon_spde._all_;
run;
Note :
A noter que la PROC APPEND offres des performances accrues par rapport à la PROC COPY de l’ordre de facteur 10, toutefois pour la copie de beaucoup de table se trouvant sur la même bibliothèque, l’écriture de la PROC COPY est beaucoup plus simple. Mais comme toujours en SAS il existe des solutions à tout problème et ici nous pourrions, par exemple, encapsuler la proc append dans une macro et automatiser le transfert de toutes les tables contenues dans un libname x d’un moteur SAS Base vers un Moteur SAS SPDE.
Documentation :
Pour les longs discours et pour plus de détails sur SAS SPDE, voir la documentation officielle de SAS Institute, version SAS 9.2 : Scalable Data Performance Engine
Copyright de l’article © P.Maubert 2009
