R语言包安装并实现与HANA的整合

时间:2022-06-06 16:53:21

1 R语言介绍

       R语言是基于S语言的一个GNU计划项目,可以当成是S语言的一种实现,最初是由新西兰奥克兰大学的Ross IhakaRobert Gentleman开发,主要用于统计分析,绘图,数据挖掘.

SAP HANA SP5版本发布以来,将SAP HANA的内存计算和R丰富的统计功能进行了完美的结合,使得在SAP HANA数据库中可以使用R语言作为存储过程的开发语言,调用R中的统计函数.

  SAP HANAR之间的交互使用了一种高效数据交换机制,使得中间过程表与R中基于列的数据结构之间传输数据很快.RSAP HANA之间的通信过程如下图所示:

R语言包安装并实现与HANA的整合

为了在SAP HANA中执行R代码,R代码将以RLANG存储过程的形式嵌入,并由外部的Rserve负责执行.为了支持R操作符,SAP HANA的计算引擎进行了扩展,对给定的输入对象,经过计算,输出一张结果表.与本地数据库操作符不同的是,R操作符可以利用R函数对数据进行处理.当计算引擎识别出R操作符,便由R Client发出一个请求到Rserve,并发送相关的参数,触发执行,执行完毕之后,结果数据框被发送至计算引擎.

使用限制:

  • 1. RLang中,参数只支持table类型,所以如果需要传标量(scalar)类型,需要封装到table中,这点需要注意.如果需要传送R中的lists, matrixesSAP HANA,需要转换成data frame.
  • 2. Procedure中的变量名不能包含大写字母.
  • 3. 嵌入式R函数必须有至少一个结果,data frame的形式.

 

 

 2 R语言安装

windows平台下的安装相对比较简单,只需要在官网下载对应的安装包然后双击执行安装程序即可.下面主要介绍在linux平台下的安装.安装之前先确保以下软件包存在:

xorg-x11-develX 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解释器,如图

R语言包安装并实现与HANA的整合


实现与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, 添加如下参数

R语言包安装并实现与HANA的整合


简单测试demo

以下demo实现将一个只有一列的质数表,求其平方:

 

CREATE ROW TABLE "WEIYY_TEST"."PRIME" ( "NUMBER" INT CS_INT );

insert into "WEIYY_TEST"."PRIME" values(2);

insert into "WEIYY_TEST"."PRIME" values(3);

insert into "WEIYY_TEST"."PRIME" values(5);

insert into "WEIYY_TEST"."PRIME" values(7);

CREATE ROW TABLE "WEIYY_TEST"."PRIME_SQR" ( "NUMBER" INT CS_INT );

CREATE PROCEDURE MY_F(IN input1 PRIME,OUT result PRIME_SQR)

LANGUAGE RLANG AS

BEGIN

 

      result<-as.data.frame(input1$NUMBER^2);

      names(result)<-c("NUMBER");

END;


执行此procedure,结果如下:

 

R语言包安装并实现与HANA的整合

 

技巧


 RLANG编写的procedure中,参数是不能为标量类型,但往往很多时候需要传递标量作为输入参数.这个时候,利用SAP HANAselect  from dummy语句生成一张临时结果表是一个很好的解决办法.


CREATE PROCEDURE WAPPER_WEIBOSOHU(IN keyword NVARCHARINcrawltime 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

. http://help.sap.com/hana/SAP_HANA_R_Integration_Guide_en.pdf