L'erreur survient généralement à cause d'une confusion sur la durée de vie d'une session CAS.
Regardez ce scénario typique qui échoue :
Vous chargez une table MaTable dans une session (disons Session A).
Vous lancez un nouveau script commençant par cas MySession;.
Vous tentez de promouvoir MaTable.
Pourquoi ça plante ?
L'instruction cas MySession; démarre souvent une nouvelle session (Session B). La Session B est totalement isolée de la Session A. Elle ne peut pas "voir" MaTable qui se trouve dans la mémoire de la Session A. Pour promote, la table n'existe tout simplement pas.
Plutôt que d'utiliser PROC CASUTIL de manière séquentielle (qui peut masquer des changements de session), l'approche recommandée par les experts (comme SASJedi) est d'utiliser un bloc PROC CAS. Cela permet de gérer la suppression de l'ancienne version globale et la promotion de la nouvelle en une seule transaction logique.
De plus, selon votre version de Viya™, l'action à utiliser diffère légèrement pour copier et promouvoir une table simultanément (par exemple pour la renommer au passage).
Note :
Le Code Universel
Voici le script optimisé qui gère le nettoyage et la promotion en tenant compte de votre version de Viya™.
proc cas;
/* 1. Nettoyage : On supprime l'ancienne version globale si elle existe */
/* L'option quiet=TRUE évite une erreur si la table n'existe pas encore */
table.dropTable /
caslib="Public"
name="GL_PERIODS_Global" /* Nom final de la table publique */
quiet=TRUE;
/* 2. Promotion : Copie de la table de session vers une table globale */
/* --- Option A : Pour Viya 3.4 et 3.5 --- */
/* On utilise table.partition comme astuce pour copier + promouvoir */
table.partition /
table={caslib="Public", name="GL_PERIODS_Local"} /* Table source (session) */
casout={caslib="Public", name="GL_PERIODS_Global", promote=TRUE};
/* --- Option B : Pour Viya 2020.1 (Viya 4) et plus récents --- */
/* L'action copyTable est plus explicite et recommandée */
/*
table.copyTable /
table={caslib="Public", name="GL_PERIODS_Local"}
casout={caslib="Public", name="GL_PERIODS_Global", promote=TRUE};
*/
quit;
1
PROC CAS;
2
/* 1. Nettoyage : On supprime l'ancienne version globale si elle existe */
3
/* L'option quiet=TRUE évite une erreur si la table n'existe pas encore */
4
TABLE.dropTable /
5
caslib="Public"
6
name="GL_PERIODS_Global"/* Nom final de la table publique */
7
quiet=TRUE;
8
9
/* 2. Promotion : Copie de la table de session vers une table globale */
10
11
/* --- Option A : Pour Viya 3.4 et 3.5 --- */
12
/* On utilise table.partition comme astuce pour copier + promouvoir */
Pourquoi cette méthode fonctionne mieux ?
Atomicité : Tout se passe dans la même procédure.
Renommage : Contrairement à un simple promote, cette méthode (partition ou copyTable) crée une nouvelle copie physique. Cela vous permet de garder votre table de travail (_Local) intacte tout en publiant une version propre (_Global).
Gestion des versions : En Viya™ 3.5, l'action table.partition était souvent utilisée détournée de sa fonction première pour réaliser cette copie-promotion efficace.
3 Bonnes Pratiques à retenir
Un seul script, une seule session : Assurez-vous que le chargement des données (Load) et leur promotion (Promote) se font dans le même flux d'exécution ou la même session CAS.
Vérifiez l'existence : Avant de promouvoir, assurez-vous que votre table source est bien en mémoire ("Loaded"). Si votre session a expiré (timeout), la table a disparu de la RAM.
Connexion par UUID : Si vous devez absolument récupérer une table laissée dans une session orpheline, vous devez vous reconnecter à cette session précise en utilisant son UUID :
cas mysess uuid="ca683ddf-fe18-3c48-a04e-45718220976d";
Important Disclaimer
The codes and examples provided on WeAreCAS.eu are for educational purposes. It is imperative not to blindly copy-paste them into your production environments. The best approach is to understand the logic before applying it. We strongly recommend testing these scripts in a test environment (Sandbox/Dev). WeAreCAS accepts no responsibility for any impact or data loss on your systems.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. WeAreCAS is an independent community site and is not affiliated with SAS Institute Inc.
This site uses technical and analytical cookies to improve your experience.
Read more.