SQL中的远程Python和R

本文概述

  • 介绍
  • 环境设置先决条件
  • 数据库设置(仅本教程需要)
  • 定义要发送到SQL Server的函数
  • 将执行发送到SQL
  • 学到更多
本文了解如何从Jupyter Notebook远程发送R和Python执行到SQL服务器。
SQL中的远程Python和R

文章图片
介绍 你是否知道可以从Jupyter Notebook或任何IDE在SQL Server中远程执行R和Python代码? SQL Server中的机器学习服务消除了移动数据的需求。你可以在数据库中执行R / Python代码, 而不是通过网络传输大型敏感数据或在ML训练中失去使用示例csv文件的准确性。你可以在任何地方的Jupyter Notebooks, RStudio, PyCharm, VSCode, Visual Studio中工作, 然后将函数执行发送到SQL Server, 从而将智能带到数据所在的地方。
本教程将向你展示如何从Juptyter笔记本发送python代码以在SQL Server中执行的示例。相同的原则也适用于R和任何其他IDE。如果你喜欢通过视频学习, 那么本教程也会在YouTube上发布:
SQL中的远程Python和R

文章图片
环境设置先决条件 1.在SQL Server上安装ML Services 为了使R或Python在SQL中执行, 首先需要安装和配置Machine Learning Services功能。请参阅此操作指南。
2.通过Microsoft的Python客户端安装RevoscalePy 为了从Jupyter Notebook将Python执行发送到SQL, 你需要使用Microsoft的RevoscalePy软件包。要获取RevoscalePy, 请下载并安装Microsoft的ML Services Python客户端。文档页面或直接下载链接(对于Windows)。
【SQL中的远程Python和R】下载后, 以管理员身份打开powershell并导航到下载文件夹。使用以下命令开始安装(随意定制安装文件夹):。\ Install-PyForMLS.ps1 -InstallFolder” C:\ Program Files \ MicrosoftPythonClient”
请耐心等待, 安装可能需要一些时间。安装完成后, 导航到安装的新路径。让我们创建一个空文件夹并打开Jupyter Notebooks:mkdir JupyterNotebooks; 。 cd JupyterNotebooks; .. \ Scripts \ jupyter-notebook
使用Python 3解释器创建一个新笔记本:
SQL中的远程Python和R

文章图片
要测试是否已完成所有设置, 请在第一个单元格中导入revoscalepy并执行。如果没有错误消息, 则准备前进。
SQL中的远程Python和R

文章图片
数据库设置(仅本教程需要) 对于本教程的其余部分, 如果你不想复制粘贴所有代码, 则可以从Github克隆此Jupyter Notebook。此数据库设置仅需一步即可, 以确保你拥有与本教程相同的数据。你无需执行任何这些设置步骤即可使用自己的数据。
1.创建一个数据库 修改服务器的连接字符串, 然后使用pyodbc创建新数据库。
import pyodbc# creating a new db to load Iris sample in new_db_name = "MLRemoteExec" connection_string = "Driver=SQL Server; Server=localhost\MSSQLSERVER2017; Database={0}; Trusted_Connection=Yes; " cnxn = pyodbc.connect(connection_string.format("master"), autocommit=True) cnxn.cursor().execute("IF EXISTS(SELECT * FROM sys.databases WHERE [name] = '{0}') DROP DATABASE {0}".format(new_db_name)) cnxn.cursor().execute("CREATE DATABASE " + new_db_name) cnxn.close()print("Database created")

2.从SkLearn导入虹膜样本 Iris是适用于初学者数据科学教程的流行数据集。默认情况下, 它包含在sklearn软件包中。
from sklearn import datasets import pandas as pd# SkLearn has the Iris sample dataset built into the package iris = datasets.load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names)

3.使用RecoscalePy API创建表并加载虹膜数据 (你也可以使用pyodbc, sqlalchemy或其他软件包执行此操作)
from revoscalepy import RxSqlServerData, rx_data_step# Example of using RX APIs to load data into SQL table. You can also do this with pyodbc table_ref = RxSqlServerData(connection_string=connection_string.format(new_db_name), table="Iris") rx_data_step(input_data = http://www.srcmini.com/df, output_file = table_ref, overwrite = True)print("New Table Created: Iris") print("Sklearn Iris sample loaded into Iris table")

定义要发送到SQL Server的函数 编写要在SQL中执行的所有python代码。在此示例中, 我们在虹膜数据集上创建一个散布矩阵, 并且仅将.png的字节流返回给Jupyter Notebooks以在客户端上进行渲染。
def send_this_func_to_sql():from revoscalepy import RxSqlServerData, rx_import from pandas.tools.plotting import scatter_matrix import matplotlib.pyplot as plt import io# remember the scope of the variables in this func are within our SQL Server Python Runtime connection_string = "Driver=SQL Server; Server=localhost\MSSQLSERVER2017; Database=MLRemoteExec; Trusted_Connection=Yes; "# specify a query and load into pandas dataframe df sql_query = RxSqlServerData(connection_string=connection_string, sql_query = "select * from Iris") df = rx_import(sql_query)scatter_matrix(df)# return bytestream of image created by scatter_matrix buf = io.BytesIO() plt.savefig(buf, format="png") buf.seek(0)return buf.getvalue()

将执行发送到SQL 现在, 我们终于完成了设置, 请查看发送远程执行的真正难度!首先, 导入revoscalepy。创建一个sql_compute_context, 然后使用RxExec将任何函数的执行无缝发送到SQL Server。无需将原始数据从SQL传输到Jupyter Notebook。所有计算都在数据库内进行, 并且仅返回了图像文件以进行显示。
from IPython import display import matplotlib.pyplot as plt from revoscalepy import RxInSqlServer, rx_exec# create a remote compute context with connection to SQL Server sql_compute_context = RxInSqlServer(connection_string=connection_string.format(new_db_name))# use rx_exec to send the function execution to SQL Server image = rx_exec(send_this_func_to_sql, compute_context=sql_compute_context)[0]# only an image was returned to my jupyter client. All data remained secure and was manipulated in my db. display.Image(data=http://www.srcmini.com/image)

尽管此示例对于Iris数据集来说是微不足道的, 但请想象一下你现在解锁的其他规模, 性能和安全性功能。你可以使用任何最新的开源R / Python软件包在SQL Server中的大量数据上构建深度学习和AI应用程序。我们还在Microsoft的RevoScaleR和RevoScalePy API中提供了领先的高性能算法。将它们与开源世界中的最新创新结合使用, 可以使你为应用程序带来无与伦比的选择, 性能和可扩展性。
学到更多 查阅SQL Machine Learning Services文档, 以了解如何使用SQL存储过程轻松部署R / Python代码, 从而使其在ETL流程或任何应用程序中均可访问。在数据库中训练和存储机器学习模型, 从而将智能带到数据所在的地方。
SQL Server中的基本R和Python执行:https://aka.ms/BasicMLServicesExecution
在SQL Server中设置机器学习服务:https://aka.ms/SetupMLServices
Github上的端到端教程解决方案:https://microsoft.github.io/sql-ml-tutorials/
其他YouTube教程:
  • 如何安装SQL Server机器学习服务:https://aka.ms/InstallMLServices
  • 如何启用SQL Server机器学习服务:https://aka.ms/EnableMLServices
  • SQL中R和Python执行的基础知识:https://aka.ms/ExecuteMLServices
如果你有兴趣了解更多信息, 请查看srcmini的入门课程。
  • 数据科学Python简介
  • R介绍
  • SQL for Data Science简介

    推荐阅读