Chapter 14 Greenplum PL/RLanguage Extension
This chaptercontains the following information:
• About Greenplum Database PL/R
• Installing PL/R
• Uninstalling PL/R
• Migrating from PL/R from R 2.12.0 to R 3.1.0
• 示例
• Downloading and Installing R Packages
• Displaying R Library Information
• References
About Greenplum Database PL/R
PL/R是一种程序语言。 使用Greenplum数据库PL/R扩展,您可以使用R编程语言编写数据库函数,并使用包含R函数和数据集的R包。
重要:由于引入了Pivotal QueryOptimizer,GreenplumDatabase 4.3.4.x及更早版本的扩展包与GreenplumDatabase 4.3.5.0不兼容。 此外,GreenplumDatabase 4.3.5.0及更高版本的扩展包与GreenplumDatabase 4.3.4.x及更早版本不兼容。
要在GreenplumDatabase 4.3.5.0及更高版本中使用扩展包,必须安装并使用为GreenplumDatabase 4.3.5.0及更高版本构建的GreenplumDatabase扩展包(gppkg文件和contrib模块)。 对于GreenplumDatabase 4.3.4.x及更早版本中使用的自定义模块,您必须重新生成模块以便与GreenplumDatabase 4.3.5.0及更高版本一起使用。
有关支持的PL/R版本的信息,请参阅Greenplum数据库发行说明。
Installing PL/R
对于Greenplum数据库4.3及更高版本,PL/R扩展可作为一个包使用。 从Pivotal网络下载软件包并使用Greenplum软件包管理器(gppkg)进行安装。
gppkg实用程序会在群集中的所有主机上安装Greenplum数据库扩展以及任何依赖项。 在系统扩展和分段恢复的情况下,它也自动在新主机上安装扩展。
有关gppkg的信息,请参阅Greenplum数据库实用程序指南。
Installing the Extension Package
在安装PL/R扩展之前,请确保您的Greenplum数据库正在运行,您已经获取了greenplum-path.sh,并设置了$MASTER_DATA_DIRECTORY和$GPHOME变量。
1.从Pivotal网络下载PL/R扩展包,然后将其复制到主控主机。
2.通过运行gppkg命令来安装软件扩展包。这个例子在Linux系统上安装PL/R扩展:
$ gppkg -iplr-ossv8.3.0.12_pv2.0_gpdb4.3-rhel5-x86_64.gppkg
3.重新启动数据库。
$ gpstop -r
4.源文件$GPHOME/greenplum_path.sh。
扩展和R环境安装在这个目录中:
$GPHOME/EXT/R-2.12.0 /
注意:与操作系统一起安装的某些共享库的版本可能与Greenplum数据库PL/R扩展不兼容。
如果共享库不兼容,请编辑所有GreenplumDatabase master和segment主机中的$GPHOME/greenplum_path.sh文件,并设置环境变量LD_LIBRARY_PATH以指定随PL/R扩展一起安装的位置。
export LD_LIBRARY_PATH=
$GPHOME/ext/R-2.12.0/lib64/R/lib:$LD_LIBRARY_PATH
Enabling PL/RLanguage Support
对于需要使用的每个数据库,请使用SQL命令CREATELANGUAGE或实用程序createlang注册PL/R语言。 例如,这个命令为数据库testdb注册语言:
$ createlang plr -dtestdb
PL/R is registered as an untrustedlanguage.
Uninstalling PL/R
• Remove PL/R Support for a Database
• Uninstall the Extension Package
从数据库中删除PL/R语言支持时,您在数据库中创建的PL/R过程将不再起作用。
Remove PL/RSupport for a Database
对于不需要PL/R语言的数据库,使用SQL命令DROP LANGUAGE或GreenplumDatabase droplang实用程序删除对PL/R的支持。 例如,运行此命令时,将以gpadmin用户的身份从数据库testdb中删除对PL/R的支持:
$ droplang plr -d testdb
Uninstall theExtension Package
If no databases have PL/R as aregistered language, uninstall the Greenplum PL/R extension with the gppkg utility. This example uninstalls PL/Rpackage version 1.0
$ gppkg -r plr-1.0
You can run the gppkg utility with the options -q --all to list the installed extensions andtheir versions. Restart the database.
$ gpstop -r
Migrating from PL/R from R 2.12.0 to R 3.1.0
Greenplum Database4.3.3.0及更高版本的PL/R扩展包支持R 3.1.0。
要将Greenplum Database PL/R扩展迁移到支持R 3.1.0的PL/R扩展,Pivotal建议卸载旧的PL/R扩展包,并安装支持R 3.1.0的扩展包。
有关卸载和安装PL/R扩展包的信息,请参阅卸载扩展包和安装扩展包。
安装支持R 3.1.0的PL/R扩展包后,必须重新安装R包。
R网站上的这个页面描述了对R的更改:http://cran.r-project.org/src/base/NEWS.html
有关R3.1.0和更早版本中的更改的信息,请参阅R 3.1.0及更早章节中的CHANGES一节中的信息。
示例
The followingare simple PL/R 示例.
Example 1: Using PL/R for single rowoperators
This function generates an array ofnumbers with a normal distribution using the R function rnorm().
CREATE ORREPLACE FUNCTION r_norm(n integer, mean float8,
std_devfloat8) RETURNS float8[ ] AS
$$
x<-rnorm(n,mean,std_dev)
return(x)
$$
LANGUAGE'plr';
以下CREATE TABLE命令使用r_norm函数来填充表。 r_norm函数创建一个由10个数字组成的数组。
CREATE TABLE test_norm_var
AS SELECT id, r_norm(10,0,1) as x
FROM (SELECT generate_series(1,30:: bigint) AS ID) foo
DISTRIBUTEDBY (id);
Example 2: Returning PL/R data.frames inTabular Form
Assuming your PL/R function returns anR data.frame as its output, unless you want to use arrays of arrays, somework is required to see your data.frame from PL/R as a simple SQL table:
• Create a type in a Greenplum database with the samedimensions as your R data.frame:
CREATE TYPE t1 AS ...
• Use this type when defining your PL/R function
... RETURNS SET OF t1 AS ...
Sample SQL forthis is given in the next example.
Example 3: Hierarchical Regression usingPL/R
The SQL belowdefines a type and runshierarchical regression using PL/R:
--Create TYPE to store modelresults
DROP TYPE IF EXISTSwj_model_results CASCADE;
CREATE TYPE wj_model_results AS (
cs text, coefext float,ci_95_lower float, ci_95_upper float,
ci_90_lower, float, ci_90_upperfloat, ci_80_lower,
float, ci_80_upper float);
--Create PL/R function to runmodel in R
DROP FUNCTION wj.plr.RE(responsefloat [ ], cs text [ ])
RETURNS SETOF wj_model_results AS
$$
library(arm)
y<- log(response)
cs<- cs
d_temp<- data.frame(y,cs)
m0 <- lmer (y ~ 1 + (1 | cs),data=d_temp)
cs_unique<- sort(unique(cs))
n_cs_unique<-length(cs_unique)
temp_m0<-data.frame(matrix0,n_cs_unique, 7))
for (i in1:n_cs_unique){temp_m0[i,]<-
c(exp(coef(m0)$cs[i,1] +c(0,-1.96,1.96,-1.65,1.65
-1.28,1.28)*se.ranef(m0)$cs[i]))}
names(temp_m0)<-c("Coefest", "CI_95_Lower",
"CI_95_Upper","CI_90_Lower", "CI_90_Upper",
"CI_80_Lower","CI_80_Upper")
temp_m0_v2<-data.frames(cs_unique, temp_m0)
return(temp_m0_v2)
$$
LANGUAGE 'plr';
--Run modeling plr function andstore model results in a
--table
DROP TABLE IF EXISTSwj_model_results_roi;
CREATE TABLE wj_model_results_roiAS SELECT *
FROM wj.plr_RE((SELECTwj.droi2_array),
(SELECT cs FROM wj.droi2_array));
Downloading and Installing R Packages
R包是包含R函数和数据集的模块。您可以安装R包来在Greenplum数据库中扩展R和PL/R功能。
注意:如果您展开Greenplum数据库并添加分段主机,则必须将R软件包安装在新主机的R安装中。
1.对于R包,确定所有相关的R包和每个包网址。信息可以通过从以下导航页面选择给定的包找到:
http://cran.r-project.org/web/packages/available_packages_by_name.html
例如,R包页面表示包需要以下R库:Matrix,lattice,lme4,R2WinBUGS,coda,abind,foreign和MASS。
您也可以尝试使用R CMD INSTALL命令安装软件包以确定相关软件包。
对于Greenplum数据库PL/R扩展中包含的R安装,所需的R软件包与PL/R扩展一起安装。但是,Matrix软件包需要更新的版本。
2.在命令行中,使用wget实用程序将arm包的tar.gz文件下载到Greenplum数据库主控主机:
wgethttp://cran.r-project.org/src/contrib/Archive/arm/arm_1.5-03.tar.gz
wgethttp://cran.r-project.org/src/contrib/Archive/Matrix/Matrix_0.9996875-1.tar.gz
3.使用gpscp实用程序和hosts_all文件将tar.gz文件复制到Greenplum群集的所有节点上的相同目录。 hosts_all文件包含所有Greenplum数据库段主机的列表。您可能需要root权限来执行此操作。
gpscp -fhosts_all Matrix_0.9996875-1.tar.gz =:/home/gpadmin
gpscp -f/hosts_all arm_1.5-03.tar.gz =:/home/gpadmin
4.以交互模式使用gpssh实用程序登录到每个Greenplum数据库段主机(gpssh -fall_hosts)。使用R CMDINSTALL命令从命令提示符安装软件包。请注意,这可能需要root访问权限。例如,这个R install命令将安装arm软件包的软件包。
$R_HOME/bin/RCMD INSTALL Matrix_0.9996875-1.tar.gz arm_1.5-03.tar.gz
5.确保软件包安装在所有段的$R_HOME/library目录中(gpssh可用于安装软件包)。 例如,这个gpssh命令列出了R库目录的内容。
gpssh -fall_hosts "ls $R_HOME/library"
6.测试R包是否可以加载。
这个函数执行一个简单的测试来判断是否可以加载R包:
CREATE ORREPLACE FUNCTION R_test_require(fname text)
RETURNSboolean AS
$BODY$
return(require(fname,character.only=T))
$BODY$
LANGUAGE'plr';
这个SQL命令检查是否可以加载R包arm:
SELECT R_test_require('arm');
Displaying R Library Information
您可以使用R命令行显示有关Greenplum数据库主机上安装的库和函数的信息。 您也可以从R安装中添加和删除库。 要在主机上启动R命令行,请以gadmin用户身份登录到主机,并从目录运行脚本R.
$GPHOME/ext/R-2.12.0/bin.
这个R函数列出来自R命令行的可用R包:
> library()
Display thedocumentation for a particular R package
> library(help="package_name")
> help(package="package_name")
Display thehelp file for an R function:
> help("function_name")
> ?functionname
要查看安装了哪些软件包,请使用R命令installed.packages()。 这将为每个已经安装的软件包返回一个矩阵。 下面,我们看看这个矩阵的前5行。
>installed.packages()
任何未出现在已安装软件包矩阵中的软件包必须在使用其功能之前进行安装和加载。
R包可以用install.packages()来安装:
An R packagecan be installed with install.packages():
> install.packages("package_name")
> install.packages("mypkg",dependencies = TRUE, type="source")
Load a packagefrom the R command line.
>library(" package_name ")
An R package can be removed with remove.packages
> remove.packages(" package_name")
You can use the R command -e option to run functions from thecommand line. For example, this command displays help on the R package MASS.
$ R -e ,help("MASS")'
References
http://www.r-project.org/ - The R Project home page
https://github.com/pivotalsoftware/gp-r - GitHub repository that containsinformation about using R with Pivotal Data Fabric, including Pivotal GreenplumDatabase.
https://github.com/pivotalsoftware/PivotalR - GitHub repository for PivotalR, apackage that provides an R interface to operate on Greenplum Database tablesand views that is similar to the R data.frame. PivotalR also supports using themachine learning package MADlib directly from R.
R documentation is installed with theGreenplum R package:
$GPHOME/ext/R-2.12.0/lib64/R/doc
R Functionsand Arguments
• See http://www.joeconway.com/plr/doc/plr-funcs.html
Passing Data Values in R
• See http://www.joeconway.com/plr/doc/plr-data.html
Aggregate Functions in R
See http://www.joeconway.com/plr/doc/plr-aggregate-funcs.html