table alterTable

Scénario Performance : Allègement d'une table de logs volumineuse

Scénario de test & Cas d'usage

Contexte Métier

Une équipe de supervision IT analyse des logs applicatifs stockés dans une table CAS de plusieurs millions de lignes. Pour accélérer les analyses et réduire l'empreinte mémoire, il faut rapidement supprimer de nombreuses colonnes de diagnostic verbeuses et ne conserver que l'essentiel. De plus, cette table de travail doit être automatiquement supprimée de la mémoire après une heure d'inactivité pour libérer les ressources.
À propos du Set : table

Chargement, sauvegarde et gestion des tables en mémoire.

Découvrir toutes les actions de table
Préparation des Données

Création d'une table volumineuse 'APP_LOGS_HUGE' avec 2 millions de lignes et plusieurs colonnes.

Copié !
1DATA casuser.APP_LOGS_HUGE;
2 LENGTH Host $20 Message $100;
3 DO i = 1 to 2000000;
4 Timestamp = datetime();
5 Host = 'server' || put(mod(i, 10), 1.);
6 LogLevel = ceil(4 * ranuni(123)); /* 1=INFO, 2=WARN, 3=ERROR, 4=FATAL */
7 Message = 'Processing request ' || put(i, 8.);
8 ThreadID = 'thread-' || put(mod(i, 50), 2.);
9 ResponseTime_ms = 10 + 500 * ranuni(123);
10 OUTPUT;
11 END;
12 drop i;
13RUN;

Étapes de réalisation

1
Chargement de la table volumineuse 'APP_LOGS_HUGE' sur le serveur CAS.
Copié !
1PROC CASUTIL;
2 load DATA=casuser.APP_LOGS_HUGE outcaslib="casuser" casout="APP_LOGS_HUGE" replace;
3RUN;
4QUIT;
2
Utilisation de `keep` pour supprimer efficacement la majorité des colonnes et application d'une durée de vie.
Copié !
1PROC CAS;
2 TABLE.alterTable /
3 caslib="casuser",
4 name="APP_LOGS_HUGE",
5 keep={"Timestamp", "Host", "LogLevel", "Message"},
6 lifetime=3600; /* Expiration après 1 heure d'inactivité */
7RUN;
8QUIT;
3
Vérification que seules les colonnes spécifiées dans 'keep' subsistent.
Copié !
1PROC CAS;
2 TABLE.columnInfo / TABLE={caslib="casuser", name="APP_LOGS_HUGE"};
3RUN;
4QUIT;

Résultat Attendu


L'action s'exécute rapidement malgré la volumétrie. La table 'APP_LOGS_HUGE' ne contient plus que les 4 colonnes 'Timestamp', 'Host', 'LogLevel' et 'Message'. Sa taille en mémoire est significativement réduite. Les métadonnées de la table indiquent une durée de vie de 3600 secondes. Si la table n'est pas accédée pendant une heure, un appel à `table.tableInfo` ne la listerait plus.