Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
Databáze SQL na jedné z těchto platforem:
- služby pro strojové učení serveru SQL. Pokud ho chcete nainstalovat, přečtěte si průvodce instalací Windows nebo průvodce instalací Linuxu.
- Clustery s velkými objemy dat SQL Serveru 2019 Podívejte se, jak povolit službu Machine Learning Services v clusterech s velkými objemy dat SQL Serveru 2019.
- Azure SQL Managed Instance Machine Learning Services Informace najdete v přehledu služby Azure SQL Managed Instance Machine Learning Services.
Nástroj pro spouštění dotazů SQL, které obsahují skripty Pythonu. V tomto rychlém startu se používá Azure Data Studio.
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)
Otevřete nové okno dotazu v Nástroji Azure Data Studio připojeném k vaší instanci SQL.
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@scriptmusí 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) 'Vypočítá se správný výsledek a funkce Pythonu
printvrá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.
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); GOPomocí příkazu
SELECTzadejte dotaz na tabulku.SELECT * FROM PythonTestDataResults
Spusťte následující skript Pythonu. Načte data z tabulky pomocí
SELECTpříkazu, projde je prostředím Python runtime a vrátí data jako datový rámec. KlauzuleWITH RESULT SETSdefinuje 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
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_namea@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.
Hodnoty můžete generovat také pomocí skriptu Pythonu bez vstupních dat (
@input_data_1je 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
@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: