私は SAS Data Integration Studio の経験が浅いユーザーです。
ジョブステータスに関する情報を電子メールで受け取りたいです。「ステータス処理」とアクション「メール送信」(ジョブ オプションから) を使用しても満足のいくものではありません。まず第一に - (おそらく?) このメールにログを添付できません。
SAS Enterprise Guide で、メール本文にログインの添付といくつかの有用な情報 (日時、エラーのリスト) を含む電子メールを送信するためのコードを開発およびテストしました。
%let mail = "test@test.com";
%let path_error = /home/ ... .log;
filename msg email
to = (&maile)
subject = "SAS Message Test"
attach = "&path_error.";
data _null_;
dttm = put(datetime(),nldatm.);
infile "&path_error.";
input;
file msg;
if _n_ = 1 then do;
put "Date time: " dttm;
put;
put "Full log in attach.";
put "There are some ERRORs and WARNINGs:";
put;
end;
if substr(_infile_,1,5) = "ERROR" then
put _infile_;
if substr(_infile_,1,7) = "WARNING" then
put _infile_;
run;
このコードは問題なく動作します。エラーと警告のリストが記載された完全なメールが届きます。ログで私は見ることができます:
NOTE: 268 records were read from the infile "[...].log"
しかし、このコード (特に infile ステートメントによる読み取り) を DIS に実装するにはどうすればよいでしょうか?
ジョブ オプションを変更しました。
- プリコード - ログを外部ファイルに入れます。ログ名にはジョブ名と日時が含まれます:
%let path = /home/[...]/log_&etls_jobName._%sysfunc(datetime(), datetime.).log;
proc printto log="&path.";
run;
- 郵便番号 - Enterprise Guide のコードを使用しました。
%let address = "test@test.com";
%let message = problems with &etls_jobName;
filename sendMail email
to= (&address)
subject= "ETL Process problem: &etls_jobName."
attach= "&path.";
options nosyntaxcheck;
data _null_;
dttm = put(datetime(),nldatm.);
infile "&path.";
input;
file sendMail;
if _n_ = 1 then do;
put "Date time: " dttm;
put;
put "Full log in attach.";
put "There are some ERRORs and WARNINGs:";
put;
end;
if substr(_infile_,1,5) = "ERROR" then
put _infile_;
if substr(_infile_,1,7) = "WARNING" then
put _infile_;
run;
実際には、ログインが添付された電子メールを受け取りますが、本文は空です。添付のログで私は見ることができます:
NOTE: 0 records were read from the infile
いくつか質問があります:
- なぜ0レコード???
- 郵便番号からステートメントを削除
input;
してジョブを実行すると、本文に「日付時刻/完全なログが添付されています/いくつかのエラーと警告があります」という電子メールが届きます。input
コードで機能する場所で削除されるのはなぜですか? options nosyntaxcheck;
コードがないとメールが送信されません。なんで?
答えてくれてありがとう。よろしく、ミハウ