全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
27555 83
2012-10-31

     当前的SAS系统提供了许多数据库管理的功能,包括数据库视图和一套扩展的ANSI SQL语言。SAS包括了几个用来获取关系型数据库的过程。我们将探讨如何基于SAS系统平台来实现网络工作站与远程Oracle服务器的连接。虽然这里讨论的是如何使用SAS/Access和SAS/SQL来连接Oracle数据库的,但原理同样适用于DB2、Sybase、Informix、ODBC、OLE DB、SQL Server以及Teradata等客户端/服务器系统。SAS/Access是基于客户端/服务器系统而开发的,这就需要独立的数据库引擎来为本地应用提供数据服务。这里的例子中,SAS是作为客户端而ORACLE关系型数据库是作为服务器的。
    SAS/Access和SAS/SQL产品的复杂性源于从客户端向服务器发送命令的必要性。在WIN或者UNIX系统中,这些功能通常以三种形式出现:
    • PROC ACCESS -- 装载DBMS数据进入SAS
    • PROC DBLOAD -- 装载SAS数据进入DBMS
    • SQL数据传递 -- 执行标准SQL语言
   PROC ACCESS
    PROC Access 使用较为复杂。因为需要首先创建一个获取描述块(Access Descriptor)来描述一个DBMS表格数据,再创建一个视图描述块(View Descriptor)来描述这个DBMS表格的子集。下面的例子显示了该过程如何处理远程Oracle数据库表格:
          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;

access1.PNG
        这段代码先在临时库中创建一个名为test的 "Access Descriptor";然后,账户、密码、路径(网络服务名) 是针对Oracle服务器而填写的。Oracle域名在这里被转换为SAS格式,数据库内容也被清单列示。注意:表格"Dw_account"、所有者"system"需要在这里声明。接着,一个包含了远程表格EMP某些行与列的"View Descriptor"也被创建。根据特定用户的Oracle权限,这样的数据视图能够被用来读取或者更新数据库。这里可见,PROC ACCESS的语法比较复杂。比如,即便获取、视图描述块是在临时库中创建,还是需要指明三级名称work.test.access和work.test.view。
    此为,高版本SAS提供了不再需要创建获取、视图描述块的数据库资源整合方式。如下一行代码所示,提供使用一种"动态库名引擎(Dynamic Libname Engine)",SAS能够如同对待数据集那样处理远程数据库。
          libname mydblib oracle user=system pw=pinggu path="@test.beijing";

          run;
libname.PNG
        PROC DBLOAD
    DBLoad过程则以相反方式来处理数据------将数据从SAS系统拷贝进入DBMS系统中。该过程适于大量加载,比如:将全部SAS数据集拷入Oracle中。然而,SAS程序员需要注意以下两点:
    • 缺省装载的限度为5000条记录。加载更大的数据表则需要设定limit=0。
    • 仅用来建立新表格。如果已经存在表格,则该过程异常中止。
    下面的例子演示了从SAS系统中创建一个新的Oracle表格:
          proc dbload dbms=oracle data=sashelp.prdsale;
                orapw="pinggu";
                user="system";
                path="@test.beijing";
                table="system.prdsale";
                label;
                reset all;
                load;
          run;

dbload.PNG
    该过程的语言与PROC ACCESS极为相似。一个名为"sashelp.prdsale"的SAS数据文件被作为表格拷入了Oracle中并且命名为"prdsale"。SAS变量标识则被作为Oracle域名。注意:这里必须存在"load"语句,否则表格将不会创建。
        SQL数据传递
    SQL(Structured Query Language)语言是一种应用广泛的、使用来获取或更新关系型数据库中表格的标准语言。SQL语言以PROC SQL的形式内嵌于BASE SAS模块之中。PROC SQL是管理远程数据表格的有效工具,为有经验的SQL用户提供了一个相对直观的界面。在大规模加载情形中,PROC SQL表现出优越于DBLoad的性能。除此之外,PROC SQL还明显表现出简便有效、界面友好的优势。需要强调的是:在不同的关系型数据库中,SQL的表现也不尽相同;在Oracle客户端使用的SQL*Plus表现出区别于PROC SQL的语法特征。这样,在使用之前,需要查询SQL用户指南、咨询数据库管理员。
    下面的例子显示了如何使用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;

sql_orcl.PNG
        程序中使用了三个SQL语句:建立数据库连接、断开数据库连接以及分派数据。这里的SQL select语句包括了两部分:(1)加上括号的表达式 (select * from prdsale)为数据传递部分。这段代码被发送到Oracle数据库服务器来获得指定数据表格"prdsale";(2) 外部select语句将Oracle查询结果返还SAS系统。最后,create table 语句将查询结果形成数据集work.prdsale。如果该语句被遗漏,则PROC SQL仅在输出窗口显示查询结果。
   
    根据不同的客户端/服务器平台,SAS系统提供了一系列关系型数据库的获取、访问方法。相对于之前的SAS版本,8.0版后的Oracle、ODBC和DB2的动态逻辑库名引擎在大规模获取与视图描述块方面获得了跨越式的提升。未来的SAS版本将会进一步对于关系型数据库以及其它类型的外部数据源提供性能卓越的逻辑库名支持。



相关链接:
大数据时代BI先锋利器——SAS数据仓库管理系统
https://bbs.pinggu.org/forum.php?mod=viewthread&tid=1597181&from^^uid=3282317

SAS SQL与大型商业数据库——ITAT数据分析师培训项目系列文集
https://bbs.pinggu.org/forum.php?mod=viewthread&tid=1552391&from^^uid=3282317

SAS/WA与数据仓库——ITAT数据分析师培训项目系列文集
https://bbs.pinggu.org/forum.php?mod=viewthread&tid=1552624&from^^uid=3282317

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-10-31 15:38:55
厉害!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-31 15:39:09
一如既往地专业!!!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-31 15:48:11
libname语法 算是 aceess的一种简便写法,数据传输效率还是sql更高效。
我在这个帖子里写过一点构建方法,https://bbs.pinggu.org/thread-2111308-1-1.html
这么看来,能当作这篇帖子细节上的一点补充,
还有希望大牛能把upload的语法也写进来呐!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-31 15:54:51
头一次有想学SAS的渴望......
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-31 15:59:40
ACCESS!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群