Stop au Gaspillage ! Réduisez la Taille de vos Tables SAS jusqu'à 90% en une Ligne de Code
Stéphanie 14 vues
Niveau de difficulté
Confirmé
Publié le :
Le conseil de l'expert
Stéphanie
La compression n'est pas une formule magique, c'est un arbitrage stratégique entre l'économie de stockage (I/O) et la consommation de votre processeur (CPU). Pour une optimisation parfaite, réservez cette technique à vos volumineuses tables historiques, mais évitez de compresser vos petites tables de référence (lookup tables) sous peine de dégrader inutilement vos temps d'exécution. Enfin, l'astuce incontournable : si vos tables compressées subissent des suppressions régulières, n'oubliez jamais d'y associer l'option REUSE=YES pour que SAS puisse recycler l'espace physique libéré !
Saviez-vous qu'il existe une méthode simple et native pour compresser vos datasets sans perdre de données ? Que vous manipuliez des chaînes de caractères répétitives ou des variables numériques complexes, comprendre la différence entre la compression CHAR et BINARY est essentiel. Dans cet article, avec les conseils de Nicolas, nous allons voir comment transformer vos "énormes" tables en fichiers légers et agiles.
La compression permet de réduire l'espace disque en éliminant les espaces vides (blanks) et les répétitions de motifs binaires.
Économie d'espace : Idéal pour les environnements de stockage limités ou coûteux (Cloud).
Performance I/O : Moins de données sur le disque signifie moins de temps passé par le système à lire le fichier (si votre CPU est assez puissant pour décompresser à la volée).
1. La Compression de Caractères (COMPRESS=CHAR ou YES)
C'est la méthode la plus courante. Elle est extrêmement efficace si votre table contient de nombreuses colonnes de type CHARACTER avec beaucoup d'espaces vides ou des valeurs répétées.
Exemple concret :
Imaginez une table de logs où la colonne "Ville" est définie sur 100 caractères, mais contient souvent des noms courts ou des valeurs manquantes.
/* Table SANS compression */
data work.utilisateurs_brut;
length Nom $50 Ville $100;
do i = 1 to 100000;
Nom = "Dupont";
Ville = "Paris"; /* Beaucoup d'espaces perdus ici */
output;
end;
run;
/* Table AVEC compression CHAR */
data work.utilisateurs_optimise (compress=char);
set work.utilisateurs_brut;
run;
/* Vérification de la taille dans la log */
1
/* Table SANS compression */
2
DATA work.utilisateurs_brut;
3
LENGTH Nom $50 Ville $100;
4
DO i = 1 to 100000;
5
Nom = "Dupont";
6
Ville = "Paris"; /* Beaucoup d'espaces perdus ici */
7
OUTPUT;
8
END;
9
RUN;
10
11
/* Table AVEC compression CHAR */
12
DATA work.utilisateurs_optimise (compress=char);
13
SET work.utilisateurs_brut;
14
RUN;
15
16
/* Vérification de la taille dans la log */
Résultat : Dans ce scénario, vous pouvez observer une réduction de taille allant jusqu'à 95%.
2. La Compression Binaire (COMPRESS=BINARY)
Si votre dataset est principalement composé de variables numériques (données financières, capteurs, scores), la compression CHAR sera peu efficace. C’est ici qu’intervient COMPRESS=BINARY. Elle analyse les motifs binaires des données pour compacter les nombres.
/* Création d'une table avec de gros volumes de données numériques */
data work.stats_ventes (compress=binary);
do i = 1 to 1000000;
CA_Journalier = 1500.50;
Code_Magasin = 101;
Flag_Promo = 0;
output;
end;
run;
1
/* Création d'une table avec de gros volumes de données numériques */
2
DATA work.stats_ventes (compress=binary);
3
DO i = 1 to 1000000;
4
CA_Journalier = 1500.50;
5
Code_Magasin = 101;
6
Flag_Promo = 0;
7
OUTPUT;
8
END;
9
RUN;
Conseil : La compression BINARY consomme un peu plus de CPU, mais sur des tables massives de scores prédictifs, c'est un game-changer.
3. Comment automatiser la compression ?
Plutôt que de le spécifier dans chaque étape DATA, vous pouvez l'activer globalement pour votre session de travail ou pour une bibliothèque entière.
Le choix de l'option COMPRESS dépend de la nature de vos données. Pour du texte, privilégiez CHAR. Pour des chiffres, foncez sur BINARY. En adoptant ce réflexe simple, vous passerez pour un expert de l'optimisation auprès de vos administrateurs système !
Avertissement important
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.