2009-03-11 17 views
3

Gibt es Vorteile bei der Verwendung der SQL Passthrough-Funktion zusammen mit SAS?SQl PAssthrough in SAS

+0

es gibt keine näheren Informationen zu beantworten –

Antwort

4

Obwohl diese Frage übermäßig breit ist, kann ich eine übermäßig breite Antwort geben.

Mit der Pass-Through-SQL in SAS können Sie direkt mit einer Datenbank kommunizieren. Dies wird sehr vorteilhaft, wenn Sie datenbankspezifische Funktionen verwenden. Ein Beispiel wären Oracles Statistikfunktionen. Sie müssen sich keine Gedanken darüber machen, wie SAS Ihre Codierung verarbeitet oder Ihr SQL übersetzt.

Außerdem war es für uns von Vorteil, dass Pass-Through-SQL nur sehr wenig Verarbeitung auf der SAS-Seite erfordert. Wenn Sie eine extrem ausgelastete SAS-Box haben, können Sie die Verarbeitungslogik direkt an die Datenbank senden. Dies ist ohne die Verwendung von Pass-Through-SQL möglich, Sie haben jedoch einen höheren Grad an Kontrolle bei der Verwendung.

Dies ist auf keinen Fall eine erschöpfende Liste von Vorteilen, nur ein paar High-Level-Vorteile zur Verwendung von Pass-Through-SQL. Wenn Sie einen konkreteren Anwendungsfall haben, können wir die spezifischen Unterschiede in den Codierungstechniken diskutieren.

2

Wenn Sie das Pass-Through nicht verwenden, müssen Sie alle Datensätze (die Sie für die Verarbeitung benötigen) aus der Datenbank in sas importieren. Durch die Verwendung des Pass-Throughs können Sie eine Verarbeitung auf der Datenbankseite durchführen und nur die resultierenden Datensätze in sas übertragen. Der Unterschied (in Bezug auf die Verarbeitungszeit und die Netzwerknutzung) kann sehr klein oder groß sein, je nachdem, was Sie tun.

4

PROC SQL versucht und übergibt so viel wie möglich an die Datenbank, aber es gibt verschiedene Zeiten, die es nicht kann. Die Verwendung von SAS-Funktionen, die in der Datenbank (oder in der SAS/ACCESS-Engine für die Datenbank) nicht gleichwertig sind, verhindert die Übergabe der gesamten Abfrage an die Datenbank. Wenn die Abfrage nicht vollständig an die Datenbank übergeben wurde, werden die Daten in SAS übernommen und dort verarbeitet. Je komplizierter Ihre SQL ist, desto wahrscheinlicher wird sie in SAS verarbeitet. Hier ist ein Fall, der einen größeren Unterschied macht, als Sie vielleicht erkennen.

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 zurück zu laden. Es ist Millionen von Zeilen, die es wirklich verlangsamt.

In diesem Fall würden Sie den expliziten Durchlauf viel schneller 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 kürzlich ein Beispiel mit Oracle und einer Tabelle mit etwa 250.000 Zeilen. Der erste Weg dauerte 20 Sekunden und der zweite Weg 2 Sekunden.

2

Es gibt Vorteile bei der Verwendung von Passthrough, aber es hängt davon ab, was Sie erreichen möchten. Im Allgemeinen verwende ich Standard-proc-SQL ohne Passthrough, wenn Sie Abfragen ausführen. Kürzlich habe ich es jedoch verwendet, um einige gespeicherte Procs zu generieren.

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 du erreichen willst.

+0

+1 Für den interessanten Einsatz ... –

0

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