大規模データのソートを行う際に、一時的なディスク容量オーバーの問題をUTILLOCオプションでUTILファイル作成先を逃がすことで回避する

SASでシュミレーション等の処理の際に、実行時間を短縮する方法はいろんな方がたくさん提言されていてとても深い世界ですので、ここではあまり触れません。

ただ、一般的に大規模なデータセットを作成してbyでシュミレーション回ごとに解析プロシジャを回すことが多いと思いますが、その過程で大規模なデータセットに対してソートプロシジャをかけることがあると思います。

例えば、今、WORKが割り当てられている領域のディスク容量がちょうど100GBであったとして、そこに100GBのデータセットを作成して上書きでソートプロシジャを掛けることは可能でしょうか?

答えは無理です。
SASは効率的に処理するためにUTILファイル(ユーティリティファイル)という一時ファイルを作成します。処理が終わると消えるファイルなので正確に測定していないのですが、どうもほぼ、元ファイルと同じくらいの容量になっている気がします。

なので100GBのデータセットを作成してソートプロシジャを実行する場合、一時的にですが多分およそ200GBの容量が必要になります。
この問題を解決する一番単純な方法は、容量が大きいディスクを用意して、そこで回すということです。

まあ、それで話が終わりなのですが、例えばCドライブ100GB、Dドライブ100GBの容量が空いているパーテーション構成だとすれば、わざわざパーテーションを組みなおしたり外付けハードディスクなどを用意しなくても、
WORKはCドライブ、UTILファイル作成先はDドライブにすれば回りきるわけです(実際はそこまでギリギリにすると不味いとおもいますが)

その場合、SASのコンフィングファイル「SASV9.CFG」に事前に設定を仕込む必要があります。
パスは環境や設定によってことなりますがwindowsなら
(C:\Program Files\SAS\SASFoundation\9.2\nls\ja)等に存在するのがデフォルトでしょうか?

それををwin7の場合、管理者権限で開いて
以下のようにWORKの絶対パス指定の下に「-UTILLOC "D:\"」と打って保存する

-WORK "!TEMP\SAS Temporary Files"
-UTILLOC "D:\"

これでUTILファイルの作成をDドライブに逃すことができます。


0 件のコメント:

コメントを投稿