Inicio rápido: Funciones de Python con aprendizaje automático de SQL
Se aplica a: SQL Server 2017 (14.x) y versiones posteriores Azure SQL Managed Instance
En este inicio rápido, aprenderá a usar las funciones matemáticas y de utilidad de Python con SQL Server Machine Learning Services, Machine Learning Services en Azure SQL Managed Instance o Clústeres de macrodatos de SQL Server. Las funciones estadísticas suelen ser complicadas de implementar en T-SQL, pero esto se puede hacer en Python con solo unas pocas líneas de código.
Prerrequisitos
Para ejecutar este inicio rápido, debe cumplir los siguientes requisitos previos.
Una base de datos SQL en una de estas plataformas:
- SQL Server Machine Learning Services. Para realizar la instalación, vea la Guía de instalación para Windows o la Guía de instalación para Linux.
- Clústeres de macrodatos de SQL Server. Consulte Habilitación de Machine Learning Services en clústeres de macrodatos de SQL Server.
- Machine Learning Services en Azure SQL Managed Instance. Para obtener información, vea Machine Learning Services de Instancia administrada de Azure SQL (versión preliminar).
Una herramienta para ejecutar consultas de SQL que contengan scripts de Python. En este inicio rápido se utiliza Azure Data Studio.
Creación de un procedimiento almacenado para generar números aleatorios
Para simplificar, vamos a usar el paquete numpy
de Python, que se instala y carga de forma predeterminada. El paquete contiene cientos de funciones para tareas estadísticas comunes, entre otras, la función random.normal
, que genera una cantidad determinada de números aleatorios que usan la distribución normal, dadas una desviación estándar y la media.
Por ejemplo, el siguiente código de Python devuelve 100 números en una media de 50, lo cual da una desviación estándar de 3.
numpy.random.normal(size=100, loc=50, scale=3)
Para llamar a esta línea de Python desde T-SQL, agregue la función de Python en el parámetro de script de Python de sp_execute_external_script
. La salida espera una trama de datos, por lo que debe usar pandas
para convertirla.
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));
¿Qué ocurriría si quisiera facilitar la generación de un conjunto diferente de números aleatorios? Defina un procedimiento almacenado que obtenga los argumentos del usuario y, a continuación, pase los argumentos al script de Python como variables.
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));
La primera línea define cada uno de los parámetros de entrada de SQL que son necesarios cuando se ejecuta el procedimiento almacenado.
La línea que empieza con
@params
define todas las variables que usa el código de Python y los correspondientes tipos de datos SQL.Las líneas que siguen inmediatamente asignan los nombres de parámetro SQL a los valores de variables de Python correspondientes.
Ahora que ha ajustado la función de Python en un procedimiento almacenado, puede llamar a la función y pasar distintos valores fácilmente de la manera siguiente:
EXECUTE MyPyNorm @param1 = 100,@param2 = 50, @param3 = 3
Usar funciones de utilidad de Python para solucionar problemas
Los paquetes de Python proporcionan una variedad de funciones de utilidad para investigar el entorno de Python actual. Estas funciones pueden ser útiles si encuentra discrepancias en la forma en que el código de Python se ejecuta en SQL Server y en entornos externos.
Por ejemplo, puede usar las funciones de temporización del sistema en el paquete time
para medir la cantidad de tiempo que usan los procesos de Python y analizar los problemas de rendimiento.
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' ;';
Pasos siguientes
Para crear un modelo de aprendizaje automático usando Python con aprendizaje automático de SQL, siga este inicio rápido: