SAS9

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 :
Stéphanie

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é !

Dans l’ère du Big Data, la gestion de l’espace de stockage est devenue un défi quotidien pour les Data Scientists et les analystes BI. Des tables SAS© de plusieurs gigaoctets peuvent non seulement saturer vos serveurs, mais aussi ralentir considérablement vos temps de traitement (I/O). Pour décrypter les meilleures pratiques d'optimisation, nous avons invité Nicolas Housset, ancien du support SAS© et expert reconnu, à partager son expertise sur une fonctionnalité souvent sous-utilisée : l'option COMPRESS.

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.

Pourquoi compresser vos données SAS ?

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.

1/* Table SANS compression */
2DATA 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;
9RUN;
10 
11/* Table AVEC compression CHAR */
12DATA work.utilisateurs_optimise (compress=char);
13 SET work.utilisateurs_brut;
14RUN;
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.

1/* Création d'une table avec de gros volumes de données numériques */
2DATA 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;
9RUN;
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.

Note :
Au niveau de la session :
1options compress=yes;
2/* Applique la compression CHAR par défaut à toutes les nouvelles tables */
Note :
Via PROC DATASETS (pour une bibliothèque) :
1PROC DATASETS lib=ma_lib nolist;
2 modify ma_table (compress=binary);
3RUN;
4QUIT;

Alors, prêt à faire une cure d'amaigrissement à vos serveurs SAS ?

Attention : Quand NE PAS compresser ?

Tout n'est pas rose au pays de la compression. Voici deux cas où il vaut mieux s'abstenir :

  1. Tables très petites : L'en-tête de compression peut rendre le fichier plus lourd que l'original !

  2. Accès direct fréquent (Point-and-Shoot) : Si vous utilisez beaucoup l'option POINT= pour accéder à des observations spécifiques, la compression ralentira l'accès car SAS© doit recalculer les positions.

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 !