Veröffentlicht am :
ETL CREATION_INTERNE

Tabellenerstellung über SELECT mit SAS/ACCESS

Dieser Code ist auch verfügbar auf: English Español Français Deutsch
Wartet auf Validierung
Das Programm beginnt mit dem Bereinigen der vorhandenen Testtabellen (`RDTAB78`, `CRTAB78A`, `CRTAB78B`) in der Bibliothek `mydblib`. Anschließend wird eine Quelltabelle (`mydblib.RDTAB78`) in der Zieldatenbank mithilfe eines DATA Steps mit Werten für `x` und `y` erstellt. Der erste Teil des Beispiels deaktiviert die direkte SQL-Ausführung (`options nodbidirectexec`) und verwendet `PROC SQL`, um zwei Tabellen (`mydblib.CRTAB78A` und `mydblib.CRTAB78B`) zu erstellen, indem Joins und Filter auf SAS©-Seite durchgeführt werden. Diese Tabellen werden dann unter den Namen `noexeA` und `noexeB` in die `WORK`-Bibliothek kopiert. Nach einer Zwischenbereinigung der Tabellen in `mydblib` aktiviert der zweite Teil des Skripts die direkte SQL-Ausführung (`options dbidirectexec`) und erstellt dieselben Tabellen (`mydblib.CRTAB78A` und `mydblib.CRTAB78B`) neu, diesmal jedoch durch Delegieren der Ausführung der `CREATE TABLE AS SELECT`-Abfragen an das zugrunde liegende DBMS. Die Ergebnisse dieses zweiten Ansatzes werden unter den Namen `exeA` und `exeB` in `WORK` kopiert. Schließlich verwendet das Skript `PROC COMPARE`, um die resultierenden Tabellen der beiden Ansätze (`work.noexeA` vs. `work.exeA` und `work.noexeB` vs. `work.exeB`) zu vergleichen, um deren Äquivalenz sicherzustellen. Es wird gezeigt, dass beide Methoden dieselben Ergebnisse liefern, obwohl der 'Pass-Through'-Ansatz je nach DBMS leistungsfähiger sein kann.
Datenanalyse

Type : CREATION_INTERNE


Die Quelldaten (`mydblib.RDTAB78`), die zur Erstellung der Testtabellen verwendet werden, werden zu Beginn des Skripts dynamisch mit einem DATA Step generiert. Obwohl diese Tabellen in einer Bibliothek (`mydblib`) liegen, die so konfiguriert ist, dass sie über SAS/ACCESS auf ein externes Datenbankverwaltungssystem (DBMS) verweist, ist der ursprüngliche Inhalt intern zum Skript. Das Skript testet die Fähigkeit von SAS, Daten in diesem DBMS zu manipulieren und neue Tabellen zu erstellen.

1 Codeblock
PROC DELETE
Erklärung :
Dieser Block löscht die Testtabellen `RDTAB78`, `CRTAB78A` und `CRTAB78B` aus der Bibliothek `mydblib`, falls sie existieren. Dies gewährleistet eine saubere Umgebung für jede Skriptausführung und vermeidet Fehler bei der Erstellung bereits vorhandener Tabellen.
Kopiert!
1 
2PROC DELETE
3DATA=mydblib.RDTAB78;
4 
5RUN;
6PROC DELETE
7DATA=mydblib.CRTAB78A;
8 
9RUN;
10PROC DELETE
11DATA=mydblib.CRTAB78B;
12 
13RUN;
14 
2 Codeblock
DATA STEP Data
Erklärung :
Erstellt eine Tabelle namens `RDTAB78` in der Bibliothek `mydblib`. Diese Tabelle wird mit 100 Beobachtungen gefüllt, wobei die Variablen `x` und `y` Werte von 1 bis 10 annehmen. Diese Tabelle dient als Quelle für spätere `CREATE TABLE AS SELECT`-Operationen.
Kopiert!
1DATA mydblib.RDTAB78;
2DO x = 1 to 10;
3DO y = 1 to 10;
4OUTPUT; END; END; RUN;
3 Codeblock
PROC SQL Data
Erklärung :
Dieser Block deaktiviert die direkte SQL-Ausführung durch das DBMS (`options nodbidirectexec`). Er verwendet `PROC SQL`, um zwei neue Tabellen (`CRTAB78A` und `CRTAB78B`) in `mydblib` aus `RDTAB78` zu erstellen. SAS führt die Logik der `SELECT`-Klausel intern aus, ohne sie an das DBMS zu delegieren. `CRTAB78A` enthält die Variable `y` für alle Beobachtungen, bei denen `x` größer als 5 ist, und `CRTAB78B` enthält die eindeutigen Werte von `y` für dieselben Bedingungen.
Kopiert!
1options nodbidirectexec;
2 
3PROC SQL noerrorstop;
4 
5 create TABLE mydblib.CRTAB78A as
6 select y from mydblib.RDTAB78
7 where x gt 5 order BY y;
8 
9 /* WITH IP TRIGGER */
10 create TABLE mydblib.CRTAB78B as
11 select distinct y from mydblib.RDTAB78
12 where x gt 5 order BY y;
13 
14 QUIT;
4 Codeblock
DATA STEP Data
Erklärung :
Diese DATA Steps kopieren die Tabellen `CRTAB78A` und `CRTAB78B`, die ohne direkte SQL-Ausführung erstellt wurden, in die temporäre Bibliothek `WORK` unter den Namen `noexeA` und `noexeB`. Dies ermöglicht es, sie für einen späteren Vergleich aufzubewahren.
Kopiert!
1 
2DATA work.noexeA;
3SET mydblib.CRTAB78A;
4BY y;
5 
6RUN;
7DATA work.noexeB;
8SET mydblib.CRTAB78B;
9BY y;
10 
11RUN;
12 
5 Codeblock
PROC DELETE
Erklärung :
Dieser Block löscht die Tabellen `CRTAB78A` und `CRTAB78B` aus der Bibliothek `mydblib`. Dieser Schritt ist notwendig, um dieselben Tabellen unmittelbar danach neu erstellen zu können, diesmal jedoch mit aktivierter Option für die direkte SQL-Ausführung.
Kopiert!
1 
2PROC DELETE
3DATA=mydblib.CRTAB78A;
4 
5RUN;
6PROC DELETE
7DATA=mydblib.CRTAB78B;
8 
9RUN;
10 
6 Codeblock
PROC SQL Data
Erklärung :
Dieser Block aktiviert die direkte SQL-Ausführung durch das DBMS (`options dbidirectexec`). Er verwendet `PROC SQL`, um die Tabellen `CRTAB78A` und `CRTAB78B` in `mydblib` neu zu erstellen. Im Gegensatz zum vorherigen Block versucht SAS, die Ausführung der `SELECT`-Klausel direkt an das zugrunde liegende DBMS zu delegieren. Dies kann die Leistung potenziell verbessern, indem die Fähigkeiten des DBMS genutzt werden.
Kopiert!
1options dbidirectexec;
2 
3PROC SQL noerrorstop;
4 
5 create TABLE mydblib.CRTAB78A as
6 select y from mydblib.RDTAB78
7 where x gt 5 order BY y;
8 
9 
10 
11 create TABLE mydblib.CRTAB78B as
12 select distinct y from mydblib.RDTAB78
13 where x gt 5 order BY y;
14 
15 QUIT;
7 Codeblock
DATA STEP Data
Erklärung :
Diese DATA Steps kopieren die Tabellen `CRTAB78A` und `CRTAB78B`, die mit direkter SQL-Ausführung erstellt wurden, in die temporäre Bibliothek `WORK` unter den Namen `exeA` und `exeB`. Diese Tabellen werden für den abschließenden Vergleich verwendet.
Kopiert!
1 
2DATA work.exeA;
3SET mydblib.CRTAB78A;
4BY y;
5 
6RUN;
7DATA work.exeB;
8SET mydblib.CRTAB78B;
9BY y;
10 
11RUN;
12 
8 Codeblock
PROC COMPARE
Erklärung :
Dieser Block verwendet `PROC COMPARE`, um die Äquivalenz zwischen den Tabellen zu überprüfen, die ohne (`noexeA`, `noexeB`) und mit (`exeA`, `exeB`) direkter SQL-Ausführung erstellt wurden. Die Option `ERROR` signalisiert Unterschiede, `BRIEFSUMMARY` liefert eine prägnante Zusammenfassung der Vergleichsergebnisse und `NOTE` zeigt die von der Prozedur generierten Anmerkungen an. Ziel ist es, zu bestätigen, dass beide Methoden zu denselben Datensätzen führen.
Kopiert!
1PROC COMPARE base=work.noexeA
2 comp=work.exeA
3 error briefsummary note;RUN;
4 
5PROC COMPARE base=work.exeB
6 comp=work.exeB
7 error briefsummary note;RUN;
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 : SAS SAMPLE LIBRARY, NAME: createTableAsSelect.sas, TITLE: Sample Programs, PRODUCT: SAS/ACCESS Software for Relational Databases, SYSTEM: z/OS, UNIX, WINDOWS, REF: SAS/ACCESS 9 for Relational Databases: Reference