簡體   English   中英

合並SAS表與SQL直通

[英]Merging a SAS table with a SQL passthrough

我正在嘗試將SAS表合並到SQL直通中,以幫助減少查詢SQL數據庫所需的時間。 目前,我只是按原樣使用傳遞功能,大約需要8到9個小時才能從表中提取所有內容,然后再選擇所需的內容。

目前,傳遞代碼如下所示:

proc sql;
    connect to ODBC as CAW(datasrc = "CAW_ULI_STATIC");
    create table test  as 
        select aelref, aelprdtyp, aelsubtyp, aelloc, aelopndte,
         hdscontrolopendate, hdscontrolclosedate, hdscontrolaction,
        from connection to CAW (
                                select aelref, aelprdtyp, aelsubtyp, aelloc, aelextnbr, aelbrnpfx, aelitnnbr, aelopndte,
                                         aelclddte, hdscontrolopendate, hdscontrolclosedate, hdscontrolaction
                                from PUBLIC_withpersonal_short.Vwhdscisagrmnt (nolock)

                                where HDSControlACTION <> 'D' 
                                    and aelsubtyp in (1, 2, 3, 4, 5, 10, 20, 21)
                                order by aelref, hdscontrolopendate, hdscontrolclosedate
                                ); 
disconnect from CAW;
; 
quit;

但是我現在正嘗試使用另一個SAS數據集通過左連接縮小我從直通中獲取的內容,因此它看起來像這樣:

    proc sql;
        connect to ODBC as CAW(datasrc = "CAW_ULI_STATIC");
        create table test  as 
            select a.*, aelref, aelprdtyp, aelsubtyp, aelloc, aelopndte,
             hdscontrolopendate, hdscontrolclosedate, hdscontrolaction,
            from Import1 a left join connection to CAW (
                                    select aelref, aelprdtyp, aelsubtyp, aelloc, aelextnbr, aelbrnpfx, aelitnnbr, aelopndte,
                                             aelclddte, hdscontrolopendate, hdscontrolclosedate, hdscontrolaction
                                    from PUBLIC_withpersonal_short.Vwhdscisagrmnt (nolock)

                                    where HDSControlACTION <> 'D' 
                                        and aelsubtyp in (1, 2, 3, 4, 5, 10, 20, 21)
                                    order by aelref, hdscontrolopendate, hdscontrolclosedate
                                    ); 
    disconnect from CAW b;
    on a.ANUM = b.aelextnbr
    ; 
    quit;

但這似乎不喜歡在連接之前添加聯接。 這是正確的解決方法,還是我錯過了什么?

謝謝。

否。您的第二個SQL查詢只會減少寫入的記錄數,但是SAS仍需要從ODBC連接中拉出所有記錄才能執行聯接。

將您的IMPORT1 SAS數據集推入ODBC數據庫並在那里執行連接。

或者,如果記錄數足夠少,請使用宏變量來生成ANUM值列表,以將其包括在查詢中。 像這樣:

 proc sql noprint ;
   select ANUM into :list separated by ',' from import1;
   connect .... ;
   select ... from connection to odbc
    (... where aelextnbr in (&list)
    );
 quit;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM