Hôm nay chúng ta sẽ xem xét cách chạy mã Python trong cơ sở dữ liệu Microsoft SQL Server, bạn sẽ tìm hiểu những gì bạn cần làm để kích hoạt tính năng này và cách chạy mã Python bằng cách sử dụng lệnh T-SQL thông thường
CÁC ĐIỀU KIỆN CẦN THIẾT VÀ CHUẨN BỊ SQL SERVERĐể thực thi mã Python trong cơ sở dữ liệu SQL Server, phải đáp ứng một số điều kiện nhất định
MICROSOFT SQL SERVER LÀ PHIÊN BẢN ÍT NHẤT 2017Hỗ trợ cho ngôn ngữ Python chỉ xuất hiện trong Microsoft SQL Server 2017, do đó, chỉ có thể thực thi mã trên Python bắt đầu từ phiên bản SQL Server 2017
PHẢI CÀI ĐẶT “DỊCH VỤ MÁY HỌC”Trong Microsoft SQL Server 2016, lần đầu tiên có thể thực hiện các lệnh trực tiếp trong cơ sở dữ liệu bằng các ngôn ngữ khác, đặc biệt là ngôn ngữ R
Vào năm 2017, thành phần này được đặt tên là “Dịch vụ đào tạo máy”, như đã lưu ý, đã thêm hỗ trợ cho ngôn ngữ Python
Do đó, để chạy mã Python, trong cơ sở dữ liệu SQL Server phải được cài đặt “Dịch vụ đào tạo máy”, điều này làm tăng thêm khả năng của chúng tôi
Nếu thành phần “Machine Training Services” chưa được cài đặt thì việc chạy mã Python trong cơ sở dữ liệu Microsoft SQL Server sẽ không hoạt động
“DỊCH VỤ ĐÀO TẠO MÁY” TRONG SQL SERVER LÀ GÌDịch vụ đào tạo máy là một thành phần SQL Server cho phép bạn chạy tập lệnh bằng Python và R với dữ liệu quan hệ
Các lệnh được thực thi trong cơ sở dữ liệu mà không cần di chuyển những dữ liệu này ra bên ngoài SQL Server, chẳng hạn như trên mạng tới một máy chủ khác, giúp mở rộng đáng kể các tính năng tiêu chuẩn của SQL Server và ngôn ngữ T-SQL
CÀI ĐẶT THÀNH PHẦN “DỊCH VỤ ĐÀO TẠO MÁY”Nếu bạn chưa cài đặt “Machine Training Services”, bạn có thể cài đặt lại chúng. Để thực hiện việc này, hãy chạy “Trung tâm cài đặt máy chủ SQL“, trên tab “Cài đặt”, chọn “Cài đặt mới của phiên bản SQL Server bị cô lập hoặc thêm các thành phần vào bản cài đặt hiện có“
Sau đó, trên tab “Lựa chọn thành phần” trong phần “Dịch vụ hạt nhân DBMS”, đánh dấu thành phần “Dịch vụ đào tạo máy [trong cơ sở dữ liệu]” cũng như ngôn ngữ bạn muốn sử dụng, trong trường hợp của chúng tôi là Python
Sau đó nhấp vào “Chấp nhận” trên trang “Chấp nhận cài đặt”
Sau khi cài đặt xong, tốt hơn hết là khởi động lại máy tính
TRÊN MÁY CHỦ SQL, BẠN PHẢI CHO PHÉP SỬ DỤNG CÁC TẬP ĐOẠN BÊN NGOÀIGhi chú. Tùy chọn cài đặt này yêu cầu truy cập Internet. Nếu không có truy cập internet, bạn có thể sử dụng trình cài đặt độc lập
Theo mặc định, việc thực thi các tập lệnh bên ngoài bằng ngôn ngữ Python trong Microsoft SQL Server bị cấm, vì vậy trước tiên bạn phải bật tính năng này trên SQL Server
CÁCH CHO PHÉP SỬ DỤNG Script BÊN NGOÀI TRONG SQL SERVERĐể cho phép sử dụng tập lệnh bên ngoài bằng ngôn ngữ Python, bạn phải bật tham số hệ thống “bật tập lệnh bên ngoài” trong SQL Server, điều này được thực hiện bằng quy trình hệ thống sp_configure
sp_configure 'external scripts enabled', 1;
RECONFIGURE WITH OVERRIDE
Sau đó, bạn nên khởi động lại dịch vụ máy chủ SQL
Để kiểm tra giá trị của tham số, bạn có thể thực hiện lệnh sau
EXEC sp_configure 'external scripts enabled'
Nếu giá trị tham số run_value là 1, thì việc sử dụng các tập lệnh bên ngoài trong SQL Server được cho phép
THỰC HIỆN MÃ PYTHON TRONG MICROSOFT SQL SERVER TRONG T-SQLMã Python được thực thi, cũng như mã của các ngôn ngữ khác, chẳng hạn như R, trong Microsoft SQL Server bằng cách sử dụng thủ tục lưu trữ hệ thống sp_execute_external_script
sp_execute_external_script là một thủ tục được lưu trữ trong hệ thống thực thi tập lệnh bằng các ngôn ngữ được hỗ trợ [R, Python], được chuyển dưới dạng tham số đầu vào
CÚ PHÁP SP_EXECUTE_EXTERNAL_SCRIPTsp_execute_external_script
@language = N'language',
@script = N'script'
[ , @input_data_1 = N'input_data_1' ]
[ , @input_data_1_name = N'input_data_1_name' ].
[ , @output_data_1_name = N'output_data_1_name' ].
[ , @parallel = 0 | 1 ]
RECONFIGURE WITH OVERRIDE
0RECONFIGURE WITH OVERRIDE
1RECONFIGURE WITH OVERRIDE
2
Ở đâu,
- @language — tham số trong đó ngôn ngữ tập lệnh được chỉ định;
- @script — văn bản kịch bản;
- @input_data_1 — tham số chỉ định dữ liệu đầu vào được sử dụng bởi tập lệnh bên ngoài ở dạng truy vấn T-SQL;
- @input_data_1_name — tham số chỉ định tên của biến được sử dụng để biểu thị truy vấn được xác định trong @input_data_1;
- @output_data_1_name — tham số chỉ định tên biến trong tập lệnh bên ngoài chứa dữ liệu được trả về SQL Server sau lệnh gọi thủ tục được lưu trữ;
- @parallel — tham số bao gồm việc thực thi song song các tập lệnh R [giá trị 1]. Giá trị mặc định cho tham số này là 0 [không có song song];
- @params - khai báo các tham số đầu vào được sử dụng trong tập lệnh bên ngoài;
- @parameter1 — danh sách các giá trị của tham số đầu vào, được sử dụng trong tập lệnh bên ngoài;
- VỚI TẬP HỢP KẾT QUẢ - theo mặc định, tập hợp kết quả được trả về bởi thủ tục sp_execute_external_script được hiển thị với các cột không tên. Để đặt tên cho các cột của tập hợp kết quả, hãy sử dụng câu VỚI BỘ KẾT QUẢ cho lệnh EXECUTE
Hãy chạy một số ví dụ
Ví dụ 1 — Xuất kết quả thành đầu ra dữ liệu tiêu chuẩnTrong trường hợp này, chúng tôi chỉ cần thực hiện một số tính toán và đưa kết quả vào đầu ra dữ liệu tiêu chuẩn
RECONFIGURE WITH OVERRIDE
3RECONFIGURE WITH OVERRIDE
4RECONFIGURE WITH OVERRIDE
5RECONFIGURE WITH OVERRIDE
6RECONFIGURE WITH OVERRIDE
7RECONFIGURE WITH OVERRIDE
8RECONFIGURE WITH OVERRIDE
9EXEC sp_configure 'external scripts enabled'
0
Như bạn có thể thấy, trong tham số ngôn ngữ, chúng tôi đã chỉ định rằng chúng tôi sẽ chạy mã trên Python, sau đó trong tham số tập lệnh, chúng tôi đã tự viết mã, nơi chúng tôi tạo một số biến, thêm giá trị của chúng và tạo thông báo bằng lệnh in
Kết quả là chúng tôi nhận được các thông báo này trong đầu ra tiêu chuẩn của các thông báo, chẳng hạn như thể chúng tôi đã thực thi lệnh in cùng tên trong T-SQL
Ví dụ 2 — Xuất kết quả ở dạng bảngHãy làm cho mã Python của chúng ta phức tạp hơn một chút và tạo dữ liệu trên đó theo cách để có được nó ở dạng thông thường của chúng ta, tôi. e. dạng bảng
Đối với điều này, chúng tôi sẽ sử dụng thư viện Pandas và đối tượng Sê-ri, là mảng dữ liệu được lập chỉ mục một chiều
Chúng ta sẽ tạo tập dữ liệu kết quả bằng cách sử dụng lệnh WITH RESULT SETS, hướng dẫn này sẽ giúp chúng ta chỉ định tên cột và kiểu dữ liệu của nó
EXEC sp_configure 'external scripts enabled'
1RECONFIGURE WITH OVERRIDE
5EXEC sp_configure 'external scripts enabled'
3EXEC sp_configure 'external scripts enabled'
4EXEC sp_configure 'external scripts enabled'
5EXEC sp_configure 'external scripts enabled'
6EXEC sp_configure 'external scripts enabled'
7EXEC sp_configure 'external scripts enabled'
8
Ở đây chúng ta sẽ xem xét một ví dụ về truyền dữ liệu, e. g. dữ liệu dạng bảng, nhận được với một truy vấn CHỌN đơn giản cho một thủ tục
Với mục đích này, trước tiên chúng tôi sẽ tạo văn bản của truy vấn và lưu nó vào một biến, để thuận tiện và rõ ràng về mã
Sau đó, chúng tôi sử dụng tham số @input_data_1 để chuyển văn bản truy vấn này vào thủ tục bằng một biến [về nguyên tắc, chúng tôi có thể chỉ định chính văn bản truy vấn]
Sử dụng tham số @input_data_1_name, chúng tôi gọi là tập kết quả của dữ liệu truy vấn mà chúng tôi đã chỉ định trong tham số @input_data_1 sẽ được đặt tên trong mã Python, tôi. e. ở đây chúng tôi chỉ định tên của biến sẽ chứa dữ liệu đến của chúng tôi. Ví dụ, tôi đặt tên biến này là Input_Data, và trong mã chúng ta có thể làm việc với biến này để sử dụng dữ liệu dạng bảng đến
Trong trường hợp này, chúng tôi chỉ chuyển dữ liệu và chúng tôi không làm bất cứ điều gì với nó, chúng tôi chỉ trả lại dữ liệu, đối với tham số OutputDataSet này, chúng tôi đã gán dữ liệu từ biến của mình
Chúng tôi đã hình thành tập dữ liệu cuối cùng, tôi. e. chúng tôi đã chỉ định tên cột và kiểu dữ liệu, đồng thời sử dụng lệnh WITH RESULT SETS
EXEC sp_configure 'external scripts enabled'
9sp_execute_external_script
0
sp_execute_external_script
1
sp_execute_external_script
2sp_execute_external_script
3sp_execute_external_script
4sp_execute_external_script
5
sp_execute_external_script
6RECONFIGURE WITH OVERRIDE
5sp_execute_external_script
8sp_execute_external_script
9@language = N'language',
0EXEC sp_configure 'external scripts enabled'
6@language = N'language',
2@language = N'language',
3@language = N'language',
4
Ở đây chúng tôi cùng bạn xem các nguyên tắc cơ bản khi làm việc với Python trong Microsoft SQL Server, chúng tôi đã học cách kích hoạt khả năng làm việc với Python, cách chạy mã, cách sử dụng dữ liệu đến và cách nhận kết quả trong