Avvio rapido: Eseguire script Python semplici con Machine Learning Services per SQL
Si applica a: SQL Server 2017 (14.x) e versioni successive Istanza gestita di SQL di Azure
In questo argomento di avvio rapido verrà eseguito un set di semplici script Python con Machine Learning Services per SQL Server, Machine Learning Services di Istanza gestita di SQL di Azure o cluster Big Data di SQL Server. Si apprenderà come usare la stored procedure sp_execute_external_script per eseguire lo script in un'istanza di SQL Server.
Prerequisiti
Per completare questo argomento di avvio rapido è necessario soddisfare i prerequisiti seguenti.
Un database SQL in una di queste piattaforme:
- Machine Learning Services per SQL Server. Per eseguire l'installazione, vedere la guida all'installazione in Windows o la guida all'installazione in Linux.
- Cluster Big Data di SQL Server 2019. Vedere Abilitare Machine Learning Services in cluster Big Data di SQL Server 2019.
- Servizi di Machine Learning sull’istanza gestita di SQL di Azure. Per informazioni, vedere Panoramica di Machine Learning Services per Istanza gestita di SQL di Azure.
Uno strumento per l'esecuzione di query SQL che contengono script Python. In questo argomento di avvio rapido viene usato Azure Data Studio.
Eseguire uno script semplice
Per eseguire uno script Python, è necessario passarlo come argomento alla stored procedure di sistema sp_execute_external_script. Questa stored procedure di sistema avvia il runtime Python nel contesto della funzione di Machine Learning in SQL, passa i dati a Python, gestisce le sessioni utente di Python in modo sicuro e restituisce i risultati al client.
Nei passaggi seguenti si eseguirà questo script Python di esempio nel database:
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
In Azure Data Studio aprire una nuova finestra di query connessa all'istanza di SQL.
Passare lo script Python completo alla stored procedure
sp_execute_external_script
.Lo script viene passato tramite l'argomento
@script
. Tutti gli elementi all'interno dell'argomento@script
devono essere costituiti da codice Python valido.EXECUTE sp_execute_external_script @language = N'Python' , @script = N' a = 1 b = 2 c = a/b d = a*b print(c, d) '
Il risultato corretto viene calcolato e la funzione Python
print
restituisce il risultato nella finestra Messaggi.Dovrebbe essere simile al seguente.
Risultati
STDOUT message(s) from external script: 0.5 2
Eseguire uno script Hello World
Uno script di esempio tipico è quello che restituisce come output la stringa "Hello World". Esegui il comando seguente:
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
Gli input per la stored procedure sp_execute_external_script
includono:
Input | Descrizione |
---|---|
@language | Definisce l'estensione del linguaggio da chiamare, in questo caso Python |
@script | Definisce i comandi passati al runtime Python. L'intero script Python deve essere incluso in questo argomento come testo Unicode. È anche possibile aggiungere il testo a una variabile di tipo nvarchar e quindi chiamare la variabile |
@input_data_1 | Dati restituiti dalla query, passati al runtime Python, che restituisce i dati come frame di dati |
WITH RESULT SETS | Clausola che definisce lo schema della tabella dati restituita per Machine Learning in SQL, aggiungendo "Hello World" come nome di colonna e int per il tipo di dati |
Il comando restituisce il testo seguente:
Hello World |
---|
1 |
Usare input e output
Per impostazione predefinita, sp_execute_external_script
accetta un singolo set di dati come input, che in genere viene fornito sotto forma di query SQL valida. Restituisce quindi un singolo frame di dati Python come output.
Per il momento, verranno usate le variabili di input e di output predefinite di sp_execute_external_script
: InputDataSet e OutputDataSet.
Creare una piccola tabella di dati di test.
CREATE TABLE PythonTestData (col1 INT NOT NULL) INSERT INTO PythonTestData VALUES (1); INSERT INTO PythonTestData VALUES (10); INSERT INTO PythonTestData VALUES (100); GO
Usare l'istruzione
SELECT
per eseguire una query sulla tabella.SELECT * FROM PythonTestData
Risultati
Eseguire lo script Python seguente. Questo script recupera i dati dalla tabella usando l'istruzione
SELECT
, li passa nel runtime Python e restituisce i dati come frame di dati. La clausolaWITH RESULT SETS
definisce lo schema della tabella dati restituita per SQL, aggiungendo il nome di colonna 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));
Risultati
Modificare ora i nomi delle variabili di input e di output. I nomi delle variabili di input e di output predefiniti sono InputDataSet e OutputDataSet. Lo script seguente cambia i nomi in SQL_in e 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));
Si noti che Python fa distinzione tra maiuscole e minuscole. Le variabili di input e di output usate nello script Python (SQL_out, SQL_in) devono corrispondere ai nomi definiti con
@input_data_1_name
e@output_data_1_name
, inclusa la distinzione tra maiuscole e minuscole.Suggerimento
È possibile passare come parametro un solo set di dati di input e si può restituire un solo set di dati. È tuttavia possibile chiamare altri set di dati dall'interno del codice Python e restituire output di altri tipi oltre al set di dati. È anche possibile aggiungere la parola chiave OUTPUT a qualsiasi parametro per fare in modo che venga restituito con i risultati.
È anche possibile generare i valori usando solo lo script Python senza dati di input (
@input_data_1
è impostato su un valore vuoto).Lo script seguente restituisce il testo "hello" e "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));
Risultati
@script come input" />
Suggerimento
Python usa gli spazi iniziali per raggruppare le istruzioni. Quindi, quando lo script Python incorporato si estende su più righe, come nello script precedente, non provare a far rientrare i comandi Python in modo che siano allineati con i comandi SQL. Ad esempio, questo script genera un errore:
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));
Controllare la versione di Python
Per vedere la versione di Python installata nel server, eseguire lo script seguente.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import sys
print(sys.version)
'
GO
La funzione Python print
restituisce la versione nella finestra Messaggi. Nell'output di esempio seguente si può notare che in questo caso è installata la versione di Python 3.5.2.
Risultati
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)]
Elencare i pacchetti Python
Microsoft fornisce una serie di pacchetti Python preinstallati con Machine Learning Services in SQL Server 2016 (13.x), SQL Server 2017 (14.x) e SQL Server 2019 (15.x). In SQL Server 2022 (16.x), è possibile scaricare e installare tutti i pacchetti e i runtime Python personalizzati che si desidera.
Per visualizzare un elenco dei pacchetti Python installati, inclusa la versione, eseguire lo script seguente.
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
L'elenco proviene da pkg_resources.working_set
in Python e viene restituito a SQL come frame di dati.
Passaggi successivi
Per informazioni su come usare le strutture di dati quando si usa Python con Machine Learning in SQL, seguire questo argomento di avvio rapido: