CAS

Wie ruft man die Speichergröße aller Tabellen einer CASLIB ab?

Simon 24/08/2024 3 vistas

Die Arbeit mit SAS© Viya und der Engine CAS (Cloud Analytic Services) erfordert oft die Überwachung des Speicherbedarfs Ihrer Daten. Eine häufig gestellte Frage lautet: Wie erhält man Speicherdetails (Größe, Speichernutzung) für alle Tabellen einer Bibliothek auf einmal?

Wenn Sie versucht haben, Wildcards wie % in der Aktion table.tabledetails zu verwenden, sind Sie wahrscheinlich auf einen Fehler gestoßen. Dieser Artikel erklärt Ihnen, warum und bietet Ihnen eine robuste Lösung in CASL, um diese Informationen in einem einzigen Bericht zu konsolidieren.

Note :
Die Standardaktion zum Abrufen der Größe einer Tabelle ist table.tabledetails. Sie ist jedoch darauf ausgelegt, eine bestimmte Tabelle nach der anderen zu analysieren. Der folgende Code wird fehlschlagen, da die Option name keine generischen Muster akzeptiert:
1/* Ce code ne fonctionnera pas */
2PROC CAS;
3 TABLE.tabledetails / name="%" caslib="MaLib";
4QUIT;
Um diese Einschränkung zu umgehen, ist ein programmatischer Ansatz erforderlich:

Alle verfügbaren Tabellen auflisten.

Diese Liste durchlaufen.

Für jede tabledetails ausführen.

Die Ergebnisse konsolidieren.
Note :
Die effizienteste Lösung verwendet die CAS-Skriptsprache (CASL). Hier ist das vollständige Verfahren, inspiriert von einer von der SAS©-Community validierten Lösung.

1. Datenvorbereitung (Optional)
Um den Code zu testen, laden wir zunächst einige Beispieldatentabellen (Cars, Class, Baseball) in die casuser-Bibliothek.
1cas mycas;
2LIBNAME casuser cas caslib=casuser;
3 
4PROC CASUTIL;
5 load DATA=sashelp.cars outcaslib="casuser" casOut="cars" replace;
6 load DATA=sashelp.class outcaslib="casuser" casOut="class" replace;
7 load DATA=sashelp.baseball outcaslib="casuser" casOut="baseball" replace;
8RUN;

Das Konsolidierungsskript

Das untenstehende Skript führt den Vorgang in einem einzigen PROC CAS-Schritt aus. Es iteriert über jede Tabelle, ruft deren Details ab und verwendet einen Trick mit datastep.runcode, um die Ergebnisse in einer endgültigen Tabelle namens allResults zu stapeln (anzuhängen).

1PROC CAS;
2 /* 1. Récupérer la liste de toutes les tables de la librairie */
3 TABLE.tableinfo RESULT=rc / caslib="casuser";
4
5 /* Variable pour gérer la syntaxe d'ajout (append) après la première itération */
6 fragment=';';
7
8 /* 2. Boucler sur chaque table trouvée */
9 DO TABLE over rc["TableInfo"][,"Name"];
10
11 /* Récupérer les détails de la table courante */
12 TABLE.tabledetails RESULT=RESULT / name=TABLE caslib="casuser";
13
14 /* Sauvegarder le résultat temporaire dans une table CAS */
15 saveresult RESULT caslib="casuser" casout=TABLE;
16
17 /* 3. Générer et exécuter du code Data Step dynamiquement */
18 /* Cela permet d'ajouter le nom de la table source et de consolider les données */
19 code = "data casuser.allResults" || fragment ||
20 " set casuser." || TABLE || ";" ||
21 " length Data varchar(100);" ||
22 " Data='" || table || "';" || /* Ajoute une colonne avec le nom de la table */
23 " run;";
24
25 datastep.runcode / code=code;
26
27 /* Changer le fragment pour activer l'option append pour les tours suivants */
28 fragment='(append=yes);';
29 END;
30QUIT;
table.tableinfo: Diese Aktion erstellt eine Ergebnistabelle (gespeichert in der Variable rc), die eine Liste aller in der Bibliothek vorhandenen Tabellen enthält.

Die DO-Schleife: Sie durchläuft die Spalte "Name" der zuvor abgerufenen Liste.

saveresult: Wandelt das In-Memory-Ergebnis der tabledetails-Aktion in eine echte temporäre physische CAS-Tabelle um.

Dynamische Codegenerierung (code=...): Dies ist der Kern des Tricks. Es wird eine Zeichenkette mit DATA-Step-Code erstellt.

Beim ersten Durchlauf wird die Tabelle allResults erstellt.

Bei den folgenden Durchläufen wird (append=yes) hinzugefügt, um die vorherigen Daten nicht zu überschreiben.

datastep.runcode: Führt den dynamisch generierten SAS©-Code aus.

Nach Ausführung dieses Skripts erhalten Sie eine einzige Tabelle namens casuser.allResults.

Diese Tabelle enthält detaillierte Metadaten (komprimierte Größe, Blockgröße, Index usw.) für alle Ihre Tabellen, mit einer zusätzlichen Spalte Data, die den Namen der Quelltabelle angibt. Sie können diese Tabelle dann verwenden, um Überwachungsberichte oder Dashboards zur Nutzung Ihres CAS-Speicherplatzes zu erstellen.