CAS

Optimización del almacenamiento CAS: Dominar el formato DVR al cargar datos

Simon 24/05/2023 5 vistas

En los entornos SAS© Viya, la gestión de la memoria RAM es crítica. A medida que los volúmenes de datos aumentan, se vuelve imperativo utilizar estrategias de almacenamiento inteligentes. Uno de los métodos más efectivos es el uso del parámetro deafaultmemoryFormat="DVR" (Reducción de Valores Duplicados), que permite reducir considerablemente el tamaño de las tablas en memoria al comprimir los valores repetidos.

Sin embargo, aplicar este formato al cargar datos desde una biblioteca SAS© clásica (como WORK) a CAS puede resultar técnicamente confuso. Este artículo explora las limitaciones de los métodos clásicos y presenta la solución óptima.

El Desafío: Cargar datos SAS© a CAS con DVR

El enfoque estándar para cargar una tabla SAS© (ubicada en el Compute Server) al servidor CAS generalmente consiste en usar PROC CASUTIL.

1/* Méthode standard - ne permet pas l'optimisation DVR directe */
2PROC CASUTIL;
3 load DATA=maTableWork casout="maTableCAS";
4QUIT;

El problema reside en que la instrucción LOAD DATA de PROC CASUTIL no ofrece una opción nativa para definir el deafaultmemoryFormat. Por lo tanto, la tabla se carga con el formato por defecto, consumiendo más memoria de la necesaria.

La falsa buena idea: La carga en dos pasos

Frente a esta limitación, una solución alternativa a menudo intentada consiste en:

  1. Cargar la tabla normalmente (formato estándar).

  2. Usar la acción table.copyTable para crear una copia comprimida en DVR.

  3. Eliminar la tabla original.

Aunque funcional, este método es ineficiente ("clunky"). Duplica temporalmente el uso de la memoria y aumenta las entradas/salidas innecesariamente.

La Solución Óptima: La instrucción UPLOAD en PROC CAS

Para cargar datos directamente desde el entorno SAS© (Compute Server) a CAS aplicando el formato DVR en un solo paso, la mejor práctica es utilizar la instrucción UPLOAD dentro de PROC CAS.

La instrucción UPLOAD no solo permite transferir el archivo, sino que también ofrece un control granular sobre los parámetros de salida (casout) y las opciones de importación.

Ventajas de este método

  1. Directa: No necesita tabla temporal.

  2. Compresión DVR: Aplicación inmediata de la reducción de duplicados.

  3. Conversión VARCHAR: Posibilidad de convertir las cadenas de caracteres fijas a VARCHAR sobre la marcha, ofreciendo una reducción adicional del espacio de memoria.

Note :
Ejemplo de código
Así es como se carga una tabla ubicada en la biblioteca WORK directamente en formato DVR:
1PROC CAS;
2 /* Nettoyage préalable si nécessaire */
3 ACTION TABLE.droptable / name="somedata" quiet=true;
4
5 /* Chargement optimisé */
6 upload /
7 /* Récupération dynamique du chemin physique de la table SAS */
8 path="%sysfunc(pathname(work))/somedata.sas7bdat"
9
10 /* Configuration de la table de sortie CAS */
11 casout={
12 caslib="casuser"
13 name="somedata"
14 promote=true, /* Rendre la table globale */
15 memoryformat="DVR", /* Activation de la compression DVR */
16 replication=0 /* Ajuster la réplication selon les besoins */
17 }
18
19 /* Options d'importation supplémentaires */
20 importoptions={
21 filetype="BASESAS",
22 varcharConversion=17 /* Convertit les CHAR > 16 octets en VARCHAR */
23 }
24 ;
25QUIT;

¿Por qué funciona mejor?

La instrucción UPLOAD en PROC CAS actúa como un puente directo. Al especificar la ruta física del archivo .sas©7bdat (a través de %sysfunc(pathname(work))), le pide al servidor CAS que lea el archivo y lo estructure inmediatamente según sus especificaciones casout.

La opción varcharConversion es un complemento ideal para DVR. Mientras que DVR comprime los valores repetidos, el cambio al tipo VARCHAR reduce el espacio asignado a las cadenas de caracteres de longitud variable, maximizando así la eficiencia del almacenamiento.

El uso del formato DVR es una poderosa palanca para optimizar su entorno SAS© Viya. Para implementarlo de manera efectiva a partir de datos SAS© existentes, abandone los pasos intermedios de PROC CASUTIL en favor de la instrucción UPLOAD en PROC CAS. Ganará en rendimiento, simplicidad de código y espacio de memoria.