SAS Data Integration Studio: проблемы с отправкой почты (войти прикрепить)
Я неопытный пользователь 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?
Я изменил параметры работы:
- Precode - помещает лог во внешний файл; имя журнала содержит имя задания и дату и время:
%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;
в коде. Почему?
Спасибо за ответы. С уважением, Михал
1 ответ
Обычный способ остановки шага данных — когда он считывается после конца ввода (либо считываются необработанные данные, либо осуществляется доступ к наборам данных).
Поэтому переместите свой блок _N_=1 ДО инструкции INPUT. Возможно, вы захотите изменить формулировку сообщения об ошибках и предупреждениях. Или подождите, прежде чем писать, пока не узнаете, что есть записи для чтения.
%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.);
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;
infile "&path.";
input;
if _n_ = 1 then do;
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;