Chuyển đến nội dung chính

Python và R từ xa trong SQL

Tìm hiểu cách gửi lệnh thực thi R và Python từ xa tới SQL Server từ Jupyter Notebooks.
· 7 phút đọc

Khám phá cùng AI

run r and python in sql server from any ide

Giới thiệu

Bạn có biết rằng bạn có thể thực thi mã R và Python từ xa trong SQL Server từ Jupyter Notebooks hoặc bất kỳ IDE nào không? Machine Learning Services trong SQL Server loại bỏ nhu cầu di chuyển dữ liệu. Thay vì truyền dữ liệu lớn và nhạy cảm qua mạng hoặc làm giảm độ chính xác khi huấn luyện ML bằng các tệp csv mẫu, bạn có thể thực thi mã R/Python ngay trong cơ sở dữ liệu của mình. Bạn có thể làm việc trong Jupyter Notebooks, RStudio, PyCharm, VSCode, Visual Studio, ở bất cứ đâu bạn muốn, rồi gửi việc thực thi hàm tới SQL Server, đưa trí tuệ đến đúng nơi dữ liệu của bạn đang sống.

Hướng dẫn này sẽ minh họa cách bạn có thể gửi mã python từ Jupyter notebooks để thực thi trong SQL Server. Nguyên tắc tương tự cũng áp dụng cho R và bất kỳ IDE nào khác. Nếu bạn thích học qua video, hướng dẫn này cũng đã được đăng trên YouTube tại đây:

https://youtu.be/D5erljpJDjE

How To Run R & Python in SQL Server from Jupyter Notebooks or any IDE

Điều kiện tiên quyết khi thiết lập môi trường

1. Cài đặt ML Services trên SQL Server

Để R hoặc Python có thể thực thi trong SQL, trước tiên bạn cần cài đặt và cấu hình tính năng Machine Learning Services. Xem hướng dẫn từng bước này.

2. Cài đặt RevoscalePy qua Python Client của Microsoft

Để gửi lệnh thực thi Python tới SQL từ Jupyter Notebooks, bạn cần dùng gói RevoscalePy của Microsoft. Để lấy RevoscalePy, hãy tải và cài đặt Microsoft ML Services Python Client. Trang tài liệu hoặc Liên kết tải trực tiếp (cho Windows).

Sau khi tải về, mở PowerShell với quyền quản trị và điều hướng tới thư mục tải về. Bắt đầu cài đặt với lệnh này (bạn có thể tùy chỉnh thư mục cài đặt): .\Install-PyForMLS.ps1 -InstallFolder "C:\Program Files\MicrosoftPythonClient"

Hãy kiên nhẫn vì quá trình cài đặt có thể mất một lúc. Khi hoàn tất, điều hướng đến đường dẫn mới bạn đã cài đặt. Tạo một thư mục trống và mở Jupyter Notebooks: mkdir JupyterNotebooks; cd JupyterNotebooks; ..\Scripts\jupyter-notebook

Tạo một notebook mới với trình thông dịch Python 3:

create new notebook with python 3 interpreter

Để kiểm tra mọi thứ đã sẵn sàng, hãy import revoscalepy ở ô đầu tiên và thực thi. Nếu không có thông báo lỗi, bạn có thể tiếp tục.

import revoscalepy

Thiết lập cơ sở dữ liệu (Chỉ yêu cầu cho hướng dẫn này)

Cho phần còn lại của hướng dẫn, bạn có thể nhân bản Jupyter Notebook này từ Github nếu bạn không muốn sao chép dán toàn bộ mã. Thiết lập cơ sở dữ liệu này chỉ cần thực hiện một lần để đảm bảo bạn có cùng dữ liệu như trong hướng dẫn này. Bạn không cần thực hiện bất kỳ bước thiết lập nào dưới đây nếu dùng dữ liệu của riêng bạn.

1. Tạo cơ sở dữ liệu

Chỉnh sửa chuỗi kết nối cho máy chủ của bạn và dùng pyodbc để tạo cơ sở dữ liệu mới.

 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. Nhập mẫu Iris từ SkLearn

Iris là một bộ dữ liệu phổ biến cho các hướng dẫn nhập môn khoa học dữ liệu. Nó được bao gồm sẵn trong gói 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. Dùng các API RecoscalePy để tạo bảng và nạp dữ liệu Iris

(Bạn cũng có thể làm điều này với pyodbc, sqlalchemy hoặc các gói khác)

 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 = df, output_file = table_ref, overwrite = True)

print("New Table Created: Iris")
print("Sklearn Iris sample loaded into Iris table")

Định nghĩa một hàm để gửi đến SQL Server

Viết bất kỳ mã python nào bạn muốn thực thi trong SQL. Trong ví dụ này, chúng ta tạo một scatter matrix trên bộ dữ liệu iris và chỉ trả về luồng byte của tệp .png về Jupyter Notebooks để hiển thị trên máy khách.

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()

Gửi lệnh thực thi tới SQL

Giờ mọi thứ đã sẵn sàng, hãy xem việc gửi thực thi từ xa dễ đến thế nào! Trước hết, import revoscalepy. Tạo một sql_compute_context, rồi gửi việc thực thi của bất kỳ hàm nào một cách liền mạch tới SQL Server với RxExec. Không có dữ liệu thô nào phải chuyển từ SQL sang Jupyter Notebook. Tất cả tính toán diễn ra trong cơ sở dữ liệu, và chỉ tệp ảnh được trả về để hiển thị.

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=image)

Dù ví dụ này khá đơn giản với bộ dữ liệu Iris, hãy hình dung quy mô, hiệu năng và khả năng bảo mật bổ sung mà bạn có thể mở khóa. Bạn có thể dùng bất kỳ gói R/Python mã nguồn mở mới nhất nào để xây dựng ứng dụng Học sâu và AI trên lượng dữ liệu lớn trong SQL Server. Chúng tôi cũng cung cấp các thuật toán tiên tiến, hiệu năng cao trong các API RevoScaleR và RevoScalePy của Microsoft. Kết hợp chúng với những đổi mới mới nhất trong thế giới mã nguồn mở sẽ giúp bạn mang đến cho ứng dụng khả năng lựa chọn phong phú, hiệu năng vượt trội và khả năng mở rộng tối đa.

Tìm hiểu thêm

Xem hướng dẫn của DataCamp về Cách thực thi Python/R trong SQL.

Tham khảo Tài liệu SQL Machine Learning Services để tìm hiểu cách bạn có thể dễ dàng triển khai mã R/Python với stored procedure của SQL, giúp chúng sẵn sàng trong quy trình ETL hoặc cho bất kỳ ứng dụng nào. Huấn luyện và lưu trữ mô hình học máy trong cơ sở dữ liệu, đưa trí tuệ đến nơi dữ liệu của bạn đang sống.

Thực thi cơ bản R và Python trong SQL Server: https://aka.ms/BasicMLServicesExecution

Thiết lập Machine Learning Services trong SQL Server: https://aka.ms/SetupMLServices

Các giải pháp hướng dẫn end-to-end trên Github: https://microsoft.github.io/sql-ml-tutorials/

Các hướng dẫn YouTube khác:

Nếu bạn muốn học thêm, hãy xem các khóa nhập môn của DataCamp.

Chủ đề

Liên quan