Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: SQL Server 2017 (14.x) и более поздним версиям
Azure SQL Управляемый экземпляр
В этом кратком руководстве вы запустите ряд простых сценариев Python с помощью Служб машинного обучения SQL Server, Служб машинного обучения управляемых экземпляров SQL Azure или в Кластерах больших данных SQL Server. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в экземпляре SQL Server.
Необходимые компоненты
Для работы с этим кратким руководством необходимо следующее.
База данных SQL на одной из следующих платформ:
- Службы машинного обучения SQL Server. Сведения об установке см. в руководстве по установке для Windows или руководстве по установке для Linux.
- Кластеры больших данных SQL Server 2019. Узнайте, как включать службы машинного обучения в кластерах больших данных SQL Server 2019.
- Службы машинного обучения в Управляемом экземпляре SQL Azure. Дополнительные сведения см. в статье Общие сведения о службах машинного обучения в управляемом экземпляре SQL Azure.
Средство для выполнения SQL-запросов, содержащих сценарии Python. В этом кратком руководстве используется Azure Data Studio.
Выполнение простого сценария
Чтобы выполнить сценарий Python, необходимо передать его в качестве аргумента в системную хранимую процедуру sp_execute_external_script. Эта системная хранимая процедура запускает среду выполнения Python в контексте машинного обучения SQL, передает данные в Python, безопасно управляет пользовательскими сеансами в Python и возвращает результаты на клиент.
На следующих этапах вы запустите этот скрипт Python в базе данных:
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
Откройте новое окно запроса в среде Azure Data Studio, подключенной к вашему экземпляру SQL.
Передайте весь сценарий Python в хранимую процедуру
sp_execute_external_script.Сценарий передается с помощью аргумента
@script. Все, что находится внутри аргумента@script, должно быть допустимым кодом Python.EXECUTE sp_execute_external_script @language = N'Python' , @script = N' a = 1 b = 2 c = a/b d = a*b print(c, d) 'Далее вычисляется правильный результат, и функция Python
printвозвращает результат в окне Сообщения.Файл должен выглядеть следующим образом:
Результаты
STDOUT message(s) from external script: 0.5 2
Выполнение сценария Hello World
Типичный пример — сценарий, который просто выводит строку "Hello World". Выполните следующую команду.
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 передаются следующие входные данные.
| Входные данные | Description |
|---|---|
| @language | Определяет вызываемое расширение языка (в данном случае Python). |
| @script | Определяет команды, которые передаются в среду выполнения Python. Весь скрипт Python должен быть включен в этот аргумент в виде текста в Юникоде. Также можно добавить текст в переменную типа nvarchar, а затем вызвать ее. |
| @input_data_1 | Данные, возвращаемые запросом, передаются в среду выполнения Python, которая возвращает их в виде кадра данных. |
| С РЕЗУЛЬТИРУЮЩИМИ НАБОРАМИ | Это предложение определяет схему возвращаемой таблицы данных для машинного обучения SQL. В данном случае добавляется "Hello World" в качестве имени столбца и int в качестве типа данных. |
Эта команда выводит следующий текст:
| Hello World |
|---|
| 1 |
Использование входных и выходных данных
По умолчанию процедура sp_execute_external_script принимает в качестве входных данных один набор данных, обычно предоставляемый в виде допустимого SQL-запроса. Затем она возвращает один кадр данных Python в качестве выходных данных.
Теперь давайте будем использовать входные и выходные переменные sp_execute_external_scriptпо умолчанию: InputDataSet и OutputDataSet.
Создайте небольшую таблицу тестовых данных.
CREATE TABLE PythonTestData (col1 INT NOT NULL) INSERT INTO PythonTestData VALUES (1); INSERT INTO PythonTestData VALUES (10); INSERT INTO PythonTestData VALUES (100); GOИспользуйте инструкцию
SELECTдля запроса в эту таблицу.SELECT * FROM PythonTestDataРезультаты
Выполните следующий скрипт Python. Он получает данные из таблицы с помощью инструкции
SELECT, передает их через среду выполнения Python и возвращает результаты в виде кадра данных. ПредложениеWITH RESULT SETSопределяет схему таблицы возвращаемых данных для SQL Server, добавляя имя столбца 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));Результаты
Теперь измените имена входных и выходных переменных. Имена входных и выходных переменных по умолчанию°— InputDataSet и OutputDataSet. Следующий сценарий изменяет их на SQL_in и 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));Обратите внимание, что в Python учитывается регистр. Входные и выходные переменные, используемые в сценарии Python (SQL_out, SQL_in), должны соответствовать именам, определенным в аргументах
@input_data_1_nameи@output_data_1_name, включая регистр.Совет
В качестве параметра может быть передан только один входной набор данных, и можно возвращать только один набор данных. Однако вы можете вызывать из кода Python другие наборы данных, а также возвращать выходные данные других типов в дополнение к этому набору данных. Вы также можете добавить ключевое слово OUTPUT к любому параметру, чтобы он возвращался с результатами.
Можно также формировать значения только с помощью сценария Python, без каких-либо входных данных (в аргументе
@input_data_1задано пустое значение).Следующий сценарий выводит текст "hello" и "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));Результаты
@script как входные данные" />
Совет
В Python начальные пробелы используются для группирования инструкций. Поэтому когда внедренный сценарий Python разделяется на несколько строк, как в предыдущем примере, не пытайтесь выровнять команды Python по одной линии с командами SQL. Например, следующий сценарий выдаст ошибку.
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));
Проверка версии Python
Если вы хотите узнать, какая версия Python установлена на сервере, выполните следующий сценарий.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import sys
print(sys.version)
'
GO
Функция Python print возвращает версию в окне Сообщения. В приведенном ниже примере можно видеть, что в данном случае установлен Python версии 3.5.2.
Результаты
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)]
Список пакетов Python
Корпорация Майкрософт предоставляет ряд пакетов Python, которые предустанавливаются вместе со службами машинного обучения в SQL Server 2016 (13.x), SQL Server 2017 (14.x) и SQL Server 2019 (15.x). В SQL Server 2022 (16.x) по желанию можно скачать и установить любые пользовательские среды выполнения и пакеты Python.
Чтобы просмотреть список установленных пакетов Python вместе с их версиями, выполните следующий сценарий.
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
Список возвращается из pkg_resources.working_set в Python в формате кадра данных.
Следующие шаги
Сведения о том, как применять структуры данных при использовании Python в машинном обучении SQL, см. в этом кратком руководстве: