1 R语言介绍
R语言是基于S语言的一个GNU计划项目,可以当成是S语言的一种实现,最初是由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发,主要用于统计分析,绘图,数据挖掘.
SAP HANA SP5版本发布以来,将SAP HANA的内存计算和R丰富的统计功能进行了完美的结合,使得在SAP HANA数据库中可以使用R语言作为存储过程的开发语言,调用R中的统计函数.
SAP HANA与R之间的交互使用了一种高效数据交换机制,使得中间过程表与R中基于列的数据结构之间传输数据很快.R与SAP HANA之间的通信过程如下图所示:
为了在SAP HANA中执行R代码,R代码将以RLANG存储过程的形式嵌入,并由外部的Rserve负责执行.为了支持R操作符,SAP HANA的计算引擎进行了扩展,对给定的输入对象,经过计算,输出一张结果表.与本地数据库操作符不同的是,R操作符可以利用R函数对数据进行处理.当计算引擎识别出R操作符,便由R Client发出一个请求到Rserve,并发送相关的参数,触发执行,执行完毕之后,结果数据框被发送至计算引擎.
使用限制:
- 1. 在RLang中,参数只支持table类型,所以如果需要传标量(scalar)类型,需要封装到table中,这点需要注意.如果需要传送R中的lists, matrixes到SAP HANA,需要转换成data frame.
- 2. Procedure中的变量名不能包含大写字母.
- 3. 嵌入式R函数必须有至少一个结果,以data frame的形式.
2 R语言安装
在windows平台下的安装相对比较简单,只需要在官网下载对应的安装包然后双击执行安装程序即可.下面主要介绍在linux平台下的安装.安装之前先确保以下软件包存在:
xorg-x11-devel:X window支持
gcc-fortran:编译环境需要
readline-devel:使用R作为独立程序时需要
libgfortran46:SLES 11 sp2需要
然后下载R语言源码包(R-2.15.0.tar.gz已经过测试),然后解压缩,执行
./configure --enable-R-shlib
make
make install
如果安装成功,在shell中执行R命令,可以直接启动交互式R解释器,如图
3 实现与SAP HANA的整合
- (1) 安装Rserve
Rserve是基于TCP/IP的一个R语言服务器端,启动R之后,执行install.packages(“Rserve”),会提示选择镜像,然后自动下载安装.也可以下载Rserve.tar.gz,然后执行install.packages("/PATH/TO/YOUR/Rserve.tar.gz", repos = NULL)进行安装.
安装之后编辑/etc/Rserv.conf文件,添加以下内容:
maxinbuf 10000000
maxsendbuf 0
remote enable
然后启动Rserve,
/usr/local/lib64/R/bin/Rserve --RS-port 30120 --no-save --RS-encoding utf8
- (2) 配置SAP HANA
启动SAP HANA Studio, 选择管理视图,Configuration标签,依次导航至indexserver.ini->calcEngine, 添加如下参数
4 简单测试demo
以下demo实现将一个只有一列的质数表,求其平方:
|
执行此procedure,结果如下:
5 技巧
在RLANG编写的procedure中,参数是不能为标量类型,但往往很多时候需要传递标量作为输入参数.这个时候,利用SAP HANA的select from dummy语句生成一张临时结果表是一个很好的解决办法.
CREATE PROCEDURE WAPPER_WEIBOSOHU(IN keyword NVARCHAR, INcrawltime INTEGER,OUT result WEIBOSOHU_TYPE)
LANGUAGE SQLSCRIPT
AS BEGIN
inputinfo=select :keyword AS "keyword",:crawltimeas "crawltime" from DUMMY;
CALL fetch_weibosohu(:inputinfo, :result);
END;
例如上面的procedure中,外层WAPPER_WEIBOSOHU过程是SQLSCRIPT,调用的fetch_weibosohu是一个RLANG procedure,利用select from dummy语句生成临时表,传入内层procedure.
[注:本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 70.00]
[参考资料]
1.http://zh.wikipedia.org/wiki/R%E8%AF%AD%E8%A8%80
2. http://help.sap.com/hana/SAP_HANA_R_Integration_Guide_en.pdf