Curso

Introducción
¿Sabías que puedes escribir código de R y Python dentro de tus instrucciones T-SQL? Machine Learning Services en SQL Server elimina la necesidad de mover datos. En lugar de transferir por la red grandes volúmenes de datos sensibles o perder precisión con archivos CSV de muestra, puedes ejecutar tu código de R/Python dentro de la propia base de datos. Despliega fácilmente tu código de R/Python con procedimientos almacenados de SQL y hazlos accesibles en tus procesos ETL o desde cualquier aplicación. Entrena y guarda modelos de machine learning en tu base de datos y lleva la inteligencia allí donde viven tus datos.
Puedes instalar y ejecutar los paquetes open source más recientes de R/Python para crear aplicaciones de deep learning e IA con grandes volúmenes de datos en SQL Server. También hay algoritmos de última generación y alto rendimiento en las APIs RevoScaleR y RevoScalePy de Microsoft. Usarlas junto con las últimas innovaciones del mundo open source te permite aportar una selección, un rendimiento y una escalabilidad sin precedentes a tus aplicaciones.

Si te apetece probar SQL Server Machine Learning Services, echa un vistazo al tutorial práctico de abajo. Si aún no tienes Machine Learning Services instalado en SQL Server, primero sigue el tutorial de introducción publicado aquí: https://blogs.msdn.microsoft.com/mlserver/2018/05/18/getting-started-with-machine-learning-services-in-sql-server/
Tutorial paso a paso
Lo que vas a aprender
Este tutorial cubre los fundamentos para ejecutar R y Python en instrucciones T-SQL. Al terminar, sabrás:
- Cómo incrustar scripts de R y Python en instrucciones T-SQL.
- Cómo usar parámetros básicos para especificar datos de entrada y salida en scripts de R/Python.
- Qué tipos de datos se usan para pasar información entre procesos de SQL y Python/R.
Requisitos previos de configuración
Si no tienes Machine Learning Services instalado en SQL Server, primero lee este tutorial de inicio o mira estos vídeos para configurar el entorno: https://aka.ms/InstallMLServices https://aka.ms/EnableMLServices
Vídeo de apoyo
Si prefieres aprender con vídeos, este tutorial también está disponible en YouTube: @https://aka.ms/ExecuteMLServices 
Conceptos básicos
Abre SQL Server Management Studio y conéctate a tu servidor. Abre una nueva consulta y pega este ejemplo básico: (aunque en estos ejemplos se usa Python, puedes hacer lo mismo con R)
EXEC sp_execute_external_script @language = N'Python',
@script = N'print(3+4)'
Sp_execute_external_script es un procedimiento almacenado del sistema que habilita la ejecución de R y Python en SQL Server. El parámetro language te permite elegir entre Python y R. En el parámetro script puedes pegar código de R o Python. Si no ves como salida el número 7, vuelve a revisar los pasos de configuración descritos en este artículo.
Introducción a los parámetros
Después de ver un ejemplo básico, añadamos más piezas:
EXEC sp_execute_external_script @language =N'Python',
@script = N'
OutputDataSet = InputDataSet;
',
@input_data_1 =N'SELECT 1 AS Col1';
Machine Learning Services facilita la comunicación entre SQL y R/Python con un parámetro de entrada que acepta cualquier consulta SQL. El nombre de este parámetro de entrada es input_data_1.
En el código de Python verás que hay variables predeterminadas para pasar datos entre Python y SQL. Sus nombres por defecto son OutputDataSet e InputDataSet. Puedes cambiar estos nombres como en este ejemplo:
EXEC sp_execute_external_script @language =N'Python',
@script = N'
MyOutput = MyInput;
',
@input_data_1_name = N'MyInput',
@input_data_1 =N'SELECT 1 AS foo',
@output_data_1_name =N'MyOutput';
Al ejecutar estos ejemplos, quizá te hayas fijado en que devuelven un resultado con (No column name). Puedes especificar un nombre para las columnas devueltas añadiendo la cláusula WITH RESULT SETS al final de la instrucción, con una lista separada por comas de columnas y sus tipos de datos.
EXEC sp_execute_external_script @language =N'Python',
@script=N'
MyOutput = MyInput;
',
@input_data_1_name = N'MyInput',
@input_data_1 =N'SELECT 1 AS foo,2 AS bar',
@output_data_1_name =N'MyOutput'
WITH RESULT SETS ((MyColName int, MyColName2 int));
Tipos de datos de entrada y salida
Bien, hablemos un poco más de los tipos de datos de entrada/salida entre SQL y Python. Tu instrucción SQL SELECT pasa un «DataFrame» a Python apoyándose en el paquete Pandas de Python. La salida de Python de vuelta a SQL también debe ser un objeto DataFrame de Pandas. Si necesitas convertir valores escalares en un DataFrame, aquí tienes un ejemplo:
EXEC sp_execute_external_script @language =N'Python',
@script=N'
import pandas as pd
c = 1/2
d = 1*2
s = pd.Series([c,d])
df = pd.DataFrame(s)
OutputDataSet = df
'
Las variables c y d son escalares, que puedes añadir a una Series de pandas y después convertir a un DataFrame de pandas. Este ejemplo es un poco más elaborado; consulta la documentación de pandas para más detalles y ejemplos:
EXEC sp_execute_external_script @language =N'Python',
@script=N'
import pandas as pd
s = {"col1": [1, 2], "col2": [3, 4]}
df = pd.DataFrame(s)
OutputDataSet = df
'
Ya conoces lo básico para ejecutar R y Python en T-SQL. Es muy sencillo llamar a EXEC sp_execute_external_script, copiar y pegar tu código de R o Python y tu SELECT de entrada en SQL. Puede que necesites hacer una transformación o extracción de datos sencilla en R/Python pero demasiado compleja de escribir en SQL. O quizá estés entrenando una red neuronal profunda con cantidades de datos demasiado grandes para enviarlas por la red. Tal vez quieras evaluar/predicir automáticamente un resultado sobre nuevos datos que entran en tu sistema OLTP. Los casos de uso son muchos, y ahora estás listo para ganar en seguridad, rendimiento y escalabilidad con Machine Learning Services en SQL Server.
Para seguir aprendiendo
¿Sabías que también puedes escribir tu código de R y Python en tu IDE favorito, como RStudio o Jupyter Notebooks, y enviar su ejecución de forma remota a SQL Server? Consulta estos enlaces para saber más: Documentación: https://aka.ms/R-RemoteSQLExecution Documentación: https://aka.ms/R-RemoteSQLExecution Ejemplo de Jupyter Notebook en GitHub: https://aka.ms/RemoteExecJupyter
Si quieres aprender más sobre SQL, echa un vistazo a nuestro curso Intro to SQL for Data Science y a nuestro hub de aprendizaje de SQL.
