Início Rápido: Funções do Python com o machine learning do SQL

Aplica-se a: SQL Server 2017 (14.x) e versões posteriores Instância Gerenciada de SQL do Azure

Neste guia de início rápido, você aprenderá a usar as funções matemáticas e utilitárias do Python com os Serviços de Machine Learning do SQL Server, os Serviços de Machine Learning da Instância Gerenciada de SQL do Azure ou os Clusters de Big Data do SQL Server. As funções estatísticas muitas vezes são complicadas de implementar no T-SQL, mas isso pode ser feito no Python com apenas algumas linhas de código.

Pré-requisitos

Para executar este início rápido, você precisará dos pré-requisitos a seguir.

Criar um procedimento armazenado para gerar números aleatórios

Para simplificar, vamos usar o pacote numpy do Python, que é instalado e carregado por padrão. O pacote contém centenas de funções para tarefas estatísticas comuns, entre elas, a função random.normal, que gera um número específico de números aleatórios usando a distribuição normal, dado um desvio padrão e uma média.

Por exemplo, o código Python a seguir retorna 100 números em uma média de 50, dado um desvio padrão de 3.

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

Para chamar essa linha de Python do T-SQL, adicione a função do Python no parâmetro de script Python de sp_execute_external_script. A saída espera uma estrutura de dados, portanto, use o pandas para convertê-la.

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

E se você quiser facilitar a geração de um conjunto de números aleatórios diferente? Você define um procedimento armazenado que obtém os argumentos do usuário e, em seguida, passa esses argumentos para o script Python como variáveis.

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));
  • A primeira linha define cada um dos parâmetros de entrada SQL necessários quando o procedimento armazenado é executado.

  • A linha que começa com @params define todas as variáveis usadas pelo código Python e os tipos de dados SQL correspondentes.

  • As linhas imediatamente após mapeiam os nomes de parâmetro SQL para os nomes de variável do Python correspondentes.

Agora que você encapsulou a função do Python em um procedimento armazenado, pode facilmente chamar a função e passar valores diferentes, como este:

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

Usar funções utilitárias do Python para solução de problemas

Os pacotes do Python fornecem uma variedade de funções utilitárias para investigar o ambiente atual do Python. Essas funções poderão ser úteis se você estiver encontrando discrepâncias na maneira como o código Python é executado no SQL Server e em ambientes externos.

Por exemplo, você pode usar funções de tempo do sistema no pacote de time para medir a quantidade de tempo usada pelos processos do Python e analisar problemas de desempenho.

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

Próximas etapas

Para criar um modelo de machine learning usando o Python com o machine learning do SQL, siga este início rápido: