2016年4月28日木曜日

SPDE (Scalable Performance Data Engine) の触りと、暗黙ソートについて



SPDエンジンについて、まずはリファレンスを参照ください。

https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/engspde/p0aw8yr81ntdapn1xw6lpn20o1lg.htm


上記リファレンスの説明をかいつまむと、


 ・ high-performance data delivery用に設計
 ・ データを合理化されたファイル形式に編成
 ・ 並列処理
 ・ 非常に大きなデータセットの処理を高速化。


って感じで、分かったような分からないような感じですが、とにかく使ってみましょう。
触った感じ、Base SASエンジンで使えるオプションが一部SPDエンジンで使えなかったり、逆にSPDエンジン専用のオプションが用意されてたりします。

(たとえばfirstobs=オプションはSPDエンジンに無いっぽい。)



とにかく使ってみる。

libname sp spde "任意のパス";

data sp.DT1;
input A B;
cards;
2 11
1 22
1 33
2 44
;
run;

作成されたファイル


SAS上で見るとデータセットDT1がひとつ作られたように見えますが、エクスプローラで見ると上記のようにファイルが2つ出来ています。

これらはコンポーネントファイルといって、定義部分とデータ部分に分かれてファイルが作られている事を意味します。
さらにインデックスを定義していればインデックス用のコンポーネントファイルも作られます。



何気に便利な暗黙ソート

普通BYステートメントを含む処理は、事前にSORTプロシジャで並べ替えとく必要がありますが、SPDエンジンの場合はそれが不要なんです!

BYSORT= LIBNAMEステートメントオプション
https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/engspde/p1oeyuoie0h44vn11fxanawndqwz.htm



libname sp spde "任意のパス";

data sp.DT1;
input A B;
cards;
2 11
1 22
1 33
2 44
;
run;

proc means data=sp.DT1;
  var B;
  by A;
run;

proc transpose data=sp.DT1 out=sp.OUT1;
  var B;
  by A;
run;

変数Aの順に並んでないのに、「by A;」を含むMEANSやTRANSPOSEが動いちゃいます。

おまけにユーティリティファイルスペースを使用して並び替えられるので、DT1は上書きされず元の並び順のままです。


ちなみに、データステップやプロシジャの出力先にご注意下さい。
(例えば、上の例のTRANSPOSEで「OUT=」にBase SASエンジンのライブラリを出力先にした場合、Base SASエンジンのデータセットとして出力されます。
その辺の挙動もご留意下さい。



以上、触りなのでこの辺までとします。
実際に利用する場合は、細かい設定や注意点などがあるので、まずはリファレンスをご確認下さい。


0 件のコメント:

コメントを投稿