L'action `table.index` est utilisée pour créer un index sur des colonnes spécifiées d'un fichier SASHDAT. Contrairement à une indexation après chargement en mémoire, cette méthode permet de désigner le fichier SASHDAT comme entrée de l'action `index` via le paramètre `table`. Cela optimise l'utilisation des ressources, car l'action lit le fichier directement depuis le disque plutôt que de requérir le chargement complet de la table originale en mémoire. Le résultat de l'opération est une nouvelle table CAS en mémoire avec les colonnes indexées. Cette nouvelle table peut ensuite être sauvegardée sur le disque, remplaçant potentiellement le fichier SASHDAT original ou créant un nouveau fichier, afin de persister l'indexation. L'action `table.tableDetails` est ensuite utilisée pour vérifier la présence et la taille de l'index dans la table résultante.
Analyse des données
Type : CREATION_INTERNE
Les exemples utilisent des données générées via des DATA steps SAS et des procédures CAS pour créer des fichiers SASHDAT temporaires à des fins de démonstration, garantissant ainsi l'autonomie de chaque bloc de code.
1 Bloc de code
DATA STEP / table.index Data
Explication : Cet exemple crée un fichier SASHDAT simple `monfichier_unindexed.sashdat` dans une caslib temporaire. Il utilise ensuite l'action `table.index` pour créer un index sur la colonne 'ID' en spécifiant le fichier SASHDAT directement. La table indexée `monfichier_indexed` est ensuite sauvegardée pour persister l'indexation dans le fichier SASHDAT original. L'action `table.tableDetails` est utilisée pour confirmer que l'index a été créé.
Copié !
/* Assurez-vous qu'une session CAS est active */
options cashost="localhost" casport=5570;
cas casauto;
/* Crée une caslib temporaire si elle n'existe pas */
proc cas;
caslib _all_ assign;
builtins.addCaslib / name='mycaslib', path='/tmp/mycaslib', subdirs=TRUE, dataSource={srcType='PATH'};
quit;
/* 1. Création d'un fichier SASHDAT simple sur disque */
data casuser.monfichier_unindexed;
input ID $ Nom $ Valeur;
datalines;
A Jean 100
B Marie 150
C Pierre 200
D Anne 120
;
run;
proc casutil;
save casuser.monfichier_unindexed / caslib='mycaslib' replace;
quit;
/* 2. Indexation d'une seule colonne du fichier SASHDAT */
proc cas;
table.index /
table={name='monfichier_unindexed.sashdat', caslib='mycaslib'},
casout={name='monfichier_indexed', replace=TRUE, indexVars={'ID'}};
run;
/* 3. Sauvegarde de la table indexée, remplaçant l'originale pour persister l'index */
table.save /
table='monfichier_indexed',
name='monfichier_unindexed.sashdat',
caslib='mycaslib',
replace=TRUE;
run;
/* 4. Vérification de l'indexation (optionnel) */
table.tableDetails / table={name='monfichier_indexed', caslib='mycaslib'};
run;
quit;
1
/* Assurez-vous qu'une session CAS est active */
2
options cashost="localhost" casport=5570;
3
cas casauto;
4
5
/* Crée une caslib temporaire si elle n'existe pas */
Explication : Cet exemple illustre l'indexation de plusieurs colonnes ('Produit', 'Region') d'un fichier SASHDAT. Après la création et la sauvegarde du fichier `ventes_unindexed.sashdat`, l'action `table.index` crée un index composite. `table.tableDetails` est ensuite utilisée pour afficher les informations détaillées de la table en mémoire `ventes_indexed`, confirmant la présence et la configuration du nouvel index, y compris sa taille.
Copié !
/* Assurez-vous qu'une session CAS est active */
options cashost="localhost" casport=5570;
cas casauto;
/* Crée une caslib temporaire si elle n'existe pas */
proc cas;
caslib _all_ assign;
builtins.addCaslib / name='mycaslib', path='/tmp/mycaslib', subdirs=TRUE, dataSource={srcType='PATH'};
quit;
/* 1. Création d'un autre fichier SASHDAT sur disque */
data casuser.ventes_unindexed;
input Produit $ Region $ Montant;
datalines;
A Est 1000
B Ouest 1500
A Nord 800
C Sud 2200
B Est 1100
;
run;
proc casutil;
save casuser.ventes_unindexed / caslib='mycaslib' replace;
quit;
/* 2. Indexation de plusieurs colonnes */
proc cas;
table.index /
table={name='ventes_unindexed.sashdat', caslib='mycaslib'},
casout={name='ventes_indexed', replace=TRUE, indexVars={'Produit', 'Region'}};
run;
/* 3. Sauvegarde de la table indexée */
table.save /
table='ventes_indexed',
name='ventes_unindexed.sashdat',
caslib='mycaslib',
replace=TRUE;
run;
/* 4. Affichage des détails de la table pour confirmer l'index */
table.tableDetails / table={name='ventes_indexed', caslib='mycaslib'};
run;
quit;
1
/* Assurez-vous qu'une session CAS est active */
2
options cashost="localhost" casport=5570;
3
cas casauto;
4
5
/* Crée une caslib temporaire si elle n'existe pas */
Explication : Cet exemple avancé montre comment créer un index sur un fichier SASHDAT de grande taille et le recharger en mémoire avec l'index intact. Après la création d'un large jeu de données `grandedonnees_unindexed.sashdat` et son indexation sur 'ID' et 'Groupe', la table indexée est sauvegardée. La table en mémoire est ensuite supprimée pour simuler un nouveau départ. Enfin, la table est rechargée en mémoire via `table.loadTable`, et `table.tableDetails` confirme que l'indexation a bien été conservée lors de la persistance et du rechargement, démontrant l'efficacité de cette approche pour les grands volumes.
Copié !
/* Assurez-vous qu'une session CAS est active */
options cashost="localhost" casport=5570;
cas casauto;
/* Crée une caslib temporaire si elle n'existe pas */
proc cas;
caslib _all_ assign;
builtins.addCaslib / name='mycaslib', path='/tmp/mycaslib', subdirs=TRUE, dataSource={srcType='PATH'};
quit;
/* 1. Création d'un fichier SASHDAT de plus grande taille */
data casuser.grandedonnees_unindexed;
do i = 1 to 100000;
ID = i;
Groupe = ceil(i / 1000);
Valeur = ranuni(0) * 1000;
output;
end;
run;
proc casutil;
save casuser.grandedonnees_unindexed / caslib='mycaslib' replace;
quit;
/* 2. Indexation de colonnes clés directement depuis le fichier SASHDAT sur disque */
proc cas;
table.index /
table={name='grandedonnees_unindexed.sashdat', caslib='mycaslib'},
casout={name='grandedonnees_indexed', replace=TRUE, indexVars={'ID', 'Groupe'}};
run;
/* 3. Sauvegarde de la table indexée, pour persister l'index sur disque */
table.save /
table='grandedonnees_indexed',
name='grandedonnees_unindexed.sashdat',
caslib='mycaslib',
replace=TRUE;
run;
/* 4. Nettoyage de la table en mémoire pour simuler un rechargement */
table.dropTable / name='grandedonnees_indexed';
run;
/* 5. Chargement de la table SASHDAT qui inclut maintenant l'index */
table.loadTable /
caslib='mycaslib',
path='grandedonnees_unindexed.sashdat',
casout={name='grandedonnees_reloaded', replace=TRUE};
run;
/* 6. Vérification que la table rechargée possède bien l'index */
table.tableDetails / table={name='grandedonnees_reloaded', caslib='mycaslib'};
run;
quit;
1
/* Assurez-vous qu'une session CAS est active */
2
options cashost="localhost" casport=5570;
3
cas casauto;
4
5
/* Crée une caslib temporaire si elle n'existe pas */
Explication : Cet exemple démontre comment travailler avec des fichiers SASHDAT depuis le système de fichiers vers CAS. Un fichier SASHDAT est d'abord créé localement, puis chargé dans une table CAS en mémoire. L'action `table.index` est ensuite appliquée à cette table CAS en mémoire pour créer une nouvelle table CAS avec les index désirés. Enfin, cette table CAS indexée est sauvegardée dans un nouveau fichier SASHDAT sur disque, intégrant l'indexation. `table.tableDetails` est utilisé pour confirmer l'index sur la table CAS en mémoire.
Copié !
/* Assurez-vous qu'une session CAS est active */
options cashost="localhost" casport=5570;
cas casauto;
/* Crée une caslib temporaire si elle n'existe pas */
proc cas;
caslib _all_ assign;
builtins.addCaslib / name='mycaslib', path='/tmp/mycaslib', subdirs=TRUE, dataSource={srcType='PATH'};
quit;
/* 1. Création d'un fichier SASHDAT local */
data _null_;
file '/tmp/mycaslib/data_locale_unindexed.sashdat';
do i = 1 to 5000;
ID = i;
Categorie = ceil(i / 1000);
Value = rannor(0);
output;
end;
run;
/* 2. Chargement du fichier SASHDAT dans CAS en tant que table en mémoire */
proc casutil;
load data='/tmp/mycaslib/data_locale_unindexed.sashdat' outcaslib='mycaslib' casout='data_locale_cas' replace;
quit;
/* 3. Création d'une nouvelle table CAS indexée à partir de la table en mémoire */
proc cas;
table.index /
table={name='data_locale_cas', caslib='mycaslib'},
casout={name='data_locale_cas_indexed', replace=TRUE, indexVars={'ID', 'Categorie'}};
run;
/* 4. Vérification de l'indexation de la nouvelle table CAS */
table.tableDetails / table={name='data_locale_cas_indexed', caslib='mycaslib'};
run;
/* 5. Sauvegarde de la table CAS indexée vers un fichier SASHDAT */
table.save /
table='data_locale_cas_indexed',
name='data_locale_indexed.sashdat',
caslib='mycaslib',
replace=TRUE;
run;
quit;
1
/* Assurez-vous qu'une session CAS est active */
2
options cashost="localhost" casport=5570;
3
cas casauto;
4
5
/* Crée une caslib temporaire si elle n'existe pas */
/* 5. Sauvegarde de la table CAS indexée vers un fichier SASHDAT */
39
TABLE.save /
40
TABLE='data_locale_cas_indexed',
41
name='data_locale_indexed.sashdat',
42
caslib='mycaslib',
43
replace=TRUE;
44
RUN;
45
QUIT;
46
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
« L'indexation est souvent perçue comme une opération coûteuse, mais ce script démontre comment l'intégrer proprement dans un pipeline de données. Le point critique ici est la boucle de persistance : Indexation → Sauvegarde → Rechargement.
En remplaçant le fichier SASHDAT original par sa version indexée, vous transformez une table 'brute' en une ressource optimisée pour l'ensemble de l'organisation. L'utilisation systématique de table.tableDetails est une excellente pratique de gouvernance : elle permet de monitorer la taille des index et de valider que les colonnes de haute cardinalité sont correctement traitées pour accélérer les futurs traitements analytiques »
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.