2017年11月2日木曜日

SQLビューの作成と落とし穴①



以下をご覧ください

proc sql;
   create view MYVIEW as
   select NAME, AGE
   from SASHELP.CLASS;
quit;

proc print data=MYVIEW noobs;
run;


SQLプロシジャの CREATE VIEW で作成した MYVIEW は一見データセットに見えますが、「SQLビュー」というものです。
「SQLビュー」には、データセットではなく、定義したSELECT文が保存されます。


構文

   PROC SQL;
        CREATE VIEW ビュー名 AS  SELECT文
   QUIT;





ビューの定義を見たい場合は DESCRIBE VIEW を使います。

proc sql;
   describe view MYVIEW;
quit;

ログ
NOTE: SQLビュー WORK.MYVIEW は次のように定義されています :

        select NAME, AGE
          from SASHELP.CLASS


ビューを開いたり、参照すると、定義したSELECT文が実行されて結果のデータが返ってくる仕組みになっています。




ちなみにビューを削除したい場合は DROP VIEW を使います。

proc sql;
   drop view MYVIEW;
quit;





SQLビューのメリット


便利なのが
たとえば、以下のようにデータセットDT1を参照している MYLIB.MYVIEW2 というビューを作ったとします。

proc sql;
   create view MYLIB.MYVIEW2 as
   select A+B as C
   from DT1;
quit;


そしてこのビューを使って翌日FREQを実行したいとします。

proc freq data=MYLIB.MYVIEW2;
   table C;
run;


しかし翌日、ビューが参照しているDT1に値の変更が発生したとします。
この場合、再度ビューを作り直す必要はありません。

なぜなら、以下のように

proc freq data=MYLIB.MYVIEW2;
   table C;
run;


ビューを参照するだけで、内部で最新のDT1に対してSELECT文が実行され、その結果に対してFREQが実行されるからです。



またメリットとして、ビューの中身は定義なのでファイルサイズは小さいです。
ただし、プログラム中に何回も同じ中身のビューを参照するような状況では、参照するたびに内部でSELECT文が実行される事になるので、処理効率が悪くなります。



分かり辛い上に長くなりましたが、データステップ100万回の方が分かり易く解説されてるので、こちらもご覧ください。
SASのテーブルビュー(view)について


次回は「落とし穴編

0 件のコメント:

コメントを投稿