2022年10月25日火曜日

CPORTで移送ファイルを作成と圧縮

CPORTで移送ファイルを作成するときに圧縮できることを実験で確認した。移送ファイル形式は圧縮されてはいるが圧縮率は高くない。なので、FILENAMEステートメントでZIPの圧縮を試してみた。圧縮した移送ファイルからCIMPORTできて /tmp/new のディレクトリにもSASファイルがあることを確認できた。。

filename myfile1 '/tmp/foo.xpt';

proc cport lib=sashelp file=myfile1 memtype=data;
   select air baseball class;
run;

filename myfile2 zip "/tmp/foo.xpt.zip";

proc cport lib=sashelp file=myfile2 memtype=data;
   select air baseball class;
run;

libname newlib '/tmp/new';

proc cimport lib=newlib infile=myfile2;
run;

2022年10月14日金曜日

本番環境とテスト環境の差で問題が再現しないときの1つの手段

 リッチな本番環境だと問題が起きるが、開発環境だと問題が起きにくいというのはよくある。本番のデータは大きいが開発環境はダミーで小さなものしかない。そんなときは、メモリとかのパラメータをわざと低くしたりすると再現しやすくなる。メモリが不足していると辺りが付いていたら使える手です。

追記: タイムアウト系のエラーは、起動のスクリプトに sleep を入れることで再現させることができます。例えば、Workspace Serverの起動のタイムアウトは *_usermods.sh にシェルのコマンド sleep 120; とか入れると再現できます。

負荷が高いというのは Linuxであれば stress(1) とかで疑似的な負荷を掛ける手もあります。負荷掛けると狙っているのとは別なエラーも出るので見極め必要です。

2022年10月12日水曜日

PROC HTTPのクエリパラメータのエンコーディング

クエリパラーメータを渡すときにエンコーディングが面倒だと思っていたら、PROC HTTPのQUERYのオプションで自動的にエンコードしてくれることに気が付いた。REST APIで日本語の名前でフィルタするときに使える。

%let name=%str(負荷テスト);
proc http url="https://%sysget(SAS_JOB_FLOW_SCHEDULING_SERVICE_HOST):443/jobFlowScheduling/flows" 
    query=("filter"="eq(name,'&name')")
    out=outjson oauth_bearer=sas_services;
  headers 'Accept'='application/vnd.sas.collection+json';
run;