Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Baza danych SQL na jednej z następujących platform:
- Sql Server Machine Learning Services. Aby zainstalować, zobacz Przewodnik instalacji systemu Windows lub Przewodnik instalacji systemu Linux.
- Klastry danych big data programu SQL Server 2019. Zobacz, jak włączyć usługi Machine Learning Services w klastrach danych big data programu SQL Server 2019.
- Azure SQL Managed Instance Machine Learning Services. Aby uzyskać informacje, zobacz Omówienie usług Azure SQL Managed Instance Machine Learning Services.
Narzędzie do uruchamiania zapytań SQL zawierających skrypty języka Python. W tym przewodniku Szybki start jest używany program Azure Data Studio.
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)
Otwórz nowe okno zapytania w narzędziu Azure Data Studio połączonym z wystąpieniem SQL.
Przekaż pełny skrypt języka Python do
sp_execute_external_scriptprocedury składowanej.Skrypt jest przekazywany przez
@scriptargument . Wszystko wewnątrz argumentu@scriptmusi 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) 'Prawidłowy wynik jest obliczany, a funkcja języka Python
printzwraca 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.
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); GOUżyj instrukcji ,
SELECTaby wysłać zapytanie do tabeli.SELECT * FROM PythonTestDataResults
Uruchom następujący skrypt języka Python. Pobiera dane z tabeli przy użyciu
SELECTinstrukcji , przekazuje je przez środowisko uruchomieniowe języka Python i zwraca dane jako ramkę danych. KlauzulaWITH RESULT SETSdefiniuje 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
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_namei@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.
Możesz również wygenerować wartości tylko przy użyciu skryptu języka Python bez danych wejściowych (
@input_data_1jest 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
@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: