2016-12-30 11 views
0

SQLテーブルをSQLパススルーにマージして、SQLデータベースのクエリに要する時間を短縮しようとしています。現時点では、そのままパススルーを使用しています。テーブルからすべてを引き出すにはおよそ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

いいえ、2番目の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; 
関連する問題