Бөлісу құралы:


Быстрый старт: Функции Python с машинным обучением в SQL

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

В этом кратком руководстве вы узнаете, как использовать математические и служебные функции 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 приведены в следующем кратком руководстве: