Publicado el :
Macro CREACION_INTERNA

Macro de prueba de velocidad de escritura en una biblioteca SAS

Este código también está disponible en: Deutsch English Français
En espera de validación
La macro `%mp_testwritespeedlibrary` está diseñada para evaluar el rendimiento de escritura en una biblioteca SAS©. Toma como parámetros la biblioteca de destino (`lib`), el tamaño del archivo a crear en GB (`size`) y el conjunto de datos de salida (`outds`) para los resultados. La macro genera un nombre de conjunto de datos único para evitar conflictos, crea un conjunto de datos temporal del tamaño solicitado escribiendo un número calculado de observaciones, registra las marcas de tiempo de inicio y fin de la operación, y luego elimina el conjunto de datos temporal. Finalmente, guarda los detalles de la prueba (biblioteca, hora de inicio/fin, duración) en el conjunto de datos de salida especificado.
Análisis de datos

Type : CREACION_INTERNA


Los datos se generan dinámicamente mediante un `DATA STEP` dentro de la macro (`do x=1 to size; output; end;`) para crear un conjunto de datos del tamaño especificado. No se utilizan datos externos o de SASHELP para el contenido del conjunto de datos probado.

1 Bloque de código
Definición e inicialización de la macro
Explicación :
Este bloque define la macro `%mp_testwritespeedlibrary` con sus parámetros y valores predeterminados. Declara las variables macro locales `ds` (para el nombre del conjunto de datos temporal) y `start` (para la marca de tiempo de inicio). Utiliza un bucle `%do %until` con las macros `%mf_getuniquename()` y `%mf_existds()` para generar un nombre de conjunto de datos único que aún no existe en la biblioteca especificada, garantizando la ausencia de conflictos. Finalmente, captura la hora de inicio de la operación mediante `%sysfunc(datetime())`.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este `DATA STEP` es el núcleo de la medición de rendimiento. Crea un conjunto de datos llamado `&lib..&ds` (el nombre único generado anteriormente) sin compresión (`compress=no`) y conservando solo una columna `x` (`keep=x`). La variable `size` se calcula para determinar el número de observaciones necesarias para alcanzar el tamaño objetivo especificado por el parámetro `size` de la macro (convertido de GB a bytes y ajustado para un 'encabezado'). El bucle `do x=1 to size; output; end;` genera las observaciones, simulando así una carga de escritura importante.
¡Copiado!
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 Bloque de código
PROC SQL
Explicación :
Este bloque `PROC SQL` ejecuta una instrucción `DROP TABLE` para eliminar el conjunto de datos temporal `&lib..&ds` creado anteriormente. Es un paso de limpieza esencial para evitar el desorden en la biblioteca y asegurar que las pruebas sean reproducibles sin residuos de operaciones anteriores.
¡Copiado!
1PROC SQL;
2drop TABLE &lib..&ds;
3RUN;
4 Bloque de código
DATA STEP Data
Explicación :
Este `DATA STEP` crea el conjunto de datos final `&outds` que contiene los resultados de la prueba de rendimiento. Registra el nombre de la biblioteca (`lib`), la hora de inicio (`start_dttm`) y fin (`end_dttm`) de la operación de escritura (formateadas en `datetime19.`). La `duration_seconds` se calcula restando el tiempo de inicio del tiempo de fin, proporcionando una medida directa de la velocidad de escritura.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright (c) 2001-2006 Rodney Sparapani (tomado de `_version.sas`), bajo licencia GNU General Public License. El bloque HELP de la macro también hace referencia a 'Copyright 2010-2023 HMS Analytical Software GmbH'.