Udostępnij za pomocą


Szybki start: uruchamianie prostych skryptów języka Python przy użyciu uczenia maszynowego SQL

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje usługi Azure SQL Managed Instance

W tym przewodniku Szybki start uruchomisz zestaw prostych skryptów języka Python przy użyciu usług SQL Server Machine Learning Services, usług Azure SQL Managed Instance Machine Learning Services lub klastrów danych big data programu SQL Server. Dowiesz się, jak używać procedury składowanej sp_execute_external_script do wykonywania skryptu w wystąpieniu programu SQL Server.

Wymagania wstępne

Aby uruchomić szybki start, potrzebne są następujące prerekwizyty.

Uruchamianie prostego skryptu

Aby uruchomić skrypt języka Python, przekażesz go jako argument do procedury składowanej systemu, sp_execute_external_script. Ta procedura składowana systemu uruchamia środowisko uruchomieniowe języka Python w kontekście uczenia maszynowego SQL, przekazuje dane do języka Python, bezpiecznie zarządza sesjami użytkowników języka Python i zwraca wszystkie wyniki do klienta.

W poniższych krokach uruchomisz ten przykładowy skrypt języka Python w bazie danych:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)
  1. Otwórz nowe okno zapytania w narzędziu Azure Data Studio połączonym z wystąpieniem SQL.

  2. Przekaż pełny skrypt języka Python do sp_execute_external_script procedury składowanej.

    Skrypt jest przekazywany przez @script argument . Wszystko wewnątrz argumentu @script musi być prawidłowym kodem języka Python.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
  3. Prawidłowy wynik jest obliczany, a funkcja języka Python print zwraca wynik do okna Komunikaty .

    Powinno to wyglądać mniej więcej tak.

    Results

    STDOUT message(s) from external script:
    0.5 2
    

Uruchamianie skryptu Hello World

Typowy przykładowy skrypt to taki, który po prostu generuje ciąg "Hello World". Uruchom następujące polecenie.

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

sp_execute_external_script Dane wejściowe procedury składowanej obejmują:

Input Description
@language definiuje rozszerzenie języka do wywołania, w tym przypadku python
@script definiuje polecenia przekazywane do środowiska uruchomieniowego języka Python. Cały skrypt języka Python musi być ujęty w ten argument w formacie Unicode. Możesz również dodać tekst do zmiennej typu nvarchar , a następnie wywołać zmienną
@input_data_1 dane zwrócone przez zapytanie przekazane do środowiska uruchomieniowego języka Python, które zwraca dane jako ramkę danych
Z ZESTAWAMI WYNIKÓW Klauzula definiuje schemat zwracanej tabeli danych dla uczenia maszynowego SQL, dodając "Hello World" jako nazwę kolumny int dla typu danych

Polecenie zwraca następujący tekst:

Hello world
1

Używanie danych wejściowych i wyjściowych

Domyślnie sp_execute_external_script przyjmuje pojedynczy zestaw danych jako dane wejściowe, które zazwyczaj są dostarczane w postaci prawidłowego zapytania SQL. Następnie zwraca pojedynczą ramkę danych języka Python jako dane wyjściowe.

Na razie użyjemy domyślnych zmiennych wejściowych i wyjściowych sp_execute_external_script: InputDataSet i OutputDataSet.

  1. Utwórz małą tabelę danych testowych.

    CREATE TABLE PythonTestData (col1 INT NOT NULL)
    
    INSERT INTO PythonTestData
    VALUES (1);
    
    INSERT INTO PythonTestData
    VALUES (10);
    
    INSERT INTO PythonTestData
    VALUES (100);
    GO
    
  2. Użyj instrukcji , SELECT aby wysłać zapytanie do tabeli.

    SELECT *
    FROM PythonTestData
    

    Results

    Zawartość tabeli PythonTestData

  3. Uruchom następujący skrypt języka Python. Pobiera dane z tabeli przy użyciu SELECT instrukcji , przekazuje je przez środowisko uruchomieniowe języka Python i zwraca dane jako ramkę danych. Klauzula WITH RESULT SETS definiuje schemat zwracanej tabeli danych dla języka SQL, dodając nazwę kolumny 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

    Dane wyjściowe ze skryptu języka Python, który zwraca dane z tabeli

  4. Teraz zmień nazwy zmiennych wejściowych i wyjściowych. Domyślne nazwy zmiennych wejściowych i wyjściowych to InputDataSet i OutputDataSet. Następujący skrypt zmienia nazwy na SQL_in i 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));
    

    Należy pamiętać, że w języku Python jest rozróżniana wielkość liter. Zmienne wejściowe i wyjściowe używane w skrypcie Python (SQL_out, SQL_in) muszą być zgodne z nazwami zdefiniowanymi za pomocą @input_data_1_name i @output_data_1_name, w tym wielkość liter.

    Wskazówka

    Jako parametr można przekazać tylko jeden wejściowy zestaw danych i można zwrócić tylko jeden zestaw danych. Można jednak wywoływać inne zestawy danych z wewnątrz kodu języka Python i zwracać dane wyjściowe innych typów oprócz zestawu danych. Możesz również dodać słowo kluczowe OUTPUT do dowolnego parametru, aby zwrócił je z wynikami.

  5. Możesz również wygenerować wartości tylko przy użyciu skryptu języka Python bez danych wejściowych (@input_data_1 jest ustawiona na wartość pustą).

    Poniższy skrypt zwraca tekst "hello" i "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

    Wyniki zapytań przy użyciu klasy <span= @script jako danych wejściowych" />

Wskazówka

Język Python używa wiodących spacji do instrukcji grupowania. Więc gdy skrypt osadzony języka Python obejmuje wiele wierszy, jak w poprzednim skrypcie, nie próbuj wciągać poleceń Pythona, aby wyrównać je do poleceń SQL. Na przykład ten skrypt spowoduje wygenerowanie błędu:

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

Sprawdzanie wersji języka Python

Jeśli chcesz zobaczyć, która wersja języka Python jest zainstalowana na serwerze, uruchom następujący skrypt.

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

Funkcja języka Python print zwraca wersję do okna Komunikaty . W poniższych przykładowych danych wyjściowych widać, że w tym przypadku jest zainstalowany język Python w wersji 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)]

Wyświetlanie listy pakietów języka Python

Firma Microsoft udostępnia wstępnie zainstalowane pakiety języka Python z usługami Machine Learning Services w programie SQL Server 2016 (13.x), SQL Server 2017 (14.x) i SQL Server 2019 (15.x). W programie SQL Server 2022 (16.x) można pobrać i zainstalować dowolne niestandardowe środowiska uruchomieniowe i pakiety języka Python zgodnie z potrzebami.

Aby wyświetlić listę zainstalowanych pakietów języka Python, w tym wersję, uruchom następujący skrypt.

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

Lista pochodzi z pkg_resources.working_set języka Python i jest zwracana do bazy danych SQL jako ramka danych.

Dalsze kroki

Aby dowiedzieć się, jak używać struktur danych podczas korzystania z języka Python w uczeniu maszynowym SQL, wykonaj czynności opisane w tym przewodniku Szybki start: