SAS Viya (55)

教學目標

初步了解如何在 SAS Viya 平台撰寫 SAS 程式碼的排程工作。

重點概念

首先在 SAS Viya 平台中我們可以透過 SAS Studio V 撰寫 SAS 程式碼,接著透過 SAS Job Execution 網站進行 SAS 程式碼的排程工作,相較於 SAS 9 平台主要是以 Workspace Server 伺服器執行 SAS 程式碼,而在 SAS Viya 平台則是以 Compute Server 伺服器執行 SAS 程式碼,至於 SAS 9 和 SAS Viya 平台的差別,請參考下表。

SAS 9 SAS Viya
Object Spawner Launcher Server + Service
Workspace Server Compute Server + Service
SAS Foundation Programming Runtime Environment (SPRE)

接著我們可以透過 SAS Job Execution 新增工作定義檔案,請注意 SAS Job Execution 必須透過網址 (https:// [SAS Viya 主機名稱] /SASJobExecution) 開啟,預設無法透過 SAS Viya 網站中的功能表開啟,之後我們需要按照以下步驟進行 SAS 程式碼的排程工作,分別為:

  1. 在 SAS Studio V 中撰寫和複製 SAS 程式碼。
  2. 在 SAS Job Execution 中建立和貼上 SAS 程式碼。
  3. 在 SAS Environment Manager 中建立排程工作。

再來目前若以 SAS Viya 平台排定特定時間執行 SAS Job Execution 中的 SAS 程式碼,但是還無法設定多個 SAS 程式碼的相依關係。但是我們則可以在工作定義中撰寫以下 SAS 程式碼,以利按照順序執行 SAS 程式碼,以及更能透過 &sysrc 等系統回傳值判斷 SAS 程式碼是否正常執行,請注意工作定義中不能夠只用「CAS CASAUTO;」,不然會發生「The request to start or connect to a session failed. Specify a UUID to connect to an existing session or specify a session name, port and host name to start a session.」錯誤訊息。

工作定義 SAS 程式碼

1
2
3
4
cas casauto host='<SAS Viya 主機名稱>' port=5570 sessopts=(caslib=Public timout=1000 locale="en_US");
filename <工作排程名稱> FILESRVC folderpath='<SAS 程式碼資料夾>' filename='<SAS 程式碼檔案名稱>';
%include <工作排程名稱> / source;
%put &syscc rc=&sysrc &syserr &syserrortext &syswarningtext;

儲存資料 SAS 程式碼

1
2
3
4
5
6
7
8
9
10
11
12
cas auto;
libname mycas cas caslib=casuser;
data mycas.cars;
set sashelp.cars;
run;
proc casutil incaslib="casuser" outcaslib="casuser";
save casdata="cars" replace;
run;
proc casutil;
droptable casdata="cars" incaslib="casuser";
run;
cas terminate;

儲存資料 SAS 程式碼 (巨集)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* %exportFile(SAS 9 資料集, CAS 資料館, SASHDAT 檔案名稱) */
%macro exportFile(v_sasdata,v_caslib,v_casdata);
cas auto;
libname viyacas cas caslib=&v_caslib;
data viyacas.&v_casdata;
set &v_sasdata;
run;
proc casutil incaslib="&&v_caslib" outcaslib="&&v_caslib";
save casdata="&&v_casdata" replace;
run;
proc casutil;
droptable casdata="&&v_casdata" incaslib="&&v_caslib";
run;
cas terminate;
%mend;

%exportFile(sashelp.cars,casuser,cars);

當我們在 SAS Job Execution 新增完成工作定義之後,在工作定義上按右鍵選取「提交工作」就能夠立即執行工作,請注意每次提交工作系統就會在 SAS Environment Manager 中自動建立工作排程,以利後續設定時間定期執行。

最後當我們透過 SAS Job Execution 執行工作時預設則是會以「cas」系統帳號進行作業系統層的檔案存取操作,若是期望以該執行排程工作的使用者帳號進行檔案存取操作,則需要先建立「CASHostAccountRequired」群組,並且將該使用者帳號加入至該群組中,並且重新登出和登入 SAS Viya 平台,再執行工作排程就能夠以該使用者帳號進行檔案存取操作。

相關資源