Optimisation du stockage CAS : Maîtriser le format DVR lors du chargement de données
Simon 40 Aufrufe
Schwierigkeitsgrad
Débutant
Veröffentlicht am :
Expertenrat
Michael
En architecture In-Memory, l'économie de RAM doit se jouer dès l'ingestion : ne chargez jamais une table pour la compresser ensuite. Privilégiez systématiquement l'instruction UPLOAD de la PROC CAS qui applique le format DVR et la conversion VARCHAR à la volée (in-flight). C'est la seule méthode capable de diviser votre empreinte mémoire par deux sans doubler vos opérations d'entrée/sortie.
/* Méthode standard - ne permet pas l'optimisation DVR directe */
proc casutil;
load data=maTableWork casout="maTableCAS";
quit;
1
/* Méthode standard - ne permet pas l'optimisation DVR directe */
2
PROC CASUTIL;
3
load DATA=maTableWork casout="maTableCAS";
4
QUIT;
Le problème réside dans le fait que l'instruction LOAD DATA de PROC CASUTIL ne propose pas d'option native pour définir le deafaultmemoryFormat. Par conséquent, la table est chargée avec le format par défaut, consommant plus de mémoire que nécessaire.
La fausse bonne idée : Le chargement en deux étapes
Face à cette limitation, une solution de contournement souvent tentée consiste à :
Charger la table normalement (format standard).
Utiliser l'action table.copyTable pour créer une copie compressée en DVR.
Supprimer la table originale.
Bien que fonctionnelle, cette méthode est inefficace ("clunky"). Elle double temporairement l'utilisation de la mémoire et augmente les entrées/sorties inutilement.
La Solution Optimale : L'instruction UPLOAD dans PROC CAS
L'instruction UPLOAD permet non seulement de transférer le fichier, mais offre également un contrôle granulaire sur les paramètres de sortie (casout) et les options d'importation.
Avantages de cette méthode
Directe : Pas besoin de table temporaire.
Compression DVR : Application immédiate de la réduction des doublons.
Conversion VARCHAR : Possibilité de convertir les chaînes de caractères fixes en VARCHAR à la volée, offrant une réduction supplémentaire de l'espace mémoire.
Note : Exemple de code
Voici comment charger une table située dans la bibliothèque WORK directement en format DVR :
proc cas;
/* Nettoyage préalable si nécessaire */
action table.droptable / name="somedata" quiet=true;
/* Chargement optimisé */
upload /
/* Récupération dynamique du chemin physique de la table SAS */
path="%sysfunc(pathname(work))/somedata.sas7bdat"
/* Configuration de la table de sortie CAS */
casout={
caslib="casuser"
name="somedata"
promote=true, /* Rendre la table globale */
memoryformat="DVR", /* Activation de la compression DVR */
replication=0 /* Ajuster la réplication selon les besoins */
}
/* Options d'importation supplémentaires */
importoptions={
filetype="BASESAS",
varcharConversion=17 /* Convertit les CHAR > 16 octets en VARCHAR */
}
;
quit;
L'option varcharConversion est un complément idéal au DVR. Alors que le DVR compresse les valeurs répétées, le passage au type VARCHAR réduit l'espace alloué aux chaînes de caractères de longueur variable, maximisant ainsi l'efficacité du stockage.
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.