Veröffentlicht am :

Aktualisierung des Servertyps eines gespeicherten Prozesses

Dieser Code ist auch verfügbar auf: English Español Français
Attention : Dieser Code erfordert Administratorrechte.
Das Makro `%mm_updatestpservertype` wurde entwickelt, um den Servertyp eines bestehenden SAS© Viya 4 Stored Process zu ändern. Es erfordert zwei Parameter: `target` (den vollständigen Pfad zum gespeicherten Prozess) und `type` (entweder 'WKS' für einen Workspace-Server oder 'STP' für einen Stored Process-Server).
Die Ausführung des Makros erfolgt in mehreren Schritten:
1. Existenzprüfung: Ein `DATA _NULL_`-Block verwendet die Funktion `metadata_pathobj`, um SAS©-Metadaten abzufragen und zu überprüfen, ob ein gespeicherter Prozess unter dem `target`-Pfad existiert, und um dessen URI und Typ zu extrahieren. Wird das Objekt nicht als gespeicherter Prozess identifiziert, wird das Makro mit einer Warnmeldung beendet.
2. Bestimmung des neuen Typs: Eine bedingte Makrologik `%if %then %let` wird verwendet, um den `type`-Parameter in einen geeigneten Wert ('Wks' oder 'Sps') für die Metadaten zu übersetzen.
3. Metadatenaktualisierung: Ein zweiter `DATA _NULL_`-Block durchläuft die Metadatenassoziationen (`Notes`) der URI des gespeicherten Prozesses mithilfe von `metadata_getnasn` und `metadata_getattr`. Wenn die Notiz 'Stored Process' gefunden wird, wird die Funktion `METADATA_SETATTR` verwendet, um ihr Attribut 'StoredText' zu ändern. Dieses Attribut enthält eine XML-Struktur, die aktualisiert wird, um den gewählten `LogicalServerType` einzuschließen. Der Parameter `OtherAllowed="false"` wird ebenfalls gesetzt.
4. Ergebnisberichterstattung: Schließlich zeigt das Makro eine Erfolgs- oder Fehlermeldung im SAS©-Protokoll an, basierend auf dem Ergebnis des Metadatenaktualisierungsvorgangs. Dieser Vorgang wird als administrativ angesehen, da er die Konfiguration der gespeicherten Prozesse auf der Metadatenserverebene ändert.
Datenanalyse

Type : AUCUNE


Das Makro verwendet keine SAS-Daten (Tabellen oder Datensätze) als Quelle. Es arbeitet direkt mit dem SAS-Metadatensystem, indem es die Definitionen der gespeicherten Prozesse abfragt und ändert. Folglich gibt es keine Abhängigkeit von externen Daten oder spezifischen Bibliotheken für seine funktionale Ausführung.

1 Codeblock
DATA STEP
Erklärung :
Dieser `DATA _NULL_`-Block wird verwendet, um mit dem SAS-Metadatenserver zu interagieren. Die Funktion `metadata_pathobj` versucht, den durch den `target`-Parameter angegebenen gespeicherten Prozess zu lokalisieren und dessen Typ (`cmtype`) und URI (`stpuri`) zu extrahieren. Diese Informationen werden dann in lokalen Makrovariablen gespeichert. Es wird überprüft, ob das gefundene Objekt ein 'StoredProcess' ist. Ist dies nicht der Fall, wird eine Warnung ausgegeben und das Makro beendet.
Kopiert!
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 Codeblock
MACRO LOGIQUE
Erklärung :
Dieser einfache Makrologik-Block bestimmt den Wert des festzulegenden Servertyps. Ist der `type`-Parameter 'WKS', wird die Makrovariable `newtype` auf 'Wks' gesetzt. Andernfalls wird sie auf 'Sps' gesetzt. Diese Variable wird später verwendet, um die XML-Zeichenfolge für die Metadatenaktualisierung zu erstellen.
Kopiert!
1%IF &type=WKS %THEN %let newtype=Wks;
2%ELSE %let newtype=Sps;
3 
3 Codeblock
DATA STEP
Erklärung :
Dieser zweite `DATA _NULL_`-Block ist das Herzstück der Aktualisierungslogik. Er iteriert über die dem URI des gespeicherten Prozesses (`stpuri`) zugeordneten Notizen mithilfe von `metadata_getnasn`. Er sucht speziell nach der Notiz mit dem Namen 'Stored Process'. Sobald diese gefunden wurde, wird die Funktion `METADATA_SETATTR` verwendet, um ihr Attribut 'StoredText' zu ändern. Dieses Attribut wird mit einer neuen XML-Zeichenfolge aktualisiert, die den `LogicalServerType` des gespeicherten Prozesses unter Verwendung der zuvor bestimmten Makrovariable `&newtype` definiert. Der Erfolg dieser Operation wird in der Makrovariable `result` gespeichert.
Kopiert!
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 Codeblock
MACRO LOGIQUE
Erklärung :
Dieser abschließende Block ist eine bedingte Makroanweisung, die eine Meldung im SAS-Protokoll anzeigt. Wenn die Makrovariable `result` den Wert 'SUCCESS' hat, wird eine Bestätigungsmeldung angezeigt, die angibt, dass der Servertyp des gespeicherten Prozesses geändert wurde. Andernfalls wird eine allgemeine Fehlermeldung ausgegeben, die ein Problem bei der Ausführung des Makros signalisiert.
Kopiert!
1%IF &RESULT=SUCCESS %THEN %put NOTE: SUCCESS: STP &target changed to &type type;
2%ELSE %put %str(ERR)OR: Issue with &sysmacroname;
3 
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Urheberrechtsinformationen werden in den referenzierten Dateien erkannt: 'Copyright (c) 2001-2006 Rodney Sparapani' (unter GNU General Public License) für _version.sas und 'Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de' (Teil von SASUnit) für macro_without_brief_tag.sas. Diese Referenzen sind im Hilfeblock des Hauptmakros enthalten.


Banner
Expertenrat
Expert
Simon
Expert SAS et fondateur.
« Das Makro %mm_updatestpservertype demonstriert eine fortgeschrittene administrative Technik: die direkte Modifikation der Ausführungskonfiguration eines Stored Process. Obwohl die Beschreibung fälschlicherweise SAS Viya 4 erwähnt, nutzt der Code die für SAS 9.x spezifische Open Metadata Architecture (OMA). Durch die Manipulation des Attributs StoredText steuern Sie direkt, wie der Object Spawner die SAS-Engine instanziiert, um eine Benutzeranfrage zu bedienen.

Strategische Empfehlungen & Best Practices
WKS vs. STP (SPS): Die Wahl des Servertyps ist entscheidend für die Performance. Der WKS (Workspace Server) ist ideal für rechenintensive Aufgaben mit dedizierten Sitzungen, während der STP (Stored Process Server) einen Pool von Mehrbenutzersitzungen nutzt, was schnellere Antwortzeiten für häufige, leichtgewichtige Anfragen ermöglicht.

Das Risiko des Überschreibens von StoredText: Die Funktion METADATA_SETATTR injiziert hier eine fest codierte XML-Zeichenfolge. Achtung: Diese Methode überschreibt den gesamten Inhalt des Attributs. Falls Ihr Stored Process spezifische Konfigurationen besaß (z. B. spezielle Ergebnisfunktionen oder Eingabeparameter), gehen diese verloren. Ein Expertenansatz bestünde darin, das vorhandene XML zuerst zu lesen und nur das Attribut LogicalServerType gezielt zu ändern.

Metadaten-Persistenz: Im Gegensatz zu Änderungen über die SAS Management Console sind Modifikationen via METADATA_SETATTR sofort und dauerhaft im Repository wirksam. Führen Sie immer einen Metadaten-Export (SPK) des Objekts durch, bevor Sie Automatisierungsmakros ausführen, die Attribute verändern. »