Publié le :
Macro CREATION_INTERNE

Macro de test de vitesse d'écriture dans une bibliothèque SAS

Ce code est également disponible en : Deutsch English Español
En attente de validation
La macro `%mp_testwritespeedlibrary` est conçue pour benchmarker la performance d'écriture dans une bibliothèque SAS©. Elle prend en paramètres la bibliothèque cible (`lib`), la taille du fichier à créer en GB (`size`) et le dataset de sortie (`outds`) pour les résultats. La macro génère un nom de dataset unique pour éviter les conflits, crée un dataset temporaire de la taille demandée en écrivant un nombre calculé d'observations, enregistre les horodatages de début et de fin de l'opération, puis supprime le dataset temporaire. Enfin, elle enregistre les détails du test (bibliothèque, heure de début/fin, durée) dans le dataset de sortie spécifié.
Analyse des données

Type : CREATION_INTERNE


Les données sont générées dynamiquement par un `DATA STEP` au sein de la macro (`do x=1 to size; output; end;`) pour créer un dataset de la taille spécifiée. Aucune donnée externe ou issue de SASHELP n'est utilisée pour le contenu du dataset testé.

1 Bloc de code
Macro-définition et initialisation
Explication :
Ce bloc définit la macro `%mp_testwritespeedlibrary` avec ses paramètres et leurs valeurs par défaut. Il déclare les variables macro locales `ds` (pour le nom du dataset temporaire) et `start` (pour l'horodatage de début). Il utilise une boucle `%do %until` avec les macros `%mf_getuniquename()` et `%mf_existds()` pour générer un nom de dataset unique qui n'existe pas encore dans la bibliothèque spécifiée, garantissant l'absence de conflit. Enfin, il capture l'heure de début de l'opération via `%sysfunc(datetime())`.
Copié !
1%macro mp_testwritespeedlibrary(lib=WORK
2 ,outds=work.results
3 ,size=0.1
4)/*/STORE SOURCE*/;
5%local ds start;
6 
7/* find an unused, unique name for the new table */
8%let ds=%mf_getuniquename();
9%DO %until(%mf_existds(&lib..&ds)=0);
10 %let ds=%mf_getuniquename();
11%END;
12 
13%let start=%sysfunc(datetime());
2 Bloc de code
DATA STEP Data
Explication :
Ce `DATA STEP` est le cœur de la mesure de performance. Il crée un dataset nommé `&lib..&ds` (le nom unique généré précédemment) sans compression (`compress=no`) et en ne conservant qu'une colonne `x` (`keep=x`). La variable `size` est calculée pour déterminer le nombre d'observations nécessaires pour atteindre la taille cible spécifiée par le paramètre `size` de la macro (converti de GB en octets et ajusté pour un 'header'). La boucle `do x=1 to size; output; end;` génère les observations, simulant ainsi une charge d'écriture importante.
Copié !
1DATA &lib..&ds(compress=no keep=x);
2 header=128*1024;
3 size=(1073741824/8 * &size) - header;
4 DO x=1 to size;
5 OUTPUT;
6 END;
7RUN;
3 Bloc de code
PROC SQL
Explication :
Ce bloc `PROC SQL` exécute une instruction `DROP TABLE` pour supprimer le dataset temporaire `&lib..&ds` créé précédemment. C'est une étape de nettoyage essentielle pour éviter l'encombrement de la bibliothèque et s'assurer que les tests sont reproductibles sans résidus d'opérations antérieures.
Copié !
1PROC SQL;
2drop TABLE &lib..&ds;
3RUN;
4 Bloc de code
DATA STEP Data
Explication :
Ce `DATA STEP` crée le dataset final `&outds` qui contient les résultats du test de performance. Il enregistre le nom de la bibliothèque (`lib`), l'heure de début (`start_dttm`) et de fin (`end_dttm`) de l'opération d'écriture (formatées en `datetime19.`). La `duration_seconds` est calculée en soustrayant le temps de début du temps de fin, fournissant une mesure directe de la vitesse d'écriture.
Copié !
1DATA &outds;
2 lib="&lib";
3 start_dttm=put(&start,datetime19.);
4 end_dttm=put(datetime(),datetime19.);
5 duration_seconds=end_dttm-start_dttm;
6RUN;
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 (c) 2001-2006 Rodney Sparapani (issu de `_version.sas`), sous licence GNU General Public License. Le bloc HELP de la macro référence également 'Copyright 2010-2023 HMS Analytical Software GmbH'.