Publié le :

Mise à jour du type de serveur d'un processus stocké

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
La macro `%mm_updatestpservertype` est conçue pour modifier le type de serveur d'un processus stocké SAS© Viya 4 existant. Elle requiert deux paramètres : `target` (le chemin complet vers le processus stocké) et `type` (soit 'WKS' pour un serveur Workspace, soit 'STP' pour un serveur Stored Process).
L'exécution de la macro se déroule en plusieurs étapes :
1. Vérification d'existence : Un bloc `DATA _NULL_` utilise la fonction `metadata_pathobj` pour interroger les métadonnées SAS© afin de vérifier si un processus stocké existe bien au chemin `target` et pour en extraire l'URI et le type. Si l'objet n'est pas identifié comme un processus stocké, la macro s'arrête avec un message d'avertissement.
2. Détermination du nouveau type : Une logique macro conditionnelle `%if %then %let` est utilisée pour traduire le paramètre `type` en une valeur appropriée ('Wks' ou 'Sps') pour les métadonnées.
3. Mise à jour des métadonnées : Un second bloc `DATA _NULL_` parcourt les associations de métadonnées (`Notes`) de l'URI du processus stocké à l'aide de `metadata_getnasn` et `metadata_getattr`. Lorsque la note 'Stored Process' est trouvée, la fonction `METADATA_SETATTR` est utilisée pour modifier son attribut 'StoredText'. Cet attribut contient une structure XML qui est mise à jour pour inclure le `LogicalServerType` choisi. Le paramètre `OtherAllowed="false"` est également défini.
4. Signalement du résultat : Enfin, la macro affiche un message de succès ou d'erreur dans le log SAS©, basé sur le résultat de l'opération de mise à jour des métadonnées. Cette opération est considérée comme administrative car elle modifie la configuration des processus stockés au niveau du serveur de métadonnées.
Analyse des données

Type : AUCUNE


La macro n'utilise pas de données SAS (tables ou datasets) comme source. Elle opère directement sur le système de métadonnées de SAS, interrogeant et modifiant les définitions des processus stockés. Par conséquent, il n'y a pas de dépendance à des données externes ou des bibliothèques spécifiques pour son exécution fonctionnelle.

1 Bloc de code
DATA STEP
Explication :
Ce bloc `DATA _NULL_` est utilisé pour interagir avec le serveur de métadonnées SAS. La fonction `metadata_pathobj` tente de localiser le processus stocké spécifié par le paramètre `target` et d'en extraire son type (`cmtype`) et son URI (`stpuri`). Ces informations sont ensuite stockées dans des variables macro locales. Une vérification est effectuée pour s'assurer que l'objet trouvé est bien un 'StoredProcess'. Si ce n'est pas le cas, un avertissement est émis et la macro se termine.
Copié !
1DATA _null_;
2 LENGTH type uri $256;
3 rc=metadata_pathobj("","&target",'StoredProcess',type,uri);
4 call symputx('cmtype',type,'l');
5 call symputx('stpuri',uri,'l');
6RUN;
7%IF &cmtype ne ClassifierMap %THEN %DO;
8 %put %str(WARN)ING: No Stored Process found at ⌖
9 %return;
10%END;
2 Bloc de code
MACRO LOGIQUE
Explication :
Ce simple bloc logique macro détermine la valeur du type de serveur à définir. Si le paramètre `type` est 'WKS', la variable macro `newtype` est définie à 'Wks'. Sinon, elle est définie à 'Sps'. Cette variable sera utilisée ultérieurement pour construire la chaîne XML de mise à jour des métadonnées.
Copié !
1%IF &type=WKS %THEN %let newtype=Wks;
2%ELSE %let newtype=Sps;
3 
3 Bloc de code
DATA STEP
Explication :
Ce second bloc `DATA _NULL_` est le cœur de la logique de mise à jour. Il itère sur les notes associées à l'URI du processus stocké (`stpuri`) en utilisant `metadata_getnasn`. Il recherche spécifiquement la note dont le nom est 'Stored Process'. Une fois trouvée, la fonction `METADATA_SETATTR` est utilisée pour modifier son attribut 'StoredText'. Cet attribut est mis à jour avec une nouvelle chaîne XML qui définit le `LogicalServerType` du processus stocké en utilisant la variable macro `&newtype` déterminée précédemment. Le succès de cette opération est enregistré dans la variable macro `result`.
Copié !
1DATA _null_;
2 LENGTH uri name value $256;
3 n=1;
4 DO while(metadata_getnasn("&stpuri","Notes",n,uri)>0);
5 n+1;
6 rc=metadata_getattr(uri,"Name",name);
7 IF name='Stored Process' THEN DO;
8 rc = METADATA_SETATTR(uri,'StoredText'
9 ,'<?xml version="1.0" encoding="UTF-8"?>'
10 !!'<StoredProcess><ServerContext LogicalServerType="'!!"&newtype"
11 !!'" OtherAllowed="false"/><ResultCapabilities Package="false" '
12 !!' Streaming="true"/><OutputParameters/></StoredProcess>');
13 IF rc=0 THEN call symputx('result','SUCCESS');
14 stop;
15 END;
16 END;
17RUN;
4 Bloc de code
MACRO LOGIQUE
Explication :
Ce bloc final est une instruction macro conditionnelle qui affiche un message dans le log SAS. Si la variable macro `result` est 'SUCCESS', un message de confirmation est affiché, indiquant que le type de serveur du processus stocké a été modifié. Sinon, un message d'erreur général est émis, signalant un problème lors de l'exécution de la macro.
Copié !
1%IF &RESULT=SUCCESS %THEN %put NOTE: SUCCESS: STP &target changed to &type type;
2%ELSE %put %str(ERR)OR: Issue with &sysmacroname;
3 
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.
Informations de Copyright : Les informations de copyright sont détectées dans les fichiers référencés : 'Copyright (c) 2001-2006 Rodney Sparapani' (sous licence GNU General Public License) pour _version.sas, et 'Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de' (faisant partie de SASUnit) pour macro_without_brief_tag.sas. Ces références sont incluses dans le bloc d'aide de la macro principale.


Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« La macro %mm_updatestpservertype illustre une technique d'administration avancée : la modification directe de la configuration d'exécution d'un Stored Process. Bien que le titre mentionne SAS Viya 4 par erreur, le code utilise l'Open Metadata Architecture (OMA) propre à SAS 9.x. En manipulant l'attribut StoredText, vous intervenez directement sur la façon dont l'Object Spawner va instancier le moteur SAS pour répondre à une requête utilisateur.

Recommandations et points de vigilance
WKS vs STP (SPS) : Le choix du serveur est crucial pour les performances et les fonctionnalités. Le mode WKS (Workspace Server) est idéal pour les traitements intensifs avec des sessions dédiées, tandis que le mode STP (ou Stored Process Server) utilise un pool de sessions multi-utilisateurs, offrant une réactivité accrue pour les requêtes légères et fréquentes.

Risque lié à l'écrasement de StoredText : La fonction METADATA_SETATTR est ici utilisée pour injecter une chaîne XML complète. Attention : cette méthode écrase l'intégralité du contenu de l'attribut. Si votre Stored Process possédait des configurations spécifiques (capacités de résultats personnalisées, paramètres d'entrée, etc.), elles seront perdues. Une approche d'expert consisterait à lire le flux XML existant et à n'y modifier que l'attribut LogicalServerType via des fonctions de manipulation de chaînes ou de parseur XML.

Persistance des métadonnées : Contrairement à une modification via la SAS Management Console, les changements effectués par METADATA_SETATTR sont immédiats et définitifs dans le référentiel. Je recommande de toujours effectuer un export (SPK) de l'objet avant de lancer ce type de macro-automatisation. »