Promouvoir une table CAS de portée de session à une portée globale
Lors du chargement de données dans CAS à l'aide de PROC CASUTIL, vous avez le choix entre deux méthodes de chargement de la table: session-scope ou global-scope. Ceci est contrôlé par l'option PROMOTE de l'instruction PROC CASUTIL.
Les tables Session-scope ne peuvent être vues que par une seule session CAS et sont supprimées du CAS lorsque cette session est terminée, alors que les tables Global-scope peuvent être vues publiquement et ne seront pas supprimées lorsque la session CAS sera terminée.
Exemple de création d'une table Session-scope
Création de la session CAS (MYSESSION) et d'une bibliothèque pointant vers une CASLIB (CASGADATA):
Chargement de la table dans CAS (table myGAanalytics)
Si je termine ma session, via le code ci-dessous, ma table n'est plus accessible :
Exemple de création d'une table Global-scope :
Pour charger une table dans CAS est la rendre "globale" il faut ajouter l'option promote :
Il est également possible de soumettre une "cas action" pour charger cette table :
Vérifions maintenant la portée de cette table, en utilisant le code ci-dessous :
Maintenant que cette table est promue, elle sera chargé et accessible en mémoire à chaque création d'un libname sur la caslib.
Après avoir terminé sa session, la table est toujours en mémoire, comme le montre cette copie d'écran de SASEnvironmentManager :
Plutôt que de supprimer la table de portée globale (myGAanalytics), puis de charger la nouvelle table CAS , vous pouvez utiliser une proc CAS pour supprimer la table de portée globale; charger la nouvelle table (myGAanalyticsNEW), puis promouvoir cette table.
Cela permet de réduire le temps nécessaire pour que la nouvelle table soit disponible.
Voici un exemple :
1 2 |
CAS MYSESSION; CASLIB _ALL_ ASSIGN; |
1 2 3 4 |
proc casutil; load casdata="myGAanalytics.sashdat" incaslib="LIBCAS" outcaslib="LIBCAS" casout="myGAanalytics"; run; |
1 2 |
CAS MYSESSION DISCONNECT; CAS MYSESSION TERMINATE; |
1 2 |
CAS MYSESSION; libname LIBCAS cas caslib="LIBCAS"; |
1 2 3 4 |
proc casutil; load casdata="myGAanalytics.sashdat" incaslib="LIBCAS" outcaslib="LIBCAS" casout="myGAanalytics" promote; run; |
1 2 3 4 |
proc cas; table.loadTable / path='myGAanalytics.sashdat', caslib='LIBCAS', casOut={name='myGAanalytics', caslib='LIBCAS', replace=false, promote=true}; run; |
1 2 3 |
proc casutil; list tables incaslib="LIBCAS"; run; |
Promouvoir une table CAS de niveau session en table CAS global
Le code ci-dessous permet de promouvoir une table CAS de votre session utilisateur vers une table globale :
1 2 3 |
proc casutil incaslib="LIBCAS" outcaslib="LIBCAS"; promote casdata="myGAanalytics" casout="myGAanalytics"; quit; |
Est-il possible de remplacer une table Global-scope ?
Les tables CAS à portée globale (Global-scope) ne peuvent pas être remplacées, vous devez toujours supprimer une table promue avant de la remplacer. (source :DropTable is required to replace a global-scope table) Si vous essayez de promouvoir une table promue vous pourriez rencontrer le message d'erreur suivant :NOTE: Executing action 'table.promote'.
ERROR: The target table myGAanalytics of the promotion already exists. Please specify a different name.
ERROR: The action stopped due to errors.
Ma table myGAanalytics était déjà une table CAS globale. Cette erreur est survenue lorsque j'ai voulu remplacer cette table CAS global par une table de portée session, via le code ci-dessous :
1 2 3 |
proc casutil incaslib="LIBCAS" outcaslib="LIBCAS"; promote casdata="myGAanalyticsNEW" casout="myGAanalytics"; quit; |
- Suppression de la table CAS promue myGAanalytics.
- Promote de la table myGAanalyticsNew en renommage en myGAanalytics
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
proc cas; action table.dropTable / caslib="libcas" name="myGAanalytics"; action table.promote / sourceCaslib="libcas" name = "myGAanalyticsNew" targetCaslib = "libcas" target = "myGAanalytics"; action table.tableinfo / caslib="libcas"; run; run; |