Partilhar via


Guia de início rápido: execute scripts Python simples com aprendizado de máquina SQL

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

Neste início rápido, você executará um conjunto de scripts Python simples usando os Serviços de Aprendizado de Máquina do SQL Server, os Serviços de Aprendizado de Máquina de Instância Gerenciada do SQL do Azure ou os Clusters de Big Data do SQL Server. Você aprenderá como usar o sp_execute_external_script de procedimento armazenado para executar o script em uma instância do SQL Server.

Pré-requisitos

Você precisa dos seguintes pré-requisitos para executar este início rápido.

Executar um script simples

Para executar um script Python, você o passará como um argumento para o procedimento armazenado do sistema, sp_execute_external_script. Este procedimento armazenado do sistema inicia o tempo de execução do Python no contexto do aprendizado de máquina SQL, passa dados para o Python, gerencia sessões de usuário Python com segurança e retorna quaisquer resultados para o cliente.

Nas etapas a seguir, você executará este script Python de exemplo em seu banco de dados:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)
  1. Abra uma nova janela de consulta no Azure Data Studio conectada à sua instância SQL.

  2. Passe o script Python completo para o sp_execute_external_script procedimento armazenado.

    O script é passado através do @script argumento. Tudo dentro do @script argumento deve ser código Python válido.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
  3. O resultado correto é calculado e a função Python print retorna o resultado para a janela Mensagens .

    Deveria ser algo assim.

    Results

    STDOUT message(s) from external script:
    0.5 2
    

Executar um script Hello World

Um script de exemplo típico é aquele que apenas produz a string "Hello World". Execute o seguinte comando.

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

As entradas para o sp_execute_external_script procedimento armazenado incluem:

Entrada Description
@language define a extensão de linguagem para chamar, neste caso Python
@script define os comandos passados para o tempo de execução do Python. Todo o script Python deve ser incluído neste argumento, como texto Unicode. Você também pode adicionar o texto a uma variável do tipo nvarchar e, em seguida, chamar a variável
@input_data_1 dados retornados pela consulta, passados para o tempo de execução do Python, que retorna os dados como um quadro de dados
COM CONJUNTOS DE RESULTADOS A cláusula define o esquema da tabela de dados retornada para aprendizagem automática em SQL, acrescentando "Hello World" como designação da coluna e int como tipo de dados.

O comando produz o seguinte texto:

Hello World
1

Usar entradas e saídas

Por padrão, sp_execute_external_script aceita um único conjunto de dados como entrada, que normalmente você fornece na forma de uma consulta SQL válida. Em seguida, ele retorna um único quadro de dados Python como saída.

Por enquanto, vamos usar as variáveis de entrada e saída padrão de sp_execute_external_script: InputDataSet e OutputDataSet.

  1. Crie uma pequena tabela de dados de teste.

    CREATE TABLE PythonTestData (col1 INT NOT NULL)
    
    INSERT INTO PythonTestData
    VALUES (1);
    
    INSERT INTO PythonTestData
    VALUES (10);
    
    INSERT INTO PythonTestData
    VALUES (100);
    GO
    
  2. Use a SELECT instrução para consultar a tabela.

    SELECT *
    FROM PythonTestData
    

    Results

    Conteúdo da tabela PythonTestData

  3. Execute o seguinte script Python. Ele recupera os dados da tabela usando a SELECT instrução, passa-os pelo tempo de execução do Python e retorna os dados como um quadro de dados. A WITH RESULT SETS cláusula define o esquema da tabela de dados retornada para SQL, adicionando o nome da coluna 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

    Saída do script Python que retorna dados de uma tabela

  4. Agora altere os nomes das variáveis de entrada e saída. Os nomes das variáveis de entrada e saída padrão são InputDataSet e OutputDataSet, o script a seguir altera os nomes para SQL_in e 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));
    

    Note que o Python distingue entre maiúsculas e minúsculas. As variáveis de entrada e saída usadas no script Python (SQL_out, SQL_in) precisam corresponder aos nomes definidos com @input_data_1_name e @output_data_1_name, incluindo os casos.

    Sugestão

    Apenas um conjunto de dados de entrada pode ser passado como um parâmetro e você pode retornar apenas um conjunto de dados. No entanto, você pode chamar outros conjuntos de dados de dentro do seu código Python e pode retornar saídas de outros tipos além do conjunto de dados. Você também pode adicionar a palavra-chave OUTPUT a qualquer parâmetro para que ela seja retornada com os resultados.

  5. Você também pode gerar valores apenas usando o script Python sem dados de entrada (@input_data_1 está definido como em branco).

    O script a seguir produz o texto "olá" e "mundo".

    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

    Resultados da consulta usando <span class= @script como entrada" />

Sugestão

Python usa espaços iniciais para agrupar instruções. Portanto, quando o script Python incorporado se estende por várias linhas, como no script anterior, não tente indentar os comandos Python para ficarem alinhados com os comandos SQL. Por exemplo, este script produzirá um erro:

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

Verifique a versão do Python

Se você gostaria de ver qual versão do Python está instalada no seu servidor, execute o seguinte script.

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

A função Python print retorna a versão para a janela Mensagens . No exemplo de saída abaixo, você pode ver que, neste caso, a versão 3.5.2 do Python está instalada.

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

Listar pacotes Python

A Microsoft fornece vários pacotes Python pré-instalados com os Serviços de Aprendizado de Máquina no SQL Server 2016 (13.x), SQL Server 2017 (14.x) e SQL Server 2019 (15.x). No SQL Server 2022 (16.x), você pode baixar e instalar quaisquer runtimes e pacotes Python personalizados conforme desejado.

Para ver uma lista de quais pacotes Python estão instalados, incluindo a versão, execute o script a seguir.

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

A lista é de pkg_resources.working_set em Python e retornada ao SQL como um quadro de dados.

Próximos passos

Para aprender a usar estruturas de dados ao usar Python no aprendizado de máquina SQL, siga este guia de início rápido: