Schnellstart: Ausführen einfacher Python-Skripts mit SQL Machine Learning
Gilt für: SQL Server 2017 (14.x) und höher Azure SQL Managed Instance
In diesem Schnellstart führen Sie eine Reihe einfacher Python-Skripts mit SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services oder SQL Server Big Data-Cluster aus. Sie erfahren, wie Sie die gespeicherte Prozedur sp_execute_external_script verwenden, um das Skript in einer SQL Server-Instanz auszuführen.
Voraussetzungen
Zum Durchführen dieser Schnellstartanleitung benötigen Sie folgende Voraussetzungen.
Eine SQL-Datenbank auf einer der folgenden Plattformen:
- SQL Server Machine Learning Services. Informationen zur Installation finden Sie im Windows- oder im Linux-Installationsleitfaden.
- SQL Server 2019-Big Data-Cluster. Weitere Informationen finden Sie unter Aktivieren von Machine Learning Services für SQL Server 2019-Big Data-Cluster.
- Machine Learning Services in Azure SQL Managed Instance In der Übersicht Machine Learning Services in Azure SQL Managed Instance finden Sie weitere Informationen.
Ein Tool zum Ausführen von SQL-Abfragen, die Python-Skripts enthalten. In dieser Schnellstartanleitung wird Azure Data Studio verwendet.
Ausführen eines einfachen Skripts
Sie können ein Python-Skript ausführen, indem Sie es als Argument an die gespeicherte Systemprozedur sp_execute_external_script übergeben. Diese gespeicherte Systemprozedur startet die Python-Runtime im Kontext von SQL Machine Learning, übergibt Daten an Python, verwaltet Python-Sitzungen von Benutzern sicher und gibt alle Ergebnisse an den Client zurück.
In den folgenden Schritten führen Sie dieses Python-Beispielskript in Ihrer Datenbank aus:
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
Öffnen Sie ein neues Abfragefenster in Azure Data Studio, das mit Ihrer SQL -Instanz verbunden ist.
Übergeben Sie das gesamte Python-Skript an die gespeicherte Prozedur
sp_execute_external_script
.Das Skript wird durch das
@script
-Argument übergeben. Das@script
-Argument darf nur aus zulässigem Python-Code bestehen.EXECUTE sp_execute_external_script @language = N'Python' , @script = N' a = 1 b = 2 c = a/b d = a*b print(c, d) '
Das korrekte Ergebnis wird berechnet, und die Python-Funktion
print
gibt das Ergebnis im Meldungsfenster zurück.Die Ausgabe könnte beispielsweise wie folgt aussehen:
Ergebnisse
STDOUT message(s) from external script: 0.5 2
Ausführen eines „Hello World“-Skripts
In einem typischen Beispielskript wird nur die Zeichenfolge „Hallo Welt“ (oder „Hello World“) ausgegeben. Führen Sie den folgenden Befehl aus.
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
Folgende Eingaben sind für die gespeicherte Prozedur sp_execute_external_script
möglich:
Eingabe | BESCHREIBUNG |
---|---|
@language | definiert die aufzurufende Spracherweiterung (hier Python) |
@script | In diesem Argument werden die Befehle definiert, die an die Python-Runtime übergeben werden. Ihr gesamtes Python-Skript muss von diesem Argument als Unicode-Text umschlossen sein. Sie können den Text auch einer Variablen des Typs nvarchar hinzufügen und die Variable anschließend aufrufen. |
@input_data_1 | Die von der Abfrage zurückgegebenen Daten werden an die Python-Runtime übergeben, die die Daten als Datenrahmen zurückgibt. |
WITH RESULT SETS | Mit dieser Klausel wird das Schema der zurückgegebenen Datentabelle für SQL Machine Learning definiert und „Hello World“ als Spaltenname und int als Datentyp festgelegt. |
Der Befehl gibt folgenden Text aus:
Hello World |
---|
1 |
Verwenden von Eingaben und Ausgaben
Standardmäßig akzeptiert sp_execute_external_script
ein einzelnes Dataset als Eingabe, das in der Regel in Form einer gültigen SQL-Abfrage angegeben wird. Anschließend wird ein einzelner Python-Datenrahmen als Ausgabe zurückgegeben.
Verwenden Sie vorerst die standardmäßig festgelegten Eingabe- und Ausgabevariablen von sp_execute_external_script
: InputDataSet und OutputDataSet.
Erstellen Sie eine kleine Tabelle mit Testdaten.
CREATE TABLE PythonTestData (col1 INT NOT NULL) INSERT INTO PythonTestData VALUES (1); INSERT INTO PythonTestData VALUES (10); INSERT INTO PythonTestData VALUES (100); GO
Verwenden Sie die
SELECT
-Anweisung zum Abfragen der Tabelle.SELECT * FROM PythonTestData
Ergebnisse
Führen Sie folgendes Python-Skript aus. Es ruft die Daten mithilfe der
SELECT
-Anweisung aus der Tabelle ab, übergibt sie über die Python-Runtime und gibt sie anschließend als Datenrahmen zurück. Die KlauselWITH RESULT SETS
definiert das Schema der zurückgegeben Datentabelle für SQL und fügt den Spaltennamen NewColName hinzu.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));
Ergebnisse
Ändern Sie nun die Namen der Eingabe- und Ausgabevariablen. Standardmäßig werden die Eingabe- und Ausgabevariablen InputDataSet und OutputDataSet verwendet. In dem folgenden Skript werden die Namen in SQL_in und SQL_out geändert:
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));
Beachten Sie, dass Python Groß- und Kleinschreibung beachtet. Die im Python-Skript verwendeten Eingabe- und Ausgabevariablen (SQL_out und SQL_in) müssen mit den mit
@input_data_1_name
und@output_data_1_name
definierten Namen (Groß-/Kleinschreibung beachten) übereinstimmen.Tipp
Nur ein Eingabedataset kann als Parameter übergeben werden, und Sie können nur ein Dataset zurückgeben. Allerdings können Sie andere Datasets innerhalb Ihres Python-Codes aufrufen und Ausgaben und andere Typen zusätzlich zum Dataset zurückgeben. Außerdem können Sie auch allen Parametern das Schlüsselwort OUTPUT hinzufügen, damit es zusammen mit den Ergebnissen zurückgegeben wird.
Sie können über das Python-Skript auch Werte ohne Eingabedaten generieren, indem keine Eingabedaten für
@input_data_1
festgelegt werden.Das folgende Skript gibt den Text „hello“ und „world“ aus.
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));
Ergebnisse
@script als Eingabe" />
Tipp
Python verwendet führende Leerzeichen für Gruppenanweisungen. Wenn also das eingebettete Python-Skript mehrere Zeilen wie im vorhergehenden Skript umfasst, versuchen Sie nicht, die Python-Befehle einzuziehen, um mit den SQL-Befehlen übereinstimmen zu können. Beispielsweise erzeugt dieses Skript einen Fehler:
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));
Überprüfung der Python-Version
Wenn Sie ermitteln möchten, welche Version von Python auf Ihrem Server installiert ist, führen Sie das folgende Skript aus.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import sys
print(sys.version)
'
GO
Die Python-Funktion print
gibt die Version im Meldungsfenster zurück. In der folgenden Beispielausgabe sehen Sie, dass in diesem Fall Version 3.5.2 von Python installiert ist.
Ergebnisse
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)]
Auflistung der Python-Pakete
Microsoft stellt eine Reihe von Python-Paketen bereit, die mit Machine Learning Services in SQL Server 2016 (13.x), SQL Server 2017 (14.x) und SQL Server 2019 (15.x) vorinstalliert werden. In SQL Server 2022 (16.x) können Sie alle benutzerdefinierten Python-Runtimes und -Pakete nach Wunsch herunterladen und installieren.
Führen Sie das folgende Skript aus, um eine Liste der installierten Python-Pakete einschließlich der Version zu erhalten.
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
Die Liste stammt aus pkg_resources.working_set
in Python und wird an SQL als Datenrahmen zurückgegeben.
Nächste Schritte
Befolgen Sie diesen Schnellstart, um die Verwendung von Datenstrukturen mit Python in SQL Machine Learning zu erlernen: