在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 博客:http://tomaztsql.wordpress.com
资源:
01_Introduction_to_Microsoft_R_Service_MSSQL2016.sql
翻译1-在SQL Server 2016中介绍微软R服务的更多相关文章
-
SQL Server 2016中In-Memory OLTP继CTP3之后的新改进
SQL Server 2016中In-Memory OLTP继CTP3之后的新改进 转译自:https://blogs.msdn.microsoft.com/sqlserverstorageengin ...
-
SQL Server 2016将内置R语言?
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:随着大数据成为一个BuzzWord,和大数据相关的技术也变得越来越火热,其中就包括R语 ...
-
SQL Server 2016将内置R语言
题记:随着大数据成为一个BuzzWord,和大数据相关的技术也变得越来越火热,其中就包括R语言.而据说SQL Server 2016将会内置R语言支持? R语言作为一个存在很久的语言,在大数据热炒之后 ...
-
数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF
1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载 链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...
-
第十五周翻译-《Pro SQL Server Internals, 2nd edition》
<Pro SQL Server Internals, 2nd edition> 作者:Dmitri Korotkevitch 翻译:赖慧芳 译文: 55-58页 第三章 统计 SQL Se ...
-
第十二周翻译-《Pro SQL Server Internals, 2nd edition》
<Pro SQL Server Internals, 2nd edition> 作者:Dmitri Korotkevitch 翻译:赖慧芳 译文: 专业SQL服务器内部 了解在引擎盖下发生 ...
-
SQL Server 2016五大优势挖掘企业用户数据价值
SQL Server 2016五大优势挖掘企业用户数据价值 转载自:http://soft.zdnet.com.cn/software_zone/2016/0318/3074442.shtml 3月1 ...
-
SQL Server 2016原生支持JSON
转载原地址: http://www.cnblogs.com/lyhabc/p/4747694.html SQL Server 2005 开始支持 XML 数据类型,提供原生的 XML数据类型.XML ...
-
SQL Server系列之SQL Server 2016 中文企业版详细安装步骤(超多图)
1. 下载地址 下载地址 :https://www.microsoft.com/en-us/server-cloud/products/sql-server-2016/ 官方技术文档:https:// ...
随机推荐
-
使用属性表:VS2013上配置OpenCV
以前,windows下配置OpenCV一直不太方便:总是要手动添加lib,添加include,还要配置PATH使得程序运行时候能找到dll文件. 每次新建一个使用OpenCV的工程都要手动添加,很麻烦 ...
-
采访ServiceStack的项目领导Demis Bellot——第2部分(转)
ServiceStack是一个开源的.支持.NET与Mono平台的REST Web Services框架.InfoQ有幸与Demis Bellot深入地讨论了这个项目.在这篇两部分报道的第2部分中,我 ...
-
使用urllib进行网页爬取
# coding=gbk # 抓取开奖号码 # url:http://datachart.500.com/dlt/zoushi/jbzs_foreback.shtml ''' 对网页逐行迭代,找到目标 ...
-
iOS 高级开发 runtime(三)
三 .动态添加方法 我们可以通过runtime动态地添加方法.那么到底啥叫动态添加方法呢?动态添加方法就是当我们程序运行时才知道我们应该调用哪个方法.我们首先需要了解这一点,当我们编写完一段代码后,我 ...
-
JVM调优总结(四)-垃圾回收面临的问题
如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断.垃圾回收程序收集计数为0的对象即可.但是这种方法无法解决循环引用.所以,后来实现的垃圾判断算法中,都是从程序运行 ...
-
WCF分布式事务(EF)
才说分布式事务,首先,了解一下什么是交易. 事务有四个特性:ACID A是Atomicity,原子性.一个事务往往涉及到很多的子操作,原子性则保证这些子操作要么都做,要么都不做,而不至于出现事务的部分 ...
-
js冒泡排序及计算其运行时间
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
-
C#基础篇--静态成员、抽象成员、接口
1.静态成员: 静态成员(static).静态类与实例成员.类: 静态成员属于类所有,非静态成员属于类的实例所有. 静态成员不能标记为 Virtual,Abstract,Override,也就是说静态 ...
-
Unity性能优化的N种武器
贴图: l 控制贴图大小,尽量不要超过 1024 x1024: l 尽量使用2的n次幂大小的贴图,否则GfxDriver里会有2份贴图: l 尽量使用压缩格式减小贴图大小: l 若干种贴图合并 ...
-
centos 7.X &; centos6.X 防火墙基本命令
Centos 7 firewall 命令:查看已经开放的端口: firewall-cmd --list-ports 开启端口 firewall-cmd --zone=public --add-port ...