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):
CAS MYSESSION;
CASLIB _ALL_ ASSIGN;
Chargement de la table dans CAS (table myGAanalytics)
proc casutil;
load casdata="myGAanalytics.sashdat" incaslib="LIBCAS"
outcaslib="LIBCAS" casout="myGAanalytics";
run;
viya-table-cas-session-scope Si je termine ma session, via le code ci-dessous, ma table n'est plus accessible :
CAS MYSESSION DISCONNECT;
CAS MYSESSION TERMINATE;
Exemple de création d'une table Global-scope :
CAS MYSESSION;
libname LIBCAS cas caslib="LIBCAS";
Pour charger une table dans CAS est la rendre "globale" il faut ajouter l'option promote :
proc casutil;
load casdata="myGAanalytics.sashdat" incaslib="LIBCAS"
outcaslib="LIBCAS" casout="myGAanalytics" promote;
run;
Il est également possible de soumettre une "cas action" pour charger cette table :
proc cas;
table.loadTable / path='myGAanalytics.sashdat', caslib='LIBCAS', casOut={name='myGAanalytics', caslib='LIBCAS', 
replace=false, promote=true};
run;
Vérifions maintenant la portée de cette table, en utilisant le code ci-dessous :
proc casutil;
     list tables incaslib="LIBCAS";
run;
cas-table-promote-dans-sas-viya 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 : cas-viya-table-promote-et-session-globale

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 :
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 :
proc casutil incaslib="LIBCAS" outcaslib="LIBCAS";
promote casdata="myGAanalyticsNEW" casout="myGAanalytics";
quit;
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 :
  • Suppression de la table CAS promue myGAanalytics.
  • Promote de la table myGAanalyticsNew en renommage en  myGAanalytics
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;

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.