第二周翻译
在SQL Server 2016中介绍微软R服务
源自:http://www.sqlservercentral.com/articles/Microsoft/145393/
作者:tomakatrun,2018/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(tomaz.kastrun@gmail.com)
Twitter:@tomaz_tsql