Краткое руководство. Выполнение простых скриптов Python с использованием машинного обучения SQLQuickstart: Run simple Python scripts with SQL machine learning

Применимо к:Applies to: даSQL Server 2017 (14.x);SQL Server 2017 (14.x)yesSQL Server 2017 (14.x);SQL Server 2017 (14.x) и более поздние версии ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed InstanceПрименимо к:Applies to: даSQL Server 2017 (14.x);SQL Server 2017 (14.x)yesSQL Server 2017 (14.x);SQL Server 2017 (14.x) and later ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance

В этом кратком руководстве вы запустите ряд простых сценариев Python с помощью Служб машинного обучения SQL Server, Служб машинного обучения управляемых экземпляров SQL Azure или в Кластерах больших данных SQL Server.In this quickstart, you'll run a set of simple Python scripts using SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services, or SQL Server Big Data Clusters. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в экземпляре SQL Server.You'll learn how to use the stored procedure sp_execute_external_script to execute the script in a SQL Server instance.

Предварительные требованияPrerequisites

Для работы с этим кратким руководством необходимо следующее.You need the following prerequisites to run this quickstart.

Выполнение простого сценарияRun a simple script

Чтобы выполнить сценарий Python, необходимо передать его в качестве аргумента в системную хранимую процедуру sp_execute_external_script.To run a Python script, you'll pass it as an argument to the system stored procedure, sp_execute_external_script. Эта системная хранимая процедура запускает среду выполнения Python в контексте машинного обучения SQL, передает данные в Python, безопасно управляет пользовательскими сеансами в Python и возвращает результаты на клиент.This system stored procedure starts the Python runtime in the context of SQL machine learning, passes data to Python, manages Python user sessions securely, and returns any results to the client.

На следующих этапах вы запустите этот скрипт Python в базе данных:In the following steps, you'll run this example Python script in your database:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)
  1. Откройте новое окно запроса в среде Azure Data Studio, подключенной к вашему экземпляру SQL.Open a new query window in Azure Data Studio connected to your SQL instance.

  2. Передайте весь сценарий Python в хранимую процедуру sp_execute_external_script.Pass the complete Python script to the sp_execute_external_script stored procedure.

    Сценарий передается с помощью аргумента @script.The script is passed through the @script argument. Все, что находится внутри аргумента @script, должно быть допустимым кодом Python.Everything inside the @script argument must be valid Python code.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
  3. Далее вычисляется правильный результат, и функция Python print возвращает результат в окне Сообщения.The correct result is calculated and the Python print function returns the result to the Messages window.

    Он должен выглядеть примерно так.It should look something like this.

    РезультатыResults

    STDOUT message(s) from external script:
    0.5 2
    

Выполнение сценария Hello WorldRun a Hello World script

Типичный пример — сценарий, который просто выводит строку "Hello World".A typical example script is one that just outputs the string "Hello World". Выполните следующую команду.Run the following command.

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 передаются следующие входные данные.Inputs to the sp_execute_external_script stored procedure include:

Входные данныеInput ОписаниеDescription
@language Определяет вызываемое расширение языка (в данном случае Python).defines the language extension to call, in this case Python
@script Определяет команды, которые передаются в среду выполнения Python.defines the commands passed to the Python runtime. Весь скрипт Python должен быть включен в этот аргумент в виде текста в Юникоде.Your entire Python script must be enclosed in this argument, as Unicode text. Также можно добавить текст в переменную типа nvarchar, а затем вызвать ее.You could also add the text to a variable of type nvarchar and then call the variable
@input_data_1 Данные, возвращаемые запросом, передаются в среду выполнения Python, которая возвращает их в виде кадра данных.data returned by the query, passed to the Python runtime, which returns the data as a data frame
WITH RESULT SETSWITH RESULT SETS Это предложение определяет схему возвращаемой таблицы данных для машинного обучения SQL. В данном случае добавляется "Hello World" в качестве имени столбца и int в качестве типа данных.clause defines the schema of the returned data table for SQL machine learning, adding "Hello World" as the column name, int for the data type

Эта команда выводит следующий текст:The command outputs the following text:

Hello WorldHello World
11

Использование входных и выходных данныхUse inputs and outputs

По умолчанию процедура sp_execute_external_script принимает в качестве входных данных один набор данных, обычно предоставляемый в виде допустимого SQL-запроса.By default, sp_execute_external_script accepts a single dataset as input, which typically you supply in the form of a valid SQL query. Затем она возвращает один кадр данных Python в качестве выходных данных.It then returns a single Python data frame as output.

Сейчас мы будем использовать заданные по умолчанию входные и выходные переменные процедуры sp_execute_external_script: InputDataSet и OutputDataSet.For now, let's use the default input and output variables of sp_execute_external_script: InputDataSet and OutputDataSet.

  1. Создайте небольшую таблицу тестовых данных.Create a small table of test data.

    CREATE TABLE PythonTestData (col1 INT NOT NULL)
    
    INSERT INTO PythonTestData
    VALUES (1);
    
    INSERT INTO PythonTestData
    VALUES (10);
    
    INSERT INTO PythonTestData
    VALUES (100);
    GO
    
  2. Используйте инструкцию SELECT для запроса в эту таблицу.Use the SELECT statement to query the table.

    SELECT *
    FROM PythonTestData
    

    РезультатыResults

    Содержимое таблицы PythonTestData

  3. Выполните следующий скрипт Python.Run the following Python script. Он получает данные из таблицы с помощью инструкции SELECT, передает их через среду выполнения Python и возвращает результаты в виде кадра данных.It retrieves the data from the table using the SELECT statement, passes it through the Python runtime, and returns the data as a data frame. Предложение WITH RESULT SETS определяет схему таблицы возвращаемых данных для SQL Server, добавляя имя столбца NewColName.The WITH RESULT SETS clause defines the schema of the returned data table for SQL, adding the column name 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

    Результат скрипта Python, возвращающий данные из таблицы

  4. Теперь измените имена входных и выходных переменных.Now change the names of the input and output variables. Имена входных и выходных переменных по умолчанию°— InputDataSet и OutputDataSet. Следующий сценарий изменяет их на SQL_in и SQL_out.The default input and output variable names are InputDataSet and OutputDataSet, the following script changes the names to SQL_in and 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 учитывается регистр.Note that Python is case-sensitive. Входные и выходные переменные, используемые в сценарии Python (SQL_out, SQL_in), должны соответствовать именам, определенным в аргументах @input_data_1_name и @output_data_1_name, включая регистр.The input and output variables used in the Python script (SQL_out, SQL_in) need to match the names defined with @input_data_1_name and @output_data_1_name, including case.

    Совет

    В качестве параметра может быть передан только один входной набор данных, и можно возвращать только один набор данных.Only one input dataset can be passed as a parameter, and you can return only one dataset. Однако вы можете вызывать из кода Python другие наборы данных, а также возвращать выходные данные других типов в дополнение к этому набору данных.However, you can call other datasets from inside your Python code and you can return outputs of other types in addition to the dataset. Вы также можете добавить ключевое слово OUTPUT к любому параметру, чтобы он возвращался с результатами.You can also add the OUTPUT keyword to any parameter to have it returned with the results.

  5. Можно также формировать значения только с помощью сценария Python, без каких-либо входных данных (в аргументе @input_data_1 задано пустое значение).You can also generate values just using the Python script with no input data (@input_data_1 is set to blank).

    Следующий сценарий выводит текст "hello" и "world".The following script outputs the text "hello" and "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 в качестве входных данных

Примечание

В Python начальные пробелы используются для группирования инструкций.Python uses leading spaces to group statements. Поэтому когда внедренный сценарий Python разделяется на несколько строк, как в предыдущем примере, не пытайтесь выровнять команды Python по одной линии с командами SQL.So when the imbedded Python script spans multiple lines, as in the preceding script, don't try to indent the Python commands to be in line with the SQL commands. Например, следующий сценарий выдаст ошибку.For example, this script will produce an error:

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));

Проверка версии PythonCheck Python version

Если вы хотите узнать, какая версия Python установлена на сервере, выполните следующий сценарий.If you would like to see which version of Python is installed in your server, run the following script.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import sys
print(sys.version)
'
GO

Функция Python print возвращает версию в окне Сообщения.The Python print function returns the version to the Messages window. В приведенном ниже примере можно видеть, что в данном случае установлен Python версии 3.5.2.In the example output below, you can see that in this case, Python version 3.5.2 is installed.

Результаты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)]

Список пакетов PythonList Python packages

Корпорация Майкрософт предоставляет ряд пакетов Python, которые устанавливаются вместе со Службами машинного обучения.Microsoft provides a number of Python packages pre-installed with Machine Learning Services.

Чтобы просмотреть список установленных пакетов Python вместе с их версиями, выполните следующий сценарий.To see a list of which Python packages are installed, including version, run the following script.

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 в формате кадра данных.The list is from pkg_resources.working_set in Python and returned to SQL as a data frame.

РезультатыResults

Просмотр всех установленных пакетов Python

Дальнейшие действияNext steps

Сведения о том, как применять структуры данных при использовании Python в машинном обучении SQL, см. в этом кратком руководстве:To learn how to use data structures when using Python in SQL machine learning, follow this quickstart: