Leo Yeh's Blog

SAS Viya (142)

教學目標

初步了解設計 SAS 9 平台中的 ETL 批次排程準備資料給予 SAS Viya 平台中報表呈現和分析的基本概念。

重點概念

首先當我們在設計 SAS 9 平台中的 ETL 批次排程準備資料給予 SAS Viya 平台中報表呈現和分析時,我們能夠先透過以下 SAS 巨集程式將 SAS 9 資料集載入至 CAS 分散式伺服器的記憶體中。

載入 SAS 9 資料集至 CAS 分散式伺服器中的資料表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
%MACRO loadCASTable(sas9dataset,caslib,castable);
/*options cashost="sasserver.com" casport=5570;*/
cas mysession;
libname mycas cas caslib="&&caslib";
proc casutil;
droptable casdata="&&castable"
incaslib="&&caslib";
quit;
proc casutil;
load data=&sas9dataset
outcaslib="&&caslib"
casout="&&castable"
promote;
quit;
proc casutil;
save casdata="&&castable"
incaslib="&&caslib" outcaslib="&&caslib"
casout="&&castable"
replace;
quit;
cas terminate;
%MEND;
/*%loadCASTable(<SAS 9 Data Set>,<CASLIB NAME>,<CASTABLE NAME>);*/
%loadCASTable(SASHELP.RETAIL,ReportData,retail);

接著我們能夠再透過以下 SAS 巨集程式將 SAS 9 資料集新增至 CAS 分散式伺服器的記憶體中,主要就是將新的資料集新增至已在記憶體中的資料表未尾,而無需載入主要資料集,因為可能很大,將會導致效能問題。

新增 SAS 9 資料集至 CAS 分散式伺服器中的資料表

1
2
3
4
5
6
7
8
9
10
11
%MACRO appendCASTable(sas9dataset,caslib,castable);
/*options cashost="sasserver.com" casport=5570;*/
cas mysession;
libname mycas cas caslib="&&caslib";
data mycas.&&castable(append=yes);
set &sas9dataset;
run;
cas terminate;
%MEND;
/*%appendCASTable(<SAS 9 Data Set>,<CASLIB NAME>,<CASTABLE NAME>);*/
%appendCASTable(sashelp.retail,ReportData,retail);

再來當我們考慮透過 SAS 程式碼新增資料時,通常第一個想到為 PROC APPEND,但是 PROC APPEND 並無法於 CAS 分散式伺服器中。此時我們主要能夠透過 PROC CASUTIL 和 DATA STEP 兩種方式新增 SAS 9 資料集至 CAS 分散式伺服器中的資料表,請參考以下程式碼。

透過 PROC CASUTIL 新增 SAS 9 資料集至 CAS 分散式伺服器中的資料表

1
2
3
4
5
6
cas mysession;
proc casutil;
load data=sashelp.retail
casout="retail"
append;
quit;

透過 DATA STEP 新增 SAS 9 資料集至 CAS 分散式伺服器中的資料表

1
2
3
4
libname mycas cas;
data mycas.retail(append=yes);
set mycas.retail;
run;

最後上述兩種新增資料的方式,主要差異在於 PROC CASUTIL 主要會先從 SPRE 中下載資料集表,然然將其移回至 CAS 分散式伺服器中的資料表,所以存在大小限制,預設為 100MB,如果超過此大小,則使用者必須調整 DATALIMIT 選項。因此當要新增的資料集較小時,兩種方式皆很好,但是當資料集很大時,如果使用 PROC CASUTIL 就會導致效能問題,所以建議使用 DATA STEP 新增資料,更多資訊請參考官方社群文章

相關資源

⬅️ Go back