CAS

CAS-Speicheroptimierung: Das DVR-Format beim Laden von Daten beherrschen

Simon 24/05/2023 6 Aufrufe

In SAS© Viya-Umgebungen ist die Verwaltung des RAM-Speichers von entscheidender Bedeutung. Mit zunehmendem Datenvolumen wird der Einsatz intelligenter Speicherstrategien unerlässlich. Eine der effektivsten Methoden ist die Verwendung des Parameters deafaultmemoryFormat="DVR" (Duplicate Value Reduction), der die Größe von In-Memory-Tabellen durch Komprimierung wiederholter Werte erheblich reduzieren kann.

Allerdings kann die Anwendung dieses Formats beim Laden von Daten aus einer klassischen SAS©-Bibliothek (wie WORK) nach CAS technisch verwirrend sein. Dieser Artikel untersucht die Einschränkungen klassischer Methoden und stellt die optimale Lösung vor.

Die Herausforderung: SAS©-Daten mit DVR nach CAS laden

Der Standardansatz zum Laden einer SAS©-Tabelle (die sich auf dem Compute Server befindet) auf den CAS-Server besteht in der Regel in der Verwendung von PROC CASUTIL.

1/* Méthode standard - ne permet pas l'optimisation DVR directe */
2PROC CASUTIL;
3 load DATA=maTableWork casout="maTableCAS";
4QUIT;

Das Problem liegt darin, dass die Anweisung LOAD DATA von PROC CASUTIL keine native Option zur Definition des deafaultmemoryFormat bietet. Folglich wird die Tabelle mit dem Standardformat geladen, was mehr Speicher als nötig verbraucht.

Die falsche gute Idee: Das zweistufige Laden

Angesichts dieser Einschränkung besteht eine oft versuchte Umgehungslösung darin, ...

  1. Tabelle normal laden (Standardformat).

  2. Verwenden Sie die Aktion table.copyTable, um eine komprimierte Kopie in DVR zu erstellen.

  3. Die Originaltabelle löschen.

Obwohl funktionsfähig, ist diese Methode ineffizient ("schwerfällig"). Sie verdoppelt vorübergehend die Speichernutzung und erhöht unnötigerweise die Ein-/Ausgabe.

Die optimale Lösung: Die UPLOAD-Anweisung in PROC CAS

Die beste Vorgehensweise, um Daten direkt aus der SAS©-Umgebung (Compute Server) in CAS zu laden und dabei das DVR-Format in einem einzigen Schritt anzuwenden, ist die Verwendung der Anweisung UPLOAD innerhalb der PROC CAS.

Die Anweisung UPLOAD ermöglicht nicht nur die Dateiübertragung, sondern bietet auch eine granulare Kontrolle über die Ausgabeparameter (casout) und die Importoptionen.

Vorteile dieser Methode

  1. Direkt: Keine temporäre Tabelle nötig.

  2. DVR-Komprimierung: Sofortige Duplikatreduzierung.

  3. VARCHAR-Konvertierung: Möglichkeit, feste Zeichenketten zur Laufzeit in VARCHAR zu konvertieren, was eine zusätzliche Speicherplatzersparnis bietet.

Note :
Codebeispiel
So laden Sie eine Tabelle aus der WORK-Bibliothek direkt im DVR-Format:
1PROC CAS;
2 /* Nettoyage préalable si nécessaire */
3 ACTION TABLE.droptable / name="somedata" quiet=true;
4
5 /* Chargement optimisé */
6 upload /
7 /* Récupération dynamique du chemin physique de la table SAS */
8 path="%sysfunc(pathname(work))/somedata.sas7bdat"
9
10 /* Configuration de la table de sortie CAS */
11 casout={
12 caslib="casuser"
13 name="somedata"
14 promote=true, /* Rendre la table globale */
15 memoryformat="DVR", /* Activation de la compression DVR */
16 replication=0 /* Ajuster la réplication selon les besoins */
17 }
18
19 /* Options d'importation supplémentaires */
20 importoptions={
21 filetype="BASESAS",
22 varcharConversion=17 /* Convertit les CHAR > 16 octets en VARCHAR */
23 }
24 ;
25QUIT;

Warum funktioniert das besser?

Die Anweisung UPLOAD in PROC CAS fungiert als direkte Brücke. Indem Sie den physischen Pfad der Datei .sas©7bdat (über %sysfunc(pathname(work))) angeben, fordern Sie den CAS-Server auf, die Datei zu lesen und sie sofort gemäß Ihren casout-Spezifikationen zu strukturieren.

Die Option varcharConversion ist eine ideale Ergänzung zum DVR. Während der DVR wiederholte Werte komprimiert, reduziert die Umstellung auf den Typ VARCHAR den für Zeichenfolgen variabler Länge zugewiesenen Speicherplatz und maximiert so die Speichereffizienz.

Die Verwendung des Formats DVR ist ein mächtiger Hebel zur Optimierung Ihrer SAS© Viya-Umgebung. Um es effizient aus bestehenden SAS©-Daten zu implementieren, verzichten Sie auf die Zwischenschritte von PROC CASUTIL zugunsten der Anweisung UPLOAD in PROC CAS. Sie gewinnen an Leistung, Code-Einfachheit und Speicherplatz.