2016-12-30 8 views
0

SQL 데이터베이스를 쿼리하는 데 걸리는 시간을 줄이기 위해 SQL 통과에 SAS 테이블을 병합하려고합니다. 지금은 그냥 그대로 통과를 사용하고 있으며 이후에 원하는 것을 선택하기 전에 테이블에서 모든 것을 가져 오는 데 대략 8-9 시간이 걸립니다.SQL 테이블을 병합하여 SAS 테이블 병합

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; 

하지만 연결 전에 결합을 추가하는 것 같지 않습니다. 이것이 올바른 방법일까요, 아니면 제가 빠진 것이 있습니까?

감사합니다.

+0

SAS 시스템이 느린 경우가 아니면 원격 처리 및 데이터 전송에 거의 8-9 시간이 소요됩니다. 사실을 필터링하면 성능에 큰 도움이되지 않습니다. –

+0

RDMS는 무엇입니까? SQL Server, Oracle, DB2, Postgres, MySQL? DBMS 콘솔에서 쿼리는 얼마나 걸리나요? SAS는 데이터베이스 또는 원격으로 동일한 서버에 상주합니까? – Parfait

답변

0

아니요 두 번째 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;