Megosztás a következőn keresztül:


Rövid útmutató: Egyszerű Python-szkriptek futtatása AZ SQL Machine Learning használatával

A következőkre vonatkozik: Sql Server 2017 (14.x) és újabb verziók Felügyelt Azure SQL-példány

Ebben a rövid útmutatóban egyszerű Python-szkripteket fog futtatni az SQL Server Machine Learning Services, az Azure SQL Managed Instance Machine Learning Services vagy az SQL Server Big Data-fürtök használatával. Megtudhatja, hogyan használhatja a tárolt eljárást sp_execute_external_script a szkript SQL Server-példányban való végrehajtásához.

Előfeltételek

A rövid útmutató futtatásához a következő előfeltételekre lesz szüksége.

Egyszerű szkript futtatása

Python-szkript futtatásához argumentumként adja át a rendszer által tárolt eljárásnak, sp_execute_external_script. Ez a rendszer által tárolt eljárás elindítja a Python-futtatókörnyezetet az SQL machine learning kontextusában, adatokat továbbít a Pythonnak, biztonságosan kezeli a Python felhasználói munkameneteit, és visszaadja az eredményeket az ügyfélnek.

A következő lépésekben ezt a pythonos példaszkriptet fogja futtatni az adatbázisban:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)
  1. Nyisson meg egy új lekérdezési ablakot az SQL-példányhoz csatlakoztatott Azure Data Studióban .

  2. Adja át a teljes Python-szkriptet a sp_execute_external_script tárolt eljárásnak.

    A szkript át lesz adva az @script argumentumon. Az argumentumon @script belül mindennek érvényes Python-kódnak kell lennie.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
  3. A rendszer kiszámítja a helyes eredményt, és a Python-függvény print visszaadja az eredményt az Üzenetek ablaknak.

    Valahogy így kell kinéznie.

    Results

    STDOUT message(s) from external script:
    0.5 2
    

Hello World-szkript futtatása

Egy tipikus példaszkript az, amely csak a "Hello World" sztringet adja ki. Futtassa az alábbi parancsot.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'OutputDataSet = InputDataSet'
    , @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([Hello World] INT));
GO

A sp_execute_external_script tárolt eljárás bemenetei a következők:

Bemenet Description
@language meghatározza a meghívandó nyelvi bővítményt, ebben az esetben a Pythont
@script A Python-futtatókörnyezetnek átadott parancsokat határozza meg. Ebben az argumentumban a teljes Python-szkriptet Unicode-szövegként kell megadni. A szöveget egy nvarchar típusú változóhoz is hozzáadhatja, majd meghívhatja a változót
@input_data_1 a lekérdezés által visszaadott, a Python-futtatókörnyezetnek átadott adatok, amelyek adatkeretként adják vissza az adatokat
EREDMÉNYHALMAZOKKAL Az SQL gépi tanulás során a visszaadott adattábla sémáját meghatározó utasítás az "Hello World" nevű oszlopot, és az adattípusnak int-t ad meg.

A parancs a következő szöveget adja ki:

„Helló világ!” alkalmazás
1

Bemenetek és kimenetek használata

Alapértelmezés szerint sp_execute_external_script egyetlen adathalmazt fogad el bemenetként, amelyet általában érvényes SQL-lekérdezés formájában ad meg. Ezután egyetlen Python-adatkeretet ad vissza kimenetként.

Egyelőre az sp_execute_external_script és az OutputDataSet alapértelmezett bemeneti és kimeneti változóit használjuk.

  1. Hozzon létre egy kis táblázatot a tesztadatokból.

    CREATE TABLE PythonTestData (col1 INT NOT NULL)
    
    INSERT INTO PythonTestData
    VALUES (1);
    
    INSERT INTO PythonTestData
    VALUES (10);
    
    INSERT INTO PythonTestData
    VALUES (100);
    GO
    
  2. A SELECT utasítással kérdezheti le a táblát.

    SELECT *
    FROM PythonTestData
    

    Results

    A PythonTestData tábla tartalomjegyzéke

  3. Futtassa a következő Python-szkriptet. Az utasítással lekéri az adatokat a SELECT táblából, átadja azokat a Python-futtatókörnyezetben, és adatkeretként adja vissza az adatokat. A WITH RESULT SETS záradék meghatározza az SQL visszaadott adattáblájának sémáját, és hozzáadja a NewColName oszlopnevet.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'OutputDataSet = InputDataSet;'
        , @input_data_1 = N'SELECT * FROM PythonTestData;'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Results

    Tábla adatait visszaíró Python-szkript kimenete

  4. Most módosítsa a bemeneti és kimeneti változók nevét. Az alapértelmezett bemeneti és kimeneti változók neve az InputDataSet és az OutputDataSet, a következő szkript a neveket SQL_in és SQL_out értékre módosítja:

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'SQL_out = SQL_in;'
        , @input_data_1 = N'SELECT 12 as Col;'
        , @input_data_1_name  = N'SQL_in'
        , @output_data_1_name = N'SQL_out'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Vegye figyelembe, hogy a Python különbséget tesz a kis- és nagybetűk között. A Python-szkriptben (SQL_out, SQL_in) használt bemeneti és kimeneti változóknak meg kell egyezniük azokkal a nevekkel, amelyeket @input_data_1_name és @output_data_1_name-mal definiálnak, beleértve a kis- és nagybetűket.

    Jótanács

    Paraméterként csak egy bemeneti adatkészlet adható át, és csak egy adathalmazt adhat vissza. Azonban meghívhat más adatkészleteket a Python-kódból, és az adatkészleten kívül más típusú kimeneteket is visszaadhat. Az OUTPUT kulcsszót bármely paraméterhez hozzáadhatja, hogy az eredményekkel együtt visszaadja.

  5. Értékeket is létrehozhat csak a Python-szkripttel bemeneti adatok nélkül (@input_data_1 üresre van állítva).

    A következő szkript a "hello" és a "world" szöveget adja ki.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    import pandas as pd
    mytextvariable = pandas.Series(["hello", " ", "world"]);
    OutputDataSet = pd.DataFrame(mytextvariable);
    '
        , @input_data_1 = N''
    WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));
    

    Results

    Eredmények lekérdezése <span class= @script bemenetként" />

Jótanács

A Python vezető szóközöket használ az utasítások csoportosításához. Tehát ha a megtestesített Python-szkript több sorra is kiterjed, mint az előző szkriptben, ne próbálja meg behúzni a Python-parancsokat, hogy összhangban legyenek az SQL-parancsokkal. Ez a szkript például hibát okoz:

EXECUTE sp_execute_external_script @language = N'Python'
      , @script = N'
      import pandas as pd
      mytextvariable = pandas.Series(["hello", " ", "world"]);
      OutputDataSet = pd.DataFrame(mytextvariable);
      '
      , @input_data_1 = N''
WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));

A Python verziójának ellenőrzése

Ha látni szeretné, hogy a Python melyik verziója van telepítve a kiszolgálón, futtassa a következő szkriptet.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import sys
print(sys.version)
'
GO

A Python-függvény print visszaadja a verziót az Üzenetek ablakba. Az alábbi példakimenetben láthatja, hogy ebben az esetben a Python 3.5.2-es verziója van telepítve.

Results

STDOUT message(s) from external script:
3.5.2 |Continuum Analytics, Inc.| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]

Python-csomagok listázása

A Microsoft az SQL Server 2016 (13.x), az SQL Server 2017 (14.x) és az SQL Server 2019 (15.x) rendszerben előre telepített Python-csomagokat biztosít. Az SQL Server 2022-ben (16.x) igény szerint letöltheti és telepítheti az egyéni Python-futtatókörnyezeteket és -csomagokat.

A telepített Python-csomagok listájának megtekintéséhez, beleértve a verziót is, futtassa a következő szkriptet.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import pkg_resources
import pandas
dists = [str(d) for d in pkg_resources.working_set]
OutputDataSet = pandas.DataFrame(dists)
'
WITH RESULT SETS(([Package] NVARCHAR(max)))
GO

A lista Pythonból származik pkg_resources.working_set , és adatkeretként adja vissza az SQL-nek.

Következő lépések

Ha tudni szeretné, hogyan használhat adatstruktúrákat a Python sql-alapú gépi tanulásban, kövesse az alábbi rövid útmutatót: