Delen via


Quickstart: Eenvoudige Python-scripts uitvoeren met SQL Machine Learning

Van toepassing op: SQL Server 2017 (14.x) en latere versies van Azure SQL Managed Instance

In deze quickstart voert u een set eenvoudige Python-scripts uit met behulp van SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services of SQL Server Big Data Clusters. U leert hoe u de opgeslagen procedure sp_execute_external_script gebruikt om het script uit te voeren in een SQL Server-exemplaar.

Vereiste voorwaarden

U hebt de volgende vereisten nodig om deze quickstart uit te voeren.

Een eenvoudig script uitvoeren

Als u een Python-script wilt uitvoeren, geeft u het als argument door aan de door het systeem opgeslagen procedure , sp_execute_external_script. Deze door het systeem opgeslagen procedure start de Python-runtime in de context van SQL Machine Learning, geeft gegevens door aan Python, beheert Python-gebruikerssessies veilig en retourneert eventuele resultaten aan de client.

In de volgende stappen voert u dit Python-voorbeeldscript uit in uw database:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)
  1. Open een nieuw queryvenster in Azure Data Studio dat is verbonden met uw SQL-exemplaar.

  2. Geef het volledige Python-script door aan de sp_execute_external_script stored procedure.

    Het script wordt doorgegeven via het @script argument. Alles in het @script argument moet geldige Python-code zijn.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
  3. Het juiste resultaat wordt berekend en de Python-functie print retourneert het resultaat naar het venster Berichten .

    Het ziet er ongeveer als volgt uit.

    resultaten

    STDOUT message(s) from external script:
    0.5 2
    

Een Hallo wereld-script uitvoeren

Een typisch voorbeeldscript is een script dat alleen de string 'Hello World' uitvoert. Voer de volgende opdracht uit.

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

Invoer voor de sp_execute_external_script opgeslagen procedure is onder andere:

Invoer Description
@language definieert de taalextensie die moet worden aangeroepen, in dit geval Python
@script definieert de opdrachten die worden doorgegeven aan de Python-runtime. Uw volledige Python-script moet in dit argument zijn opgenomen als Unicode-tekst. U kunt de tekst ook toevoegen aan een variabele van het type nvarchar en vervolgens de variabele aanroepen
@input_data_1 gegevens die door de query worden geretourneerd, doorgegeven aan de Python-runtime, die de gegevens als een gegevensframe retourneert
MET RESULTAATSETS De clausule definieert het schema van de geretourneerde gegevenstabel voor SQL Machine Learning, waarbij "Hello World" als kolomnaam wordt toegevoegd, int voor het gegevenstype.

De opdracht voert de volgende tekst uit:

Hello World
1

Invoer en uitvoer gebruiken

Accepteert standaard sp_execute_external_script één gegevensset als invoer, die doorgaans wordt opgegeven in de vorm van een geldige SQL-query. Vervolgens wordt één Python-gegevensframe als uitvoer geretourneerd.

Voorlopig gebruiken we de standaardinvoer- en uitvoervariabelen van sp_execute_external_script: InputDataSet en OutputDataSet.

  1. Maak een kleine tabel met testgegevens.

    CREATE TABLE PythonTestData (col1 INT NOT NULL)
    
    INSERT INTO PythonTestData
    VALUES (1);
    
    INSERT INTO PythonTestData
    VALUES (10);
    
    INSERT INTO PythonTestData
    VALUES (100);
    GO
    
  2. Gebruik de SELECT instructie om een query uit te voeren op de tabel.

    SELECT *
    FROM PythonTestData
    

    resultaten

    Inhoud van de tabel PythonTestData

  3. Voer het volgende Python-script uit. Hiermee worden de gegevens opgehaald uit de tabel met behulp van de SELECT instructie, doorgegeven aan de Python-runtime en worden de gegevens geretourneerd als een gegevensframe. De WITH RESULT SETS component definieert het schema van de geretourneerde gegevenstabel voor SQL, waarbij de kolomnaam NewColName wordt toegevoegd.

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

    resultaten

    Uitvoer van Python-script dat gegevens uit een tabel retourneert

  4. Wijzig nu de namen van de invoer- en uitvoervariabelen. De standaardnamen voor invoer- en uitvoervariabelen zijn InputDataSet en OutputDataSet. Met het volgende script worden de namen gewijzigd in SQL_in en SQL_out:

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

    Let op dat Python hoofdlettergevoelig is. De invoer- en uitvoervariabelen die worden gebruikt in het Python-script (SQL_out, SQL_in) moeten overeenkomen met de namen die zijn gedefinieerd met @input_data_1_name en @output_data_1_name, inclusief hoofdletters.

    Aanbeveling

    Er kan slechts één invoergegevensset worden doorgegeven als parameter en u kunt slechts één gegevensset retourneren. U kunt echter andere gegevenssets aanroepen vanuit uw Python-code en u kunt naast de gegevensset ook uitvoer van andere typen retourneren. U kunt ook het trefwoord OUTPUT toevoegen aan elke parameter om deze met de resultaten te laten retourneren.

  5. U kunt ook waarden genereren met behulp van het Python-script zonder invoergegevens (@input_data_1 is ingesteld op leeg).

    Met het volgende script wordt de tekst 'hello' en 'world' uitgevoerd.

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

    resultaten

    Queryresultaten met behulp van <span class= @script als invoer" />

Aanbeveling

Python maakt gebruik van toonaangevende spaties om instructies te groeperen. Als het ingebedde Python-script dus meerdere regels beslaat, zoals in het voorgaande script, probeer dan niet de Python-opdrachten uit te lijnen met de SQL-opdrachten. Met dit script wordt bijvoorbeeld een fout gegenereerd:

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

Python-versie controleren

Als u wilt zien welke versie van Python op uw server is geïnstalleerd, voert u het volgende script uit.

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

De Python-functie print retourneert de versie naar het venster Berichten . In de onderstaande voorbeelduitvoer ziet u dat in dit geval Python versie 3.5.2 is geïnstalleerd.

resultaten

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-pakketten weergeven

Microsoft biedt een aantal Python-pakketten die vooraf zijn geïnstalleerd met Machine Learning Services in SQL Server 2016 (13.x), SQL Server 2017 (14.x) en SQL Server 2019 (15.x). In SQL Server 2022 (16.x) kunt u naar wens aangepaste Python-runtimes en -pakketten downloaden en installeren.

Voer het volgende script uit om een lijst weer te geven van welke Python-pakketten zijn geïnstalleerd, inclusief versie.

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

De lijst is afkomstig uit pkg_resources.working_set Python en wordt als een gegevensframe geretourneerd naar SQL.

Volgende stappen

Volg deze quickstart voor meer informatie over het gebruik van gegevensstructuren bij het gebruik van Python in SQL Machine Learning: