2017年11月2日木曜日

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


まずは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文が保存されます。
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;




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

proc sql;
   drop view MYVIEW;
quit;





SQLビューのメリット


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

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



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

proc means data=MYLIB.VW;
   var C;
run;



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

なぜなら、以下のように

proc means data=MYLIB.VW;
   var C;
run;


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



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



次回は「落とし穴編

0 件のコメント:

コメントを投稿