Sdílet prostřednictvím


Rychlý start: Spouštění jednoduchých skriptů Pythonu pomocí strojového učení SQL

Platí pro: SQL Server 2017 (14.x) a novější verze Azure SQL Managed Instance

V tomto rychlém startu spustíte sadu jednoduchých skriptů Pythonu pomocí služeb SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services nebo clusterů s velkými objemy dat SQL Serveru. Naučíte se používat uloženou proceduru sp_execute_external_script ke spuštění skriptu v instanci SQL Serveru.

Požadavky

Ke spuštění tohoto rychlého startu potřebujete následující požadavky.

Spuštění jednoduchého skriptu

Pokud chcete spustit skript Pythonu, předáte ho jako argument systémové uložené proceduře sp_execute_external_script. Tato systémová uložená procedura spustí modul runtime Pythonu v kontextu strojového učení SQL, předává data do Pythonu, bezpečně spravuje uživatelské relace Pythonu a vrací všechny výsledky klientovi.

V následujících krocích spustíte tento ukázkový skript Pythonu ve vaší databázi:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)
  1. Otevřete nové okno dotazu v Nástroji Azure Data Studio připojeném k vaší instanci SQL.

  2. Předejte kompletní skript Pythonu proceduře uložené na sp_execute_external_script.

    Skript se předává prostřednictvím argumentu @script . Vše uvnitř argumentu @script musí být platný kód Pythonu.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
  3. Vypočítá se správný výsledek a funkce Pythonu print vrátí výsledek do okna Zprávy .

    Mělo by to vypadat nějak takto.

    Results

    STDOUT message(s) from external script:
    0.5 2
    

Spuštění skriptu Hello World

Typický ukázkový skript je takový, který pouze vypíše řetězec "Hello World". Spusťte následující příkaz.

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

Vstupy pro uloženou proceduru sp_execute_external_script zahrnují:

Vstup Description
@language definuje rozšíření jazyka, které se má volat, v tomto případě Python.
@script definuje příkazy předané modulu runtime Pythonu. Celý skript Pythonu musí být v tomto argumentu uzavřený jako text Unicode. Můžete také přidat text do proměnné typu nvarchar a potom volat proměnnou.
@input_data_1 data vrácená dotazem předaná modulu runtime Pythonu, který vrací data jako datový rámec
S SADAMI VÝSLEDKŮ Klauzule definuje schéma vrácené tabulky dat pro strojové učení SQL a jako název sloupce přidá "Hello World" int pro datový typ.

Příkaz vypíše následující text:

Hello World
1

Použití vstupů a výstupů

Ve výchozím nastavení sp_execute_external_script přijímá jako vstup jednu datovou sadu, která obvykle zadáte ve formě platného dotazu SQL. Pak jako výstup vrátí jeden datový rámec Pythonu.

Prozatím použijeme výchozí vstupní a výstupní proměnné sp_execute_external_script: InputDataSet a OutputDataSet.

  1. Vytvořte malou tabulku testovacích dat.

    CREATE TABLE PythonTestData (col1 INT NOT NULL)
    
    INSERT INTO PythonTestData
    VALUES (1);
    
    INSERT INTO PythonTestData
    VALUES (10);
    
    INSERT INTO PythonTestData
    VALUES (100);
    GO
    
  2. Pomocí příkazu SELECT zadejte dotaz na tabulku.

    SELECT *
    FROM PythonTestData
    

    Results

    Obsah tabulky PythonTestData

  3. Spusťte následující skript Pythonu. Načte data z tabulky pomocí SELECT příkazu, projde je prostředím Python runtime a vrátí data jako datový rámec. Klauzule WITH RESULT SETS definuje schéma vrácené tabulky dat pro SQL a přidá název sloupce NewColName.

    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

    Výstup skriptu Pythonu, který vrací data z tabulky

  4. Teď změňte názvy vstupních a výstupních proměnných. Výchozí názvy vstupních a výstupních proměnných jsou InputDataSet a OutputDataSet, následující skript změní názvy na SQL_in a 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));
    

    Všimněte si, že Python je citlivý na malá a velká písmena. Vstupní a výstupní proměnné použité ve skriptu Pythonu (SQL_out, SQL_in) musí odpovídat názvům definovaným @input_data_1_name a @output_data_1_namevčetně písmen.

    Návod

    Jako parametr lze předat pouze jednu vstupní datovou sadu a vy můžete vrátit pouze jednu datovou sadu. Můžete ale volat jiné datové sady z kódu Pythonu a kromě datové sady můžete vrátit i výstupy jiných typů. Můžete také přidat klíčové slovo OUTPUT do libovolného parametru, aby se vrátil s výsledky.

  5. Hodnoty můžete generovat také pomocí skriptu Pythonu bez vstupních dat (@input_data_1 je nastavená na prázdnou hodnotu).

    Následující skript vypíše text "hello" a "world".

    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

    Dotazování výsledků pomocí <span class= @script jako vstupu" />

Návod

Python používá mezery na začátku řádku ke zgrupování příkazů. Takže když vložený skript Pythonu zahrnuje více řádků, jako v předchozím skriptu, nepokoušejte se odsadit příkazy Pythonu, aby byly v souladu s příkazy SQL. Tento skript například způsobí chybu:

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

Kontrola verze Pythonu

Pokud chcete zjistit, která verze Pythonu je nainstalovaná na vašem serveru, spusťte následující skript.

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

Funkce Pythonu print vrátí verzi do okna Zprávy . V následujícím příkladu výstupu vidíte, že v tomto případě je nainstalovaný Python verze 3.5.2.

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

Výpis balíčků Pythonu

Microsoft poskytuje řadu balíčků Pythonu předinstalovaných se službou Machine Learning Services v SQL Serveru 2016 (13.x), SQL Serveru 2017 (14.x) a SQL Serveru 2019 (15.x). V SQL Serveru 2022 (16.x) si můžete podle potřeby stáhnout a nainstalovat všechny vlastní moduly runtime a balíčky Pythonu.

Pokud chcete zobrazit seznam nainstalovaných balíčků Pythonu, včetně verze, spusťte následující skript.

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

Seznam pochází z pkg_resources.working_set Pythonu a vrací se do SQL jako datový rámec.

Další kroky

Pokud chcete zjistit, jak používat datové struktury při použití Pythonu ve strojovém učení SQL, postupujte podle tohoto rychlého startu: