如何在SQL中执行Python/R

如何在SQL中执行Python/R

文章图片
你是否知道可以在T-SQL语句中编写R和Python代码? SQL Server中的机器学习服务消除了数据移动的需要。你可以在数据库中执行R/Python代码, 而不必通过网络传输大型敏感数据或丢失示例csv文件的准确性。使用SQL存储过程轻松部署R/Python代码, 使其可以在ETL流程或任何应用程序中访问。在数据库中训练和存储机器学习模型会将情报带到数据的存放位置。
你可以安装并运行任何最新的开源R/Python软件包, 以在SQL Server中的大量数据上构建深度学习和AI应用程序。 Microsoft的RevoScaleR和RevoScalePy API中还具有领先的高性能算法。将它们与开源世界中的最新创新结合使用, 可以使你为应用程序带来无与伦比的选择, 性能和可扩展性。
如何在SQL中执行Python/R

文章图片
如果你很兴奋尝试SQL Server Machine Learning Services, 请查看下面的动手教程。如果你没有在SQL Server中安装机器学习服务, 则首先要遵循此处发布的入门教程:https://blogs.msdn.microsoft.com/mlserver/2018/05/18/getting-started-在SQL Server中使用机器学习服务/
你将学到什么
本教程将介绍如何在T-SQL语句中执行R和Python的基础知识。完成本教程后, 你将知道:
  1. 如何在T-SQL语句中嵌入R和Python脚本。
  2. 如何使用基本参数指定R/Python脚本的输入和输出数据。
  3. 什么数据类型用于在SQL和Python/R进程之间传递数据。
设置先决条件
如果你没有在SQL Server上安装机器学习服务, 则首先要阅读此入门教程或观看以下视频进行设置:https://aka.ms/InstallMLServices https://aka.ms/EnableMLServices
视频伴侣
如果你喜欢通过视频学习, 也可以在YouTube上找到本教程:@https://aka.ms/ExecuteMLServices
如何在SQL中执行Python/R

文章图片
基本
打开SQL Server Management Studio并建立与服务器的连接。打开一个新查询并粘贴以下基本示例:(尽管在这些示例中使用了Python, 但你也可以使用R来完成所有操作)
EXEC sp_execute_external_script @language = N'Python', @script = N'print(3+4)'

Sp_execute_external_script是一种特殊的系统存储过程, 可在SQL Server中启用R和Python执行。有一个language参数, 允许你在Py??thon和R之间进行选择。还有一个脚本参数, 你可以在其中粘贴R或Python代码。如果没有看到输出打印件7, 请返回并查看本文中的设置步骤。
参数介绍
在讨论了一个基本示例之后, 让我们开始添加更多片段:
EXEC sp_execute_external_script @language =N'Python', @script = N' OutputDataSet = InputDataSet; ', @input_data_1 =N'SELECT 1 AS Col1';

机器学习服务通过接受任何SQL查询的输入数据参数, 在SQL和R/Python之间提供了更自然的通信。输入参数名称称为input_data_1。
你可以在python代码中看到已定义了默认变量, 以在Python和SQL之间传递数据。默认变量名称是OutputDataSet和InputDataSet你可以像以下示例一样更改这些默认名称:
EXEC sp_execute_external_script @language =N'Python', @script = N' MyOutput = MyInput; ', @input_data_1_name = N'MyInput', @input_data_1 =N'SELECT 1 AS foo', @output_data_1_name =N'MyOutput';

在执行这些示例时, 你可能已经注意到它们每个都返回带有(无列名)的结果?你可以通过在语句的末尾添加WITH RESULT SETS子句来指定要返回的列的名称, 该语句是用逗号分隔的列及其数据类型的列表。
EXEC sp_execute_external_script@language =N'Python', @script=N' MyOutput = MyInput; ', @input_data_1_name = N'MyInput', @input_data_1 =N'SELECT 1 AS foo, 2 AS bar', @output_data_1_name =N'MyOutput' WITH RESULT SETS ((MyColName int, MyColName2 int));

输入/输出数据类型
好了, 让我们再讨论一下SQL和Python之间使用的输入/输出数据类型。输入的SQL SELECT语句依赖于Python Pandas包将” DataFrame” 传递给python。从Python返回到SQL的输出也需要在Pandas DataFrame对象中。如果需要将标量值转换为DataFrame, 请参见以下示例:
EXEC sp_execute_external_script @language =N'Python', @script=N' import pandas as pd c = 1/2 d = 1*2 s = pd.Series([c, d]) df = pd.DataFrame(s) OutputDataSet = df '

变量c和d均为标量值, 可以根据需要将其添加到pandas系列中, 然后将它们转换为pandas DataFrame。此示例显示了一个更复杂的示例, 请继续阅读python pandas软件包文档以获取更多详细信息和示例:
EXEC sp_execute_external_script @language =N'Python', @script=N' import pandas as pd s = {"col1": [1, 2], "col2": [3, 4]} df = pd.DataFrame(s) OutputDataSet = df '

你现在知道了如何在T-SQL中执行R和Python的基础知识!调用EXEC sp_execute_external_script非常简单, 复制/粘贴你的R或Python代码, 然后复制/粘贴你的SQL输入选择。也许你需要做的数据转换或提取在R/Python中很简单, 但是太复杂而无法用SQL编写。也许你正在针对无法通过网络发送的海量数据训练深度神经网络。也许你想自动对进入OLTP系统的新数据进行评分/预测结果。用例非常广泛, 现在你可以使用SQL Server中的机器学习服务来提高安全性, 性能和规模。
进一步阅读
你知道吗, 你还可以在喜欢的IDE(如RStudio和Jupyter Notebooks)中编写R和Python代码, 然后将该代码的执行远程发送到SQL Server?查阅以下文档链接以了解更多信息:文档:https://aka.ms/R-RemoteSQLExecution文档:https://aka.ms/R-RemoteSQLExecution Github Jupyter Notebook示例:https://aka.ms/RemoteExecJupyter
【如何在SQL中执行Python/R】如果你想了解有关SQL的更多信息, 请查看我们的SQL for Data Science入门课程。

    推荐阅读