CAS

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

Simon 24/05/2023 7 vistas

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

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

Die Herausforderung: Laden von SAS©-Daten in CAS mit DVR

Der Standardansatz zum Laden einer SAS©-Tabelle (auf dem Compute Server) auf den CAS-Server beinhaltet typischerweise die 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 ist, dass die LOAD DATA-Anweisung von PROC CASUTIL keine native Option bietet, um das deafaultmemoryFormat zu definieren. Daher wird die Tabelle im Standardformat geladen, was mehr Speicher als nötig verbraucht.

Die vermeintlich gute Idee: Zweistufiges Laden

Angesichts dieser Einschränkung besteht eine häufig versuchte Umgehung darin:

  1. Die Tabelle normal zu laden (Standardformat).

  2. Die table.copyTable-Aktion zu verwenden, um eine komprimierte Kopie in DVR zu erstellen.

  3. Die ursprüngliche Tabelle zu löschen.

Obwohl diese Methode funktioniert, ist sie ineffizient („klobig“). Sie verdoppelt vorübergehend den Speicherverbrauch und erhöht unnötig die E/A-Operationen.

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

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 beste Vorgehensweise die Verwendung der UPLOAD-Anweisung innerhalb von PROC CAS.

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

Vorteile dieser Methode

  1. Direkt: Keine temporäre Tabelle erforderlich.

  2. DVR-Komprimierung: Sofortige Anwendung der Duplikat-Reduzierung.

  3. VARCHAR-Konvertierung: Möglichkeit, feste Zeichenketten im laufenden Betrieb in VARCHAR zu konvertieren, was eine zusätzliche Reduzierung des Speicherplatzes bietet.

Note :
Code-Beispiel
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 UPLOAD-Anweisung in PROC CAS fungiert als direkte Brücke. Indem Sie den physischen Pfad der .sas©7bdat-Datei angeben (über %sysfunc(pathname(work))), weisen Sie den CAS-Server an, die Datei zu lesen und sie sofort gemäß Ihren casout-Spezifikationen zu strukturieren.

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

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