Средство для выполнения 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, которая возвращает их в виде кадра данных.
WITH RESULT SETS
Это предложение определяет схему возвращаемой таблицы данных для машинного обучения 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, см. в этом кратком руководстве:
Чтобы подготовить рабочие нагрузки машинного обучения для рабочей среды, вы будете работать с скриптами. Узнайте, как обучить модели с помощью скриптов в Машинное обучение Azure.
Управляйте загрузкой и подготовкой данных, обучением и развертыванием моделей, а также мониторингом решений машинного обучения с использованием Python, Azure Machine Learning и MLflow.