CAS

SAS Viya: Wie man das Erstellen und Löschen von CASLIBs sauber verwaltet

Simon 26/03/2024 5 Aufrufe

Bei der Automatisierung von Aufgaben in SAS© Viya ist es üblich, Makros zur Konfiguration von Datenquellen zu verwenden. Ein klassischer Fall ist das Durchlaufen einer Liste von Authentifizierungsdomänen (z. B. für Oracle), um dynamisch CASLIBs zu erstellen.

Eine Schwierigkeit tritt jedoch häufig auf, wenn dieser Code mehrmals ausgeführt werden muss: die Verwaltung von Duplikaten.

Illustration

Das Problem: Das Henne-Ei-Dilemma

Stellen Sie sich ein Szenario vor, in dem Ihr Makro eine Liste durchläuft, um Verbindungen zu erstellen.

  1. Erste Ausführung: Alles funktioniert einwandfrei. Die CASLIBs werden erstellt.

  2. Zweite Ausführung: Das System gibt einen fatalen Fehler zurück, da die CASLIBs bereits vorhanden sind (ERROR: Duplicate Caslib).

Die natürliche Reaktion ist, eine Anweisung zum Löschen (DROP) der Bibliothek hinzuzufügen, bevor sie neu erstellt wird. Dies schafft jedoch ein neues Problem: Bei der allerersten Ausführung oder wenn die Sitzung neu ist, existiert die Bibliothek noch nicht. Ergebnis? Ein Fehler im Protokoll (ERROR: The caslib ... does not exist).

Obwohl dieser Fehler ignoriert werden kann, verschmutzt er das Protokoll (Log) und kann echte Probleme verschleiern. Das Ziel ist es, einen „sauberen“ Code zu haben, der fehlerfrei ausgeführt wird, unabhängig vom Ausgangszustand.

Die Lösung: Prüfen vor dem Handeln

Die robusteste Methode, dieses Problem zu umgehen, ist die Verwendung der Funktion CLIBEXIST.

Diese Funktion ermöglicht es, die Existenz einer CASLIB in der aktuellen Sitzung zu überprüfen, bevor eine Aktion versucht wird. Wenn die Bibliothek existiert, wird sie gelöscht, um sie sauber neu zu erstellen. Wenn sie nicht existiert, wird direkt mit der Erstellung fortgefahren.

Code-Implementierung

So integrieren Sie diese Logik in Ihre Makro-Schleife. Der Trick besteht darin, die Anweisung DROP in eine %IF-Bedingung zu packen, die CLIBEXIST aufruft.

1/* Exemple de macro boucle pour gérer les connexions Oracle */
2%macro ora_libs;
3 %local i authdomain schema;
4
5 /* Boucle sur la liste des domaines d'authentification */
6 %DO i=1 %to %sysfunc(countw(&auth_list));
7 %let authdomain = %scan(&auth_list, &i);
8 %let schema = &authdomain.;
9 
10 /* C'est ici que la magie opère : */
11 /* On vérifie si la CASLIB existe déjà dans la session active (ici 'mysession') */
12
13 %IF %sysfunc(clibexist(mysession, &schema)) %THEN %DO;
14 caslib &schema. drop;
15 %END;
16 
17 /* Création de la CASLIB propre et sans erreur */
18 caslib &schema. datasource=(
19 srctype="oracle",
20 authdomain=&authdomain.
21 path=&path.
22 schema=&schema.
23 );
24 %END;
25%mend;

Warum ist das wichtig?

Die Verwendung von CLIBEXIST macht Ihren Code idempotent. Das bedeutet, dass Sie ihn einmal oder hundertmal ausführen können, das Endergebnis wird dasselbe sein (die Bibliotheken sind konfiguriert) und vor allem bleibt Ihr Ausführungsprotokoll grün, ohne beunruhigende rote Fehlermeldungen.

Dies ist eine kleine Änderung, die die Qualität und Wartbarkeit Ihrer SAS© Viya-Programme erheblich verbessert.