SAS/Access和SAS/SQL產(chǎn)品的復(fù)雜性源于從客戶端向服務(wù)器發(fā)送命令的必要性。在WIN或者UNIX系統(tǒng)中,這些功能通常以三種形式出現(xiàn):
• PROC ACCESS -- 裝載DBMS數(shù)據(jù)進(jìn)入SAS
• PROC DBLOAD -- 裝載SAS數(shù)據(jù)進(jìn)入DBMS
• SQL數(shù)據(jù)傳遞 -- 執(zhí)行標(biāo)準(zhǔn)SQL語言
PROC ACCESS
PROC Access 使用較為復(fù)雜。因?yàn)樾枰紫葎?chuàng)建一個(gè)獲取描述塊(Access Descriptor)來描述一個(gè)DBMS表格數(shù)據(jù),再創(chuàng)建一個(gè)視圖描述塊(View Descriptor)來描述這個(gè)DBMS表格的子集。下面的例子顯示了該過程如何處理遠(yuǎn)程Oracle數(shù)據(jù)庫表格:
proc access dbms=oracle;
create work.test.access;
user="system";
orapw="pinggu";
table="system.Dw_account";
path="@test.beijing";
assign=yes;
list all;
create work.test.view;
select Account Account_code1;
subset where Account_code1 = '105';
run;
proc print data=test;
run;
這段代碼先在臨時(shí)庫中創(chuàng)建一個(gè)名為test的 "Access Descriptor";然后,賬戶、密碼、路徑(網(wǎng)絡(luò)服務(wù)名) 是針對Oracle服務(wù)器而填寫的。Oracle域名在這里被轉(zhuǎn)換為SAS格式,數(shù)據(jù)庫內(nèi)容也被清單列示。注意:表格"Dw_account"、所有者"system"需要在這里聲明。接著,一個(gè)包含了遠(yuǎn)程表格EMP某些行與列的"View Descriptor"也被創(chuàng)建。根據(jù)特定用戶的Oracle權(quán)限,這樣的數(shù)據(jù)視圖能夠被用來讀取或者更新數(shù)據(jù)庫。這里可見,PROC ACCESS的語法比較復(fù)雜。比如,即便獲取、視圖描述塊是在臨時(shí)庫中創(chuàng)建,還是需要指明三級名稱work.test.access和work.test.view。
此為,高版本SAS提供了不再需要創(chuàng)建獲取、視圖描述塊的數(shù)據(jù)庫資源整合方式。如下一行代碼所示,提供使用一種"動態(tài)庫名引擎(Dynamic Libname Engine)",SAS能夠如同對待數(shù)據(jù)集那樣處理遠(yuǎn)程數(shù)據(jù)庫。
libname mydblib oracle user=system pw=pinggu path="@test.beijing";
run;
PROC DBLOAD
DBLoad過程則以相反方式來處理數(shù)據(jù)------將數(shù)據(jù)從SAS系統(tǒng)拷貝進(jìn)入DBMS系統(tǒng)中。該過程適于大量加載,比如:將全部SAS數(shù)據(jù)集拷入Oracle中。然而,SAS程序員需要注意以下兩點(diǎn):
• 缺省裝載的限度為5000條記錄。加載更大的數(shù)據(jù)表則需要設(shè)定limit=0。
• 僅用來建立新表格。如果已經(jīng)存在表格,則該過程異常中止。
下面的例子演示了從SAS系統(tǒng)中創(chuàng)建一個(gè)新的Oracle表格:
proc dbload dbms=oracle data=sashelp.prdsale;
orapw="pinggu";
user="system";
path="@test.beijing";
table="system.prdsale";
label;
reset all;
load;
run;
該過程的語言與PROC ACCESS極為相似。一個(gè)名為"sashelp.prdsale"的SAS數(shù)據(jù)文件被作為表格拷入了Oracle中并且命名為"prdsale"。SAS變量標(biāo)識則被作為Oracle域名。注意:這里必須存在"load"語句,否則表格將不會創(chuàng)建。
SQL數(shù)據(jù)傳遞
SQL(Structured Query Language)語言是一種應(yīng)用廣泛的、使用來獲取或更新關(guān)系型數(shù)據(jù)庫中表格的標(biāo)準(zhǔn)語言。SQL語言以PROC SQL的形式內(nèi)嵌于BASE SAS模塊之中。PROC SQL是管理遠(yuǎn)程數(shù)據(jù)表格的有效工具,為有經(jīng)驗(yàn)的SQL用戶提供了一個(gè)相對直觀的界面。在大規(guī)模加載情形中,PROC SQL表現(xiàn)出優(yōu)越于DBLoad的性能。除此之外,PROC SQL還明顯表現(xiàn)出簡便有效、界面友好的優(yōu)勢。需要強(qiáng)調(diào)的是:在不同的關(guān)系型數(shù)據(jù)庫中,SQL的表現(xiàn)也不盡相同;在Oracle客戶端使用的SQL*Plus表現(xiàn)出區(qū)別于PROC SQL的語法特征。這樣,在使用之前,需要查詢SQL用戶指南、咨詢數(shù)據(jù)庫管理員。
下面的例子顯示了如何使用PROC SQL來作為PROC ACCESS的替代品:
proc sql;
connect to oracle
(user=system orapw=pinggu path="@test.beijing");
create table test2 as
select * from connection to oracle
(select * from Prdsale);
disconnect from oracle;
quit;
程序中使用了三個(gè)SQL語句:建立數(shù)據(jù)庫連接、斷開數(shù)據(jù)庫連接以及分派數(shù)據(jù)。這里的SQL select語句包括了兩部分:(1)加上括號的表達(dá)式 (select * from prdsale)為數(shù)據(jù)傳遞部分。這段代碼被發(fā)送到Oracle數(shù)據(jù)庫服務(wù)器來獲得指定數(shù)據(jù)表格"prdsale";(2) 外部select語句將Oracle查詢結(jié)果返還SAS系統(tǒng)。最后,create table 語句將查詢結(jié)果形成數(shù)據(jù)集work.prdsale。如果該語句被遺漏,則PROC SQL僅在輸出窗口顯示查詢結(jié)果。
根據(jù)不同的客戶端/服務(wù)器平臺,SAS系統(tǒng)提供了一系列關(guān)系型數(shù)據(jù)庫的獲取、訪問方法。相對于之前的SAS版本,8.0版后的Oracle、ODBC和DB2的動態(tài)邏輯庫名引擎在大規(guī)模獲取與視圖描述塊方面獲得了跨越式的提升。未來的SAS版本將會進(jìn)一步對于關(guān)系型數(shù)據(jù)庫以及其它類型的外部數(shù)據(jù)源提供性能卓越的邏輯庫名支持。
相關(guān)鏈接:
大數(shù)據(jù)時(shí)代BI先鋒利器——SAS數(shù)據(jù)倉庫管理系統(tǒng)
http://xalimeijing.com/forum.php?mod=viewthread&tid=1597181&from^^uid=3282317
SAS SQL與大型商業(yè)數(shù)據(jù)庫——ITAT數(shù)據(jù)分析師培訓(xùn)項(xiàng)目系列文集
http://xalimeijing.com/forum.php?mod=viewthread&tid=1552391&from^^uid=3282317
SAS/WA與數(shù)據(jù)倉庫——ITAT數(shù)據(jù)分析師培訓(xùn)項(xiàng)目系列文集
http://xalimeijing.com/forum.php?mod=viewthread&tid=1552624&from^^uid=3282317