Краткое руководство. Функции Python с использованием машинного обучения SQL

Применимо к: SQL Server 2017 (14.x) и более поздних Управляемый экземпляр SQL Azure

В этом кратком руководстве вы узнаете, как использовать математические и служебные функции Python в Службах машинного обучения SQL Server, Службах машинного обучения управляемого экземпляра Azure SQL или в Кластерах больших данных SQL Server. Зачастую статистические функции, которые сложно реализовать в T-SQL, выполняются в Python всего парой строк кода.

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

Для работы с этим кратким руководством необходимо следующее.

Создание хранимой процедуры для формирования случайных чисел

Для простоты давайте воспользуемся пакетом Python numpy, который устанавливается и загружается по умолчанию. Он содержит сотню функций для общих статистических задач, в том числе функцию random.normal, которая формирует указанное количество случайных чисел с нормальным распределением при заданном среднем значении и стандартном отклонении.

Например, следующий код Python возвращает 100 чисел со средним значением 50 и стандартным отклонением 3.

numpy.random.normal(size=100, loc=50, scale=3)

Чтобы вызвать эту строку Python из T-SQL, добавьте функцию Python в параметр скрипта Python sp_execute_external_script. На выходе должен получиться кадр данных, поэтому используйте для преобразования pandas.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import numpy
import pandas
OutputDataSet = pandas.DataFrame(numpy.random.normal(size=100, loc=50, scale=3));
'
    , @input_data_1 = N'   ;'
WITH RESULT SETS(([Density] FLOAT NOT NULL));

Как упростить формирование другого набора случайных чисел? Вы определяете хранимую процедуру, которая получает предоставленные пользователем аргументы и передает их в качестве переменных в скрипт Python.

CREATE PROCEDURE MyPyNorm (
      @param1 INT
    , @param2 INT
    , @param3 INT
    )
AS
EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import numpy
import pandas
OutputDataSet = pandas.DataFrame(numpy.random.normal(size=mynumbers, loc=mymean, scale=mysd));
'
    , @input_data_1 = N'   ;'
    , @params = N' @mynumbers int, @mymean int, @mysd int'
    , @mynumbers = @param1
    , @mymean = @param2
    , @mysd = @param3
WITH RESULT SETS(([Density] FLOAT NOT NULL));
  • В первой строке определяется каждый из входных параметров SQL, необходимых при выполнении хранимой процедуры.

  • Строка, начинающаяся с @params, определяет все переменные, используемые в коде Python, и соответствующие типы данных SQL.

  • Следующие строки сопоставляют имена параметров SQL с соответствующими именами переменных Python.

Теперь, когда функция Python упакована в хранимой процедуре, вы можете легко вызвать ее и передать различные значения, как показано ниже:

EXECUTE MyPyNorm @param1 = 100,@param2 = 50, @param3 = 3

Использование служебных функций Python для устранения неполадок

В пакетах Python предусмотрено множество служебных функций для изучения текущей среды Python. Они могут оказаться полезными, если вы нашли несоответствия в выполнении кода Python в SQL Server и внешних средах.

Например, с помощью функций управления системным временем в пакете time вы можете оценить количество времени, затрачиваемого процессами Python, и проанализировать проблемы, связанные с производительностью.

EXECUTE sp_execute_external_script
      @language = N'Python'
    , @script = N'
import time
start_time = time.time()

# Run Python processes

elapsed_time = time.time() - start_time
'
    , @input_data_1 = N' ;';

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

Сведения о создании модели машинного обучения с использованием Python и машинного обучения SQL приведены в следующем кратком руководстве: