快速入門:Python 函式搭配 SQL 機器學習

適用於: SQL Server 2017 (14.x) 和更新版本 Azure SQL 受控執行個體

在此快速入門中,您將會使用 SQL Server 機器學習服務Azure SQL 受控執行個體機器學習服務或在 SQL Server 巨量資料叢集上了解如何使用 Python 數學與公用程式函式。 使用 T-SQL 實作統計函數通常會很複雜,但若使用 Python,只需要幾行程式碼就可以完成。

Prerequisites

您需要符合下列必要條件,才能執行此快速入門。

建立預存程序來產生亂數

為了簡單起見,讓我們使用預設會安裝並載入的 Python numpy 套件。 該套件包含數百個用來進行一般統計工作的函式,其中 random.normal 函式會在指定標準差和平均值的情況下,使用常態分佈產生指定數目的亂數。

例如,下列 Python 程式碼會在指定標準差為 3 的情況下,傳回平均值為 50 的 100 個數字。

numpy.random.normal(size=100, loc=50, scale=3)

若要從 T-SQL 呼叫此行的 Python,請在 sp_execute_external_script 的 Python 指令碼參數中新增 Python 函數。 輸出時應有資料框架,因此請使用 pandas 來進行轉換。

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import numpy
import pandas
OutputDataSet = pandas.DataFrame(numpy.random.normal(size=100, loc=50, scale=3));
'
    , @input_data_1 = N'   ;'
WITH RESULT SETS(([Density] FLOAT NOT NULL));

想要更輕鬆地產生一組不同的亂數? 您可以定義一個預存程序來取得使用者的引數,然後將這些引數當做變數傳遞至 Python 指令碼。

CREATE PROCEDURE MyPyNorm (
      @param1 INT
    , @param2 INT
    , @param3 INT
    )
AS
EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import numpy
import pandas
OutputDataSet = pandas.DataFrame(numpy.random.normal(size=mynumbers, loc=mymean, scale=mysd));
'
    , @input_data_1 = N'   ;'
    , @params = N' @mynumbers int, @mymean int, @mysd int'
    , @mynumbers = @param1
    , @mymean = @param2
    , @mysd = @param3
WITH RESULT SETS(([Density] FLOAT NOT NULL));
  • 第一行定義執行預存程序時所需要的每個 SQL 輸入參數。

  • 開頭為 @params 的行會定義 Python 程式碼所使用的所有變數,以及對應的 SQL 資料類型。

  • 緊接的行會將 SQL 參數名稱對應至相對應的 Python 變數名稱。

現在您已將 Python 函數包裝於預存程序中,您將可以輕鬆地呼叫函數並傳入不同的值,如下所示︰

EXECUTE MyPyNorm @param1 = 100,@param2 = 50, @param3 = 3

使用 Python 公用程式函數進行疑難排解

Python 套件提供各種公用程式函數來調查目前的 Python 環境。 如果您發現您的 Python 程式碼在 SQL Server 和外部環境中的執行方式不一致,這些函數會非常有用。

例如,您可以使用 time 套件中的系統計時函數來測量 Python 處理序所使用的時間量,並分析效能問題。

EXECUTE sp_execute_external_script
      @language = N'Python'
    , @script = N'
import time
start_time = time.time()

# Run Python processes

elapsed_time = time.time() - start_time
'
    , @input_data_1 = N' ;';

後續步驟

若要搭配 SQL 機器學習使用 Python 來建立機器學習模型,請遵循此快速入門: