Frage

Gibt es irgendwelche Vorteile der Verwendung von SQL Pass-Through-Anlage zusammen mit SAS?

War es hilfreich?

Lösung

Obwohl diese Frage zu weit gefasst ist, kann ich eine zu weit gefasste Antwort.

Der Pass-Through-SQL in SAS ermöglicht es Ihnen, mit einer Datenbank direkt zu kommunizieren. Dies wird sehr vorteilhaft, wenn Sie Datenbank-spezifische Funktionen verwenden. Ein Beispiel wäre Oracle Statistik-Funktionen sein. Sie müssen sich keine Sorgen darüber, wie SAS Ihre Codierung behandelt oder Ihre SQL übersetzen.

Darüber hinaus hat es auch ein Vorteil für uns ist, dass Passthrough-SQL auf der SAS-Seite sehr wenig Verarbeitung erfordert. Wenn Sie eine sehr beschäftigt SAS-Box haben, können Sie entscheiden, die Verarbeitungslogik direkt auf die Datenbank zu senden. Dies ist möglich, ohne Passthrough-SQL, aber Sie haben ein höheres Maß an Kontrolle, wenn es verwendet wird.

Dies ist keineswegs eine erschöpfende Liste von Vorteilen, einfach ein paar hohen Vergünstigungen mit Passthrough-SQL. Wenn Sie einen konkreten Anwendungsfall haben, können wir die spezifischen Unterschiede in Codierungstechniken diskutieren.

Andere Tipps

PROC SQL werden versuchen, so viel von der Logik, wie es kann auf die Datenbank, aber es gibt verschiedene Zeiten, dass es nicht passieren kann. Über SAS-Funktionen, die in der Datenbank nicht äquivalent (oder in der SAS / ACCESS-Engine für die Datenbank), verhindern wird die gesamte Abfrage an die Datenbank übergeben. Wenn die Abfrage nicht vollständig an die Datenbank übergeben, dann werden die Daten in SAS gezogen und dort verarbeitet. Je komplizierter Ihre SQL ist, desto wahrscheinlicher wird es in SAS verarbeitet, am Ende wird. Hier ist ein Fall, der einen größeren Unterschied macht, als Sie vielleicht realisieren.

libname db <database> path=dbserver user=... password=...;
proc sql;
   create table db.new as
   select * from db.largedata where flag=1;
quit;

Dies wird eigentlich (zumindest durch SAS 9.1.3) ziehen alle Daten, die Flag = 1 bis zu SAS übereinstimmt und es dann in die Datenbank laden zurück. Es ist diese Millionen von Zeilen wirklich verlangsamt es.

Sie würden expliziten Pass durch viele schneller in diesem Fall finden.

proc sql;
   connect dbase (server=dbserver user=... password=...);
   execute (create table db.new as
   select * from db.largedata where flag=1) as dbase;
   disconnect dbase;
quit;

Ich habe vor kurzem ein Beispiel unter Verwendung von Oracle und eine Tabelle mit etwa 250.000 Zeilen. Der erste Weg dauerte 20 Sekunden, und die zweite Art und Weise bis 2 Sekunden.

Wenn Sie nicht über den Passthrough verwenden, dann müssen Sie alle Datensätze importieren (die Sie für die Verarbeitung benötigen) aus der Datenbank sas. den Passthrough verwenden, können Sie einige Verarbeitung auf der Datenbankseite getan haben und nur die daraus resultierenden Datensätze in sas bringen über. Die Differenz (in Bezug auf die Verarbeitungszeit und Netzwerknutzung) kann sehr, von winzig bis riesig, je nachdem, was Sie tun.

Es gibt Vorteile bei der Verwendung Pass-Through, aber es hängt davon ab, was Sie erreichen wollen. Im Allgemeinen verwende ich Standard proc sql ohne Pass-Through, wenn Abfragen zu tun. Vor kurzem jedoch habe ich es verwendet, um einige gespeicherte Prozeduren zu erzeugen.

proc sql;
    connect to mysql(user = 'xxxxx' pass = 'xxxxx' server = 'localhost');
        execute(set @id = &id.) by mysql;
        execute(select (@lit:=image_text) from quality.links_image_text where image_id = @id) by mysql;
        execute(set @lidx = locate('ninja',@lit)) by mysql;
        execute(set @lidx2 = locate(' ',@lit,@lidx)) by mysql;
        execute(set @lidxd = @lidx2 - @lidx) by mysql;
        execute(set @lf = substr(@lit,@lidx,@lidxd)) by mysql;

        create table asdf as
        select &id. as id, a as ws from connection to mysql
        (select @lf as a)
        ;
    disconnect from mysql;
quit;

Klar, das ist nicht etwas, das außerhalb von Pass-Through getan werden kann (zumindest nicht, dass ich kenne). Also ja ... es hängt alles davon ab, was Sie erreichen wollen.

Einfach gesagt, SQL Pass-Through-Anweisungen geben Ihnen mehr Kontrolle darüber, was an die Datenbank gesendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top