在SQL Server 2016中介绍微软R服务

SQL Server 2016中介绍微软R服务

源自:http://www.sqlservercentral.com/articles/Microsoft/145393/

作者:tomakatrun2018/09/14(首次出版:2016/09/15)

翻译:赖慧芳、许雅莉

译文:

 

R是一种统计编程语言,主要用于统计计算和分析、数据挖掘和机器学习,它是一种非常强大的图形和数据可视化工具。它是一个自由的软件环境,是跨平台的(UNIX、Windows、MacOS),大部分的库和包开发都是由社区工作驱动的。

 

SQL Server 2016中提供了R服务,微软正在为更灵活的数据分析提供R语言,使共享数据更加容易,并克服内存(RAM)的限制。这意味着将R集成到SQL Server中,使得对更大的数据集、实时OLTP分析和任何类型的大数据分析(如Hadoop、Teradata和其他数据)的分析都比以前容易得多。

 

(r)积分

 

SQL Server R集成之前,许多用户,以及许多组织,在克服成功数据分析的障碍方面遇到了不同的挑战。微软已经强调并克服了一些主要问题。随着R集成到SQL Server环境中,数据科学的知识现在可以更容易、更快速地共享,因为它从数据科学家转移到数据工程师和数据专员。这种卸载这项工作的能力也代表了生产力的提高,因为数据科学家现在可以专注于核心分析,缩短部署预测模型的时间,并促进实时分析。

现有的基础设施(SQL Server数据库、角色、访问、安全)也有助于实现结果,因为SQL Server中的R被构建为在企业规模上工作,并且能够处理大量的数据。R的使用将超越一个小的数据库,并帮助将数据引入云计算和数据在一起更紧密地联系在一起。最后,这个R环境的构建是为了更快更好地响应变化(在更快地准备新数据模型、部署和使用机器学习算法方面)。

产品族

 

微软在2015年4月收购了Revolution analytics。除了这次收购之外,两个版本的R引擎还在一起:为商业目的而为社区和革命R企业(abbrof:RRE)的革命R Open(abbrof:RRO)。

在收购之后,微软保持了几乎相同的革命,并成为了微软的开放市场。革命R企业成为SQL Server R服务(这是在SQL Server上的Windows操作系统的Microsoft R服务器的数据库版本)和Microsoft R服务器;两种产品,都已经在革命R企业中使用了。Microsoft R服务器(也称为Microsoft R服务器独立)主要用于在Hadoop或Teradata系统上使用Linux(Red Hat或SUSE Linux发行版),支持与Azure云的连接。

因此,微软R语言的产品系列可以作为以下产品:

微软R打开 微软R客户 微软R服务器 SQL Server R服务

微软R服务器的组件如下:

Microsft R打开

R Open是微软增强的R发行版,它是百分之百开源的。该版本与任何现有的R引擎完全兼容,使R代码与现有代码完全兼容。在使用数学内核库(MKL)进行矢量/矩阵的数学运算时,这个Microsoft R Open distribution具有额外的高性能多线程增强(无论是在Windows上还是在Linux平台上)。

这个版本与CRAN存储库完全兼容。GitHub包也可以在R Open中使用。不幸的是,R Open受到可用内存的限制,这意味着只有能够适应计算机内存的数据才能被处理。专有的标量算法和函数(撤销标量库)不会在R Open版本下运行(但是在Microsoft客户端和Microsoft Server版本中是可用的)。

R Open将在任何SQL Server 2016版上运行,除了使用工具的Express或Express。Microsoft R客户端/服务器只在企业版或开发版上运行。

微软R客户

R客户端版本是一个完全免费的版本,建立在微软R Open之上。数据科学家可以使用任何基于克兰/github的库,这一版本引入了强大的撤销标量库,允许重并行和多线程计算。撤销标量库是一个使用标量技术的库,它的专有功能用于并行计算。

R客户端有一些限制。首先,内存仅限于本地内存,这意味着数据必须适合本地内存。标量函数可以使用并行计算,但是处理只局限于两个线程(不管计算机有更多的核心和支持多进程的操作)。所有的计算都局限于客户端功能:磁盘、ram和速度。

关于Microsoft R客户端的一个好处是,用户可以将计算操作推送到Microsoft R服务器或SQL Server R服务和用于Hadoop的R服务器,以获得更好的性能。关于R客户端的重要部分是,允许用户在不安装Microsoft R服务器的情况下仍然运行高性能分析,但仍然可以通过使用Microsoft R服务器的计算能力获得所有的好处。

Microsoft R客户端与以下版本的R服务器兼容:Linux的Microsoft R服务器,Teradata DB的Microsoft R服务器,Hadoop的Microsoft R服务器,Microsoft R HDInsight,以及两个版本的Microsoft R服务器——独立的和SQL Server R服务。

微软R服务器

Microsoft R服务器是微软R产品系列中最常用的R版本,特别是用于企业分析的目的。与R Open/R客户端版本一样,它支持所有的统计分析、数据挖掘和预测分析和机器学习,但也支持大数据。R服务器也与CRAN/Github/bio导体库存储库完全兼容,其功能的标量算法能够并行和多三次数据处理和计算,数据比服务器内存suze大得多。基于rrs的应用程序将能够使用ConnectR使用多个平台,并可以跨多平台部署(使用DeployR函数)。这个版本也提供了磁盘可伸缩性。

SQL Server R服务(数据库中的Microsft R服务器)

Microsoft SQL Server R服务本质上是Microsoft R服务器版本的数据库版本,它覆盖了大多数用于可伸缩和高性能环境的标量算法。内存和磁盘将由您的SQL Server实例管理。为了支持R的执行,将在本地安装一个额外的SQL Server服务,称为SQL Server可信Launchpad。另外,Microsoft R客户端能够在SQL Server和R服务器之间进行通信;有一点不同,部署和ConnectR函数将无法工作,因为它们是为其他目的而准备的。但是,正如已经说过的,在这个数据库版本中也可以使用标量算法。

安装

Microsoft R服务器总是作为一个独立的版本单独安装。因此,一旦你安装了SQL Server 2016,你也需要安装R服务器,如果你想让它安装在你的服务器上的话。

SQL Server R服务安装将作为R服务(在数据库中)的特性选择提示。

在安装之前(在数据库或服务器版本的两种情况下),您需要同意安装R Open,这是所有版本的基本分布。

在安装服务器版本或数据库版本之后,将安装并提供额外的撤销标量库函数。

R客户端和R Open可从微软的MSDN网站下载。R Open可在微软的微软网站(https://mran.microsoft.com/)和微软R客户端下载站点(aka.ms/rclient/下载)的R客户端使用。对于R客户端,您还必须下载IDE环境和所有附带的R库(用于工作)。对于IDE环境,我推荐Visual Studio的R工具。

在这篇文章中,我们将重点讨论SQL Server R服务,作为Microsoft R服务器的数据库版本。以及如何处理外部存储过程。

安装后期

一旦您成功地安装了SQL Server 2016,并使用了数据库R服务,就需要完成一些额外的操作。这样做的用户必须在服务器上有管理员权限。

SSMS中,您需要检查配置是否“外部脚本启用”。

EXEC SP_CONFIGURE 'external scripts enabled';

GO

您需要将runvalue设置为1。默认情况下,它被设置为0,因此执行以下操作将改变这一点:

-- Enable execute external script

EXEC SP_CONFIGURE 'external scripts enabled', 1;

GO

RECONFIGURE;

GO

在此之后,您将需要重新启动MSSQLServer实例。在服务中,还要检查SQL Server Launchpad(MSSQLLaunchpad)正在运行。

在此之后,您应该能够使用T-SQL开始在SSMS中使用R。

使用spexecute外部脚本运行R代码

有了SQL Server 2016,一个新的外部存储过程,spexecuteexternal alscript,是可用的。目前,它只用于运行基于R的脚本,但在将来,我们可能也会得到其他语言的支持。Python被认为是其中之一。这个存储过程在一个外部位置执行所提供的脚本——在这个例子中是R服务。

为了说明这个过程是如何工作的,让我们看一看我们想要进行统计分析的数据集:

USE WideWorldImporters;

GO

SELECT
       

SUM(il.Quantity) AS InvoiceQ       

,SUM(il.ExtendedPrice) AS InvoiceV       

,c.CustomerID       

,c.CustomerCategoryID
             

FROM                    

 sales.InvoiceLines AS il              

INNER JOIN sales.Invoices AS i             

 ON il.InvoiceID = i.InvoiceID              

INNER JOIN sales.Customers AS c             

 ON c.CustomerID = i.CustomerID

GROUP BY       

 c.CustomerID       

,c.CustomerCategoryID

这个查询返回widecustomer dimporter数据库中每个客户的发票的价值和数量。为了找到更多的客户洞察,我们希望了解客户类别和每个客户的发票价值之间的相关性。为了做到这一点,我们将把来自SQL Server数据库的数据与相应的R脚本推送到R服务器。

代码如下:

EXECUTE sp_execute_external_script

        @language = N'R'

       ,@script = N'   #Calculating correlations between two variables

                        df <- data.frame(value_of_correlation = cor(Customers_by_invoices$InvoiceV, Customers_by_invoices$CustCat,

                        use="complete.obs", method="spearman"))

                        OutputDataSet<-df'

       ,@input_data_1 = N'SELECT

                                          SUM(il.Quantity) AS InvoiceQ

                                         ,SUM(il.ExtendedPrice) AS InvoiceV

                                         ,c.CustomerID AS Customer

                                         ,c.CustomerCategoryID AS CustCat

                                         FROM sales.InvoiceLines AS il

                                         INNER JOIN sales.Invoices AS i

                                         ON il.InvoiceID = i.InvoiceID

                                         INNER JOIN sales.Customers AS c

                                         ON c.CustomerID = i.CustomerID

                                         GROUP BY

                                                 c.CustomerID

                                                ,c.CustomerCategoryID'

       ,@input_data_1_name = N'Customers_by_invoices'

WITH RESULT SETS ((

                   value_of_correlation FLOAT(20)

                  ));

GO

该查询的结果以SSMS中的一列形式呈现。

这个执行的结果可以存储在SQL Server中的表或变量中,以便以后的用途和分析。

spexecute外部脚本的过程使用以下参数:

@language——定义外部语言的名称。在本文的时候,只支持R语言。 @script-声明R脚本,它将用于R服务器中的数据计算和数据分析。@script参数必须有定义的输入和输出数据集,因此R服务器理解输入的数据以及计算的结果。输入数据集是用参数@inputdata1及其数据集的名称来定义的

@inputdata1name,而输出数据是R脚本返回的结果。计算结果必须始终以数据框架的形式呈现。 @inputdata1-交易SQL是这个参数的直接值,它只能容纳一个SELECT语句。Select list是@script参数也将用于分析的内容,因此要格外精确地在Select语句中声明什么。 @inputdata1name——是通过在参数@inputdata1中交易SQL而返回的结果的名称,并用于@script参数中的表示。

因此,这个过程只返回一个带有一个值的列,这必须与@script参数中的输出数据定义一致。 R脚本只是简单的一行代码:

df <- data.frame(value_of_correlation = cor(Customers_by_invoices$InvoiceV, Customers_by_invoices$CustCat,  use="complete.obs", method="spearman"))

OutputDataSet<-df

它使用两个变量:客户通过发票$InvoiceV,客户通过发票$CustCat来计算两个变量之间的长矛相关系数。结果以可变df的格式存储在一个名为valueof相关性的数据帧的格式中。我用了斯皮尔曼系数因为一个变量是序数和一个间隔;如果两者都是间隔的话,我可以用皮尔逊相关系数。

总结

使用R服务和R服务器可以通过快速数据计算和很少(如果有的话)数据移动带来更好的数据洞察力。特别是在R服务器上,性能将得到增强,数据集的大小将不再受内存限制。这个工具对于任何组织和企业环境都是完美的,它希望缩短在以后的部分中创建日常和定制统计分析的时间,我们也将看到R作为一个统计和预测工具可以被使用。

作者:tomakatrun([email protected]) Twitter:@tomaz_tsql 博客:http://tomaztsql.wordpress.com

资源:

01_Introduction_to_Microsoft_R_Service_MSSQL2016.sql

 

猜你喜欢

转载自www.cnblogs.com/13950784855xu/p/9656469.html