Está en la página 1de 633

Contents

Documentación del aprendizaje automático en SQL


Documentación de Microsoft SQL >
Información general
¿Qué es Machine Learning Services (Python y R)?
¿Qué es R Services?
Servidor independiente
Novedades
Instalar
Instalación de ML Services en Windows
Instalación de ML Services en Linux
Instalación de ML Services en Docker
Cambios relativos al aislamiento en SQL Server 2019
Instalación de R Services
Instalación sin conexión a Internet
Instalación sin acceso a Internet
Descargas de CAB
Configuración del símbolo del sistema
Instalación de modelos previamente entrenados
Instalación de un entorno de ejecución personalizado
Instalación de un entorno de ejecución personalizado de Python
Instalación de un entorno de ejecución personalizado de R
Cambio del tiempo de ejecución predeterminado de Python y R
Actualización del entorno de ejecución de Python y R con enlace
Azure Data Studio Notebooks
Configuración de un cliente de Python
Configuración de un cliente de R
Instalación en Azure VM
Instalación del servidor independiente
Guías de inicio rápido
Python
Ejecución de scripts de Python
Objetos y estructuras de datos
Funciones de Python
Entrenamiento y puntuación de un modelo
R
Ejecutar scripts de R
Tipos de datos y objetos
Funciones R
Entrenamiento y puntuación de un modelo
Tutoriales
Python
Tutoriales de Python
Alquiler de esquís (regresión lineal)
1 - Introducción
2 - Preparación de los datos
3 - Entrenamiento del modelo
4 - Implementación del modelo
Categorización de clientes (agrupación en clústeres k-means)
1 - Introducción
2 - Preparación de los datos
3 - Creación del modelo
4 - Implementación del modelo
Recomendaciones de taxis de Nueva York (clasificación)
1 - Introducción
2 - Exploración de datos
3 - Ingeniería de características
4 - Entrenamiento e implementación
5 - Predicciones
Creación de un modelo de Python mediante revoscalepy
R
Tutoriales de R
Alquiler de material para esquiar (árbol de decisión)
1 - Introducción
2 - Preparación de los datos
3 - Entrenamiento del modelo
4 - Implementación del modelo
Categorización de clientes (agrupación en clústeres k-means)
1 - Introducción
2 - Preparación de los datos
3 - Creación del modelo
4 - Implementación del modelo
Recomendaciones de taxis de Nueva York (clasificación)
1. Introducción
2. Exploración de datos
3. Ingeniería de características
4. Entrenamiento e implementación
5. Predicciones
Creación de modelos basados en particiones
Uso de SQL ML en herramientas de R
1. Introducción
2. Exploración de datos
3. Gráficos y trazados
4. Ingeniería de características
5. Generar y guardar el modelo
6. Implementar y usar el modelo
Análisis detallado de RevoScaleR
Introducción
1. Crear bases de datos y permisos
2. Creación de un objeto RxSqlServerData
3. Consultar y modificar datos
4. Definir un contexto de cálculo
5. Cálculo de estadísticas de resumen
6. Visualización de datos
7. Crear modelos
8. Puntuación de nuevos datos
9. Transformación de datos
10. Carga de datos mediante rxImport
11. Crear una tabla mediante rxDataStep
12. Realizar análisis de fragmentación
13. Movimiento de datos con el archivo XDF
14. Envío de R personalizado mediante rxExec
Datos de muestra
Conjunto de datos Airline
Conjunto de datos Iris
Conjunto de datos NYC Taxi
Conceptos
Marco de extensibilidad
Extensión de Python
Extensión de R
Seguridad
Guías paso a paso
Conectar
Conexión de bucle invertido
Conexión a OLAP desde R
Usar datos de cubos OLAP en R
Cómo crear consultas MDX con olapR
Exploración y modelado de datos
Python
Trazado de histograma en Python
Importación de datos en dataframe de Pandas
Inserción de un dataframe en SQL
R
Cargar objetos de R mediante ODBC
Creación de varios modelos con rxExecBy
Conversiones de tipos de datos
De Python a SQL
De R a SQL
Implementación
Modificación del código de R/Python para SQL Server
Predicciones
Puntuación nativa con PREDICT T-SQL
Puntuación en tiempo real con sp_rxpredict
Administración de paquetes
Instalación de paquetes de Python adicionales
Obtención de información de paquetes de Python
Instalación con sqlmlutils
Instalación con herramientas de Python
Instalación de paquetes de R adicionales
Obtención de información de paquetes de R
Instalación con herramientas de R
Instalación con sqlmlutils
Instalación con T-SQL
Uso de RevoScaleR
Instalación con RevoScaleR
Habilitación de la administración remota de R
Sincronización de paquetes de R
Creación de un repositorio de miniCRAN
Sugerencias para usar paquetes de R
Administración
Supervisión
Supervisión con informes SSMS
Supervisión mediante DMV
Eventos extendidos
Supervisión con eventos extendidos
Supervisión de PREDICT T-SQL
Escalado de la ejecución de scripts
Regulador de recursos
Uso del regulador de recursos
Creación de un grupo de recursos
Seguridad
Concesión de permiso a los usuarios
Configuración de Launchpad
Configuración del firewall
Creación de un inicio de sesión para SQLRUserGroup
Rendimiento
Rendimiento del código R
Optimización de datos en R
Usar las funciones de generación de perfiles de código de R
Referencia
Paquetes de Python
revoscalepy
microsoftml
Paquetes de R
RevoScaleR
MicrosoftML
olapR
sqlrutils
Recursos
Notas de la versión 2019 >
Notas de la versión 2017 >
Notas de la versión 2016 >
Notas de la versión 2014 >
Solución de problemas
Problemas conocidos
Recopilación de datos para la solución de problemas
LaunchPad y errores de script externos
Errores comunes de scripting de R
¿Qué es Machine Learning Services para
SQL Server con Python y R?
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores


Machine Learning Services es una característica de SQL Server que proporciona la capacidad de ejecutar scripts
de Python y R con datos relacionales. Para llevar a cabo análisis predictivo y aprendizaje automático, se pueden
usar marcos y paquetes de código abierto, además de paquetes de Python y R de Microsoft. Los scripts se
ejecutan en la base de datos sin mover los datos fuera de SQL Server o a través de la red. En este artículo se
explican los conceptos básicos de SQL Server Machine Learning Services y cómo empezar a usarlo.

NOTE
Machine Learning Services también está disponible en Azure SQL Managed Instance. Para obtener información sobre el
aprendizaje automático en otras plataformas de SQL, consulte la documentación del aprendizaje automático de SQL.

NOTE
Machine Learning Services también está disponible en Azure SQL Managed Instance. Para obtener información sobre el
aprendizaje automático en otras plataformas de SQL, consulte la documentación del aprendizaje automático de SQL.
Para ejecutar Java en SQL Server, consulte la documentación sobre la extensión de lenguaje Java.

Ejecución de scripts de Python y R en SQL Server


SQL Server Machine Learning Services permite ejecutar scripts de Python y R en la base de datos. Se puede
usar para preparar y limpiar los datos, realizar ingeniería de características, y entrenar, evaluar e implementar
modelos de aprendizaje automático en una base de datos. La característica ejecuta los scripts donde residen los
datos y elimina la transferencia de los datos a otro servidor a través de la red.
Puede ejecutar scripts de Python y R en una instancia de SQL Server con el procedimiento almacenado
sp_execute_external_script.
Machine Learning Services incluye las distribuciones base de Python y R. Se pueden instalar y usar marcos y
paquetes de código abierto, como PyTorch, TensorFlow y scikit-learn, además de los paquetes de Microsoft.
Machine Learning Services usa un marco de extensibilidad para ejecutar scripts de Python y R en SQL Server.
Más información sobre cómo funciona:
Plataforma de extensibilidad
Extensión de Python
Extensión de R

Introducción a Machine Learning Services


1. Instale Machine Learning Services de SQL Server en Windows o en Linux. También puede usar Machine
Learning Services en clústeres de macrodatos y Machine Learning Services en Azure SQL Managed
Instance.
2. Configure las herramientas de desarrollo. Puede ejecutar scripts de Python y R en cuadernos de Azure
Data Studio. También puede ejecutar T-SQL en Azure Data Studio.
3. Escriba su primer script de Python o R.
Tutoriales de Python para aprendizaje automático de SQL
Tutoriales de R para aprendizaje automático de SQL
1. Instale Machine Learning Services de SQL Server en Windows.
2. Configure las herramientas de desarrollo. Puede ejecutar scripts de Python y R en cuadernos de Azure
Data Studio. También puede usar T-SQL en Azure Data Studio.
3. Escriba su primer script de Python o R.
Tutoriales de Python para aprendizaje automático de SQL
Tutoriales de R para aprendizaje automático de SQL

Versiones de Python y R
A continuación se muestran las versiones de Python y R incluidas en Machine Learning Services.

A C T UA L IZ A C IÓ N VERSIÓ N DEL EN TO RN O DE VERSIO N ES DEL EN TO RN O


VERSIÓ N DE SQ L SERVER A C UM UL A DA E JEC UC IÓ N DE P Y T H O N DE E JEC UC IÓ N DE R

SQL Server 2019 RTM y versiones posteriores 3.7.1 3.5.2

SQL Server 2017 CU22 y versiones 3.5.2 y 3.7.2 3.3.3 y 3.5.2


posteriores

SQL Server 2017 RTM - CU21 3.5.2 3.3.3

Para la versión de R en SQL Server 2016, vea la sección Versión de R de ¿Qué es R Services?

Paquetes de Python y R
Además de los paquetes de empresa de Microsoft, pueden usarse usar marcos y paquetes de código abierto.
Los paquetes de Python y R de código abierto más comunes están preinstalados en Machine Learning Services.
También se incluyen los siguientes paquetes de Python y R de Microsoft:

IDIO M A PA Q UET E DESC RIP C IÓ N

Python revoscalepy Es el paquete principal para Python


escalable. Transformaciones y
manipulación de datos, resumen
estadístico, visualización y muchas
formas de modelado. Además, las
funciones de este paquete distribuyen
automáticamente las cargas de trabajo
entre los núcleos disponibles para su
procesamiento paralelo.

Python microsoftml Agrega algoritmos de aprendizaje


automático para crear modelos
personalizados dedicados al análisis de
texto, imágenes y opiniones.
IDIO M A PA Q UET E DESC RIP C IÓ N

R RevoScaleR Este es el paquete principal para R


escalable. Permite realizar
transformaciones y manipulaciones de
datos, resúmenes estadísticos,
visualizaciones y muchas formas de
modelado. Además, las funciones de
este paquete distribuyen
automáticamente las cargas de trabajo
entre los núcleos disponibles para su
procesamiento paralelo.

R MicrosoftML (R) Agrega algoritmos de aprendizaje


automático para crear modelos
personalizados dedicados al análisis de
texto, imágenes y opiniones.

R olapR Se trata de funciones de R usadas para


las consultas MDX en un cubo OLAP
de SQL Server Analysis Services.

R sqlrutils Este es un mecanismo para usar scripts


de R en un procedimiento almacenado
de T-SQL, registrar dicho
procedimiento almacenado en una
base de datos y ejecutarlo en un
entorno de desarrollo de R.

R Microsoft R Open Microsoft R Open (MRO) es la


distribución mejorada de Microsoft R.
Se trata de una plataforma de código
abierto completa dedicada al análisis
estadístico y la ciencia de datos.
Basada en R y compatible al 100 % con
ese lenguaje, incluye capacidades
adicionales para mejorar el
rendimiento y la reproducibilidad.

Para obtener más información sobre los paquetes que se instalan con Machine Learning Services y cómo
instalar otros paquetes, consulte:
Obtención de información de paquetes de Python
Instalación de paquetes de Python con sqlmlutils
Obtención de información de paquetes de R
Instalación de nuevos paquetes de R con sqlmlutils
Obtención de información de paquetes de Python
Instalación de paquetes con las herramientas de Python en SQL Server
Obtención de información de paquetes de R
Uso de T-SQL (CREATE EXTERNAL LIBRARY) para instalar paquetes de R en SQL Server

Pasos siguientes
Instalación de SQL Server Machine Learning Services en Windows o en Linux
Tutoriales de Python para aprendizaje automático de SQL
Tutoriales de R para aprendizaje automático de SQL
¿Qué es SQL Server 2016 R Services?
14/07/2021 • 4 minutes to read

Se aplica a: Solo disponible en SQL Server 2016 (13.x)


R Services es una característica de SQL Server 2016 que ofrece la posibilidad de ejecutar scripts de R con datos
relacionales. Para realizar un análisis predictivo y aprendizaje automático, se pueden usar plataformas y
paquetes de código abierto, además de paquetes de Microsoft R. Los scripts se ejecutan en la base de datos sin
mover los datos fuera de SQL Server o a través de la red. En este artículo se explican los conceptos básicos de
SQL Server R Services.

NOTE
Se ha cambiado el nombre de R Services a Machine Learning Services en SQL Server 2017 y versiones posteriores, y es
compatible con Python y R.

¿Qué es R Services?
SQL Server R Services permite ejecutar scripts de R en la base de datos. Se puede usar para preparar y limpiar
los datos, realizar ingeniería de características, y entrenar, evaluar e implementar modelos de aprendizaje
automático en una base de datos. La característica ejecuta los scripts donde residen los datos y elimina la
transferencia de los datos a otro servidor a través de la red.
Las distribuciones base de R se incluyen en R Services. Puede usar paquetes y plataformas de código abierto,
además de los paquetes RevoScaleR, MicrosoftML, [olapR]../r/ref-r-olapr.md) y sqlrutils de Microsoft para R.
R Services usa una plataforma de extensibilidad para ejecutar scripts de R en SQL Server. Más información
sobre cómo funciona:
Plataforma de extensibilidad
Extensión de R

¿Qué se puede hacer con R Services?


R Services puede usarse para compilar y entrenar modelos de aprendizaje automático y de aprendizaje
profundo en SQL Server. También es posible implementar modelos existentes en R Services y usar datos
relacionales para las predicciones.
Estos son algunos de los ejemplos del tipo de predicciones para los que se puede usar SQL Server R Services:

T IP O DE P REDIC C IÓ N E JEM P LO

Clasificación o categorización División automática de los comentarios de los clientes en


categorías positivas y negativas

Regresión o predicción de valores continuos Predicción del precio de viviendas en función del tamaño y la
ubicación

Detección de anomalías Detección de transacciones bancarias fraudulentas


T IP O DE P REDIC C IÓ N E JEM P LO

Recomendaciones Sugerencias de productos que pueden interesar a los


compradores en Internet en función de compras anteriores

Cómo ejecutar scripts de R


Hay dos maneras de ejecutar scripts de R en R Services:
La manera más común es usar el procedimiento almacenado de T-SQL sp_execute_external_script.
También puede usar su cliente de R preferido y escribir scripts que fuercen la ejecución (denominada
contexto de proceso remoto) en una instancia de SQL Server remota. Para obtener más información, vea
cómo configurar el desarrollo de R de un cliente de ciencia de datos.

Versiones de R
A continuación se enumeran las versiones del runtime de R que se incluyen en SQL Server 2016 R Services.

VERSIÓ N DE SQ L SERVER VERSIO N ES P REDET ERM IN A DA S DEL RUN T IM E DE R

SQL Server 2016 RTM - SP2 CU13 3.2.2

SQL Server 2016 SP2 CU14 y versiones posteriores 3.2.2 y 3.5.2

La actualización acumulativa (CU) 14 para SQL Server 2016 Service Pack (SP) 2 y versiones posteriores incluyen
los runtime de R más recientes. Para obtener más información, vea Cambio a la versión predeterminada del
runtime de lenguaje predeterminado.
Para otras versiones de R, o para ejecutar Python, use Machine Learning Services para SQL Server 2017 y
versiones posteriores.

Paquetes de R
Además de los paquetes de empresa de Microsoft, pueden usarse usar marcos y paquetes de código abierto.
Los paquetes de R de código abierto más comunes están preinstalados en R Services. También se incluyen los
siguientes paquetes de Microsoft R:

PA Q UET E DESC RIP C IÓ N

RevoScaleR Este es el paquete principal para R escalable. Permite realizar


transformaciones y manipulaciones de datos, resúmenes
estadísticos, visualizaciones y muchas formas de modelado.
Además, las funciones de este paquete distribuyen
automáticamente las cargas de trabajo entre los núcleos
disponibles para su procesamiento paralelo.

MicrosoftML (R) Agrega algoritmos de aprendizaje automático para crear


modelos personalizados dedicados al análisis de texto,
imágenes y opiniones.

olapR Se trata de funciones de R usadas para las consultas MDX en


un cubo OLAP de SQL Server Analysis Services.
PA Q UET E DESC RIP C IÓ N

sqlrutils Este es un mecanismo para usar scripts de R en un


procedimiento almacenado de T-SQL, registrar dicho
procedimiento almacenado en una base de datos y
ejecutarlo en un entorno de desarrollo de R.

Microsoft R Open Microsoft R Open (MRO) es la distribución mejorada de


Microsoft R. Se trata de una plataforma de código abierto
completa dedicada al análisis estadístico y la ciencia de datos.
Basada en R y compatible al 100 % con ese lenguaje, incluye
capacidades adicionales para mejorar el rendimiento y la
reproducibilidad.

¿Cómo empezar con R Services?


1. Instalación de SQL Server 2016 R Services
2. Configure las herramientas de desarrollo. Puede usar:
Azure Data Studio o SQL Server Management Studio (SSMS) para usar T-SQL y el procedimiento
almacenado sp_execute_external_script con el fin de ejecutar el script de R.
R en su propio equipo portátil o estación de trabajo de desarrollo para ejecutar scripts. Puede extraer
datos de forma local u ordenar la ejecución de forma remota en SQL Server con RevoScaleR. Para
obtener más información, vea cómo configurar el desarrollo de R de un cliente de ciencia de datos.
3. Escritura del primer script de R
Inicio rápido: Creación y ejecución de scripts de R sencillos en SQL Server
Inicio rápido: Creación y entrenamiento de un modelo predictivo en R
Tutorial: Uso de R en T-SQL: explore datos, realice ingeniería de características, entrene e implemente
modelos y haga predicciones (serie de cinco partes).
Tutorial: Uso de R Services en herramientas de R: explore datos, cree gráficos y trazados, realice
ingeniería de características, entrene e implemente modelos y haga predicciones (serie de seis partes).

Pasos siguientes
Instalación de SQL Server 2016 R Services
Configuración de un cliente de ciencia de datos para el desarrollo de R
¿Qué son Machine Learning Server (independiente)
o R Server en SQL Server?
14/07/2021 • 6 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores

IMPORTANT
La compatibilidad con Machine Learning Server (anteriormente conocido como R Server) finalizará el 1 de julio de 2022.
Para obtener más información, consulte ¿Qué sucederá con Machine Learning Server?

SQL Server proporciona soporte de instalación para un servidor R Server o Machine Learning Server
independiente que se ejecuta independientemente de SQL Server. En función de la versión de SQL Server, un
servidor independiente tiene una base de R de código abierto y posiblemente de Python, superpuestas con
bibliotecas de alto rendimiento de Microsoft que agregan análisis predictivos y estadísticos a escala. Las
bibliotecas también permiten realizar tareas de aprendizaje automático con scripts en R o Python.
En SQL Server 2016, esta característica se denomina R Ser ver (independiente) y es de solo R. En
SQL Server 2017 se denomina Machine Learning Ser ver (independiente) e incluye R y Python.

NOTE
Tal y como se instala con el programa de instalación de SQL Server, un servidor independiente es funcionalmente
equivalente a las versiones que no son de la marca SQL de Microsoft Machine Learning Server y admite los mismos
escenarios de usuario, como la ejecución remota, la operacionalización y los servicios web, así como la colección completa
de bibliotecas de R y Python.

Componentes
SQL Server 2016 solo admite R. SQL Server 2017 admite R y Python. En la tabla siguiente se indican las
características de cada versión.

C O M P O N EN T E DESC RIP C IÓ N

Paquetes de R RevoScaleR es la biblioteca principal para R escalable con


funciones para la manipulación, transformación, visualización
y análisis de datos.
MicrosoftML agrega algoritmos de aprendizaje automático
para crear modelos personalizados dedicados al análisis de
texto, imágenes y opiniones.
sqlRUtils proporciona funciones del asistente para colocar
scripts de R en un procedimiento almacenado de T-SQL,
registrar dicho procedimiento almacenado en una base de
datos y ejecutarlo desde un entorno de desarrollo de R.
olapr es para especificar consultas MDX en R.

Microsoft R Open (MRO) MRO es la distribución de código abierto de Microsoft de R.


Se incluyen el paquete y el intérprete. Use siempre la versión
de MRO que se incluye en el programa de instalación.
C O M P O N EN T E DESC RIP C IÓ N

Herramientas de R Las ventanas de la consola de R y los símbolos del sistema


son herramientas estándar en una distribución de R. Podrá
encontrarlos en \Archivos de programa\Microsoft SQL
Server\140\ R_SERVER\bin\x64.

Ejemplos de R y scripts Los paquetes de código abierto de R y RevoScaleR incluyen


conjuntos de datos integrados para que pueda crear y
ejecutar scripts con datos preinstalados. Podrá buscarlos en
\Archivos de programa\Microsoft SQL Server\140\
R_SERVER\library\datasets y \library\RevoScaleR.

Paquetes de Python revoscalepy es la biblioteca principal para Python escalable


con funciones para la manipulación, transformación,
visualización y análisis de datos.
microsoftml agrega algoritmos de aprendizaje automático
para crear modelos personalizados dedicados al análisis de
texto, imágenes y opiniones.

Herramientas de Python: La herramienta integrada de línea de comandos de Python


es útil para las pruebas y tareas ad hoc. Podrá encontrar la
herramienta en \Archivos de programa\Microsoft SQL
Server\140\PYTHON_SERVER\python.exe.

Anaconda Anaconda es una distribución de código abierto de Python y


paquetes esenciales.

Ejemplos de Python y scripts Al igual que con R, Python incluye scripts y conjuntos de
datos integrados. Podrá encontrar los datos de revoscalepy
en \Archivos de programa\Microsoft SQL
Server\140\PYTHON_SERVER\bib\site-
packages\revoscalepy\data\sample-data.

Modelos previamente entrenados en R y Python Los modelos previamente entrenados se crean para casos de
uso específicos y los mantiene el equipo de ingeniería de
ciencia de datos de Microsoft. Puede usar los modelos
previamente entrenados tal cual para puntuar la opinión
positiva-negativa en el texto o para detectar características
en las imágenes, con las nuevas entradas de datos que
proporcione. Los modelos previamente entrenados se
admiten y se pueden usar en un servidor independiente,
pero no se pueden instalar a través del programa de
instalación de SQL Server. Para obtener más información, vea
Instalación de modelos de aprendizaje automático
previamente entrenados en SQL Server.

Uso de un servidor independiente


Los desarrolladores de R y Python suelen elegir un servidor independiente para moverse más allá de la
memoria y las restricciones de procesamiento de R y Python de código abierto. Las bibliotecas de R y Python
que se ejecutan en un servidor independiente pueden cargar y procesar grandes cantidades de datos en varios
núcleos y agregar los resultados en una sola salida consolidada. Las funciones de alto rendimiento están
diseñadas para la escala y la utilidad: ofrecen un análisis predictivo, modelos estadísticos, visualizaciones de
datos y algoritmos de aprendizaje automático de vanguardia en un producto de servidor comercial con
ingeniería y soporte técnico de Microsoft.
Como servidor independiente desacoplado de SQL Server, la configuración, la protección y el acceso del
entorno de R y Python se realizan mediante el sistema operativo subyacente y las herramientas estándar
proporcionadas en el servidor independiente, y no mediante SQL Server. No hay compatibilidad integrada para
los datos relacionales de SQL Server. Si quiere utilizar datos de SQL Server, puede crear objetos y conexiones de
origen de datos como lo haría con cualquier cliente.
Como complemento a SQL Server, un servidor independiente también es útil como un entorno de desarrollo
eficaz si necesita equipos locales y remotos. Los paquetes de R y Python en un servidor independiente son los
mismos que los que se proporcionan con una instalación del motor de base de datos, lo que permite la
portabilidad del código y el cambio de contexto de cálculo.

Introducción
Comience con el programa de instalación, adjunte los binarios a su herramienta de desarrollo favorita y escriba
el primer script.
Paso 1: Instalar el software
Instale una de estas versiones:
SQL Server 2017 Machine Learning Server (independiente)
SQL Server 2016 R Server (independiente) - solo R
Paso 2: Configurar una herramienta de desarrollo
En un servidor independiente, es habitual trabajar localmente con un desarrollo instalado en el mismo equipo.
Configuración de las herramientas de R
Configuración de las herramientas de Python
Paso 3: escritura del primer script
Escriba el script de R o Python con las funciones de RevoScaleR, revoscalepy y los algoritmos de aprendizaje
automático.
Exploración de R y ScaleR en 25 funciones: Comience con comandos de R básicos y, a continuación,
avance hasta las funciones analíticas de RevoScaleR distribuibles que proporcionan alto rendimiento y
escalabilidad para soluciones de R. Incluye versiones que se pueden usar en parelelo de muchos de los
paquetes de R más conocidos, como agrupación en clústeres k-means, árboles y bosques de decisión, y
herramientas para la manipulación de datos.
Inicio rápido: Un ejemplo de clasificación binaria con el paquete de Python de microsoftml: Cree un
modelo de clasificación binaria con las funciones de microsoftml y el conocido conjunto de datos de
cáncer de mama.
Elija el mejor lenguaje para la tarea. R es la mejor opción para los cálculos estadísticos que son difíciles de
implementar mediante SQL. En el caso de las operaciones basadas en conjuntos sobre datos, aproveche la
potencia de SQL Server para obtener el máximo rendimiento. Use el motor de base de datos en memoria para
cálculos muy rápidos en columnas.
Paso 4: puesta en funcionamiento de la solución
Los servidores independientes pueden usar la funcionalidad de operacionalización de Microsoft Machine
Learning Server que no son de la marca SQL. Puede configurar un servidor independiente para la
operacionalización, lo que le ofrece estas ventajas: implementar y hospedar el código como servicios web,
ejecutar diagnósticos y probar la capacidad del servicio web.
Paso 5: mantenimiento del servidor
SQL Server publica actualizaciones acumulativas periódicamente. La aplicación de las actualizaciones
acumulativas agrega mejoras funcionales y de seguridad a una instalación existente.
Puede encontrar descripciones de la funcionalidad nueva o modificada en el artículo descargas de CAB y en las
páginas web de las actualizaciones acumulativas de SQL Server 2016 y las actualizaciones acumulativas de SQL
Server 2017.
Para obtener más información sobre cómo aplicar las actualizaciones a una instancia existente, vea Aplicación de
actualizaciones en las instrucciones de instalación.

Consulte también
Instalación de R Server (independiente) o Machine Learning Server (independiente)
Novedades de SQL Server Machine Learning
Services
14/07/2021 • 7 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En este artículo se describen las nuevas funcionalidades y características que se incluyen en cada versión de
Machine Learning Services de SQL Server. Se han agregado funciones de aprendizaje automático a SQL Server
en cada versión a medida que se continúa la expansión, ampliación y profundización de la integración entre la
plataforma de datos, el análisis avanzado y la ciencia de datos.

Novedades de SQL Server 2019


En esta versión se agregan las características principales solicitadas para las operaciones de aprendizaje
automático de Python y R en SQL Server. Para obtener más información sobre todas las características de esta
versión, consulte Novedades de SQL Server 2019 y Notas de la versión de SQL Server 2019.

NOTE
Para obtener la documentación sobre las novedades de Java en SQL Server 2019, vea las Novedades de Extensiones de
lenguaje de SQL Server.

A continuación, se muestran las características nuevas para SQL Server Machine Learning Services, disponibles
en Windows y en Linux :
Se ha agregado compatibilidad con la plataforma Linux en Machine Learning Services para Python y R.
Comience con la Instalación de SQL Server Machine Learning Services en Linux.
Conexión de bucle invertido con SQL Server desde un script de Python o R.
CREATE EXTERNAL LIBRARY (Transact-SQL) para Python y R.
sp_execute_external_script introduce dos parámetros nuevos que le permiten generar fácilmente varios
modelos a partir de datos con particiones. Obtenga más información en este tutorial, Creación de modelos
basados en particiones en R.
La compatibilidad con el clúster de conmutación por error está disponible para el servicio Launchpad,
siempre que el servicio SQL Server Launchpad se haya iniciado en todos los nodos. Para obtener más
información, vea Instalación de clúster de conmutación por error de SQL Server.
Cambios en los mecanismos de aislamiento para Machine Learning Services. Para obtener más información,
vea SQL Server 2019 en Windows: Cambios de aislamiento para Machine Learning Services.

Novedades de SQL Server 2017


En esta versión se agregan compatibilidad con Python y algoritmos de aprendizaje automático líderes del sector.
Después de cambiar el nombre para reflejar el nuevo ámbito, SQL Server 2017 marca la introducción de SQL
Server Machine Learning Services (en base de datos), con compatibilidad de lenguaje para Python y R.
Para obtener todos los anuncios de características, vea Novedades de SQL Server 2017.
Mejoras de R
El componente R de SQL Server Machine Learning Services es la próxima generación de SQL Server 2016 R
Services, con versiones actualizadas de R, RevoScaler y otros paquetes.
Las nuevas funcionalidades de R incluyen la administración de paquetes , con los siguientes aspectos
destacados:
Los roles de base de datos ayudan a los DBA a administrar paquetes y asignar permisos para la instalación
de paquetes.
CREATE EXTERNAL LIBRARY ayuda a los DBA a administrar paquetes en el conocido lenguaje T-SQL.
Las funciones de RevoScaleR ayudan a instalar, quitar o enumerar los paquetes que pertenecen a los
usuarios. Para obtener más información, vea Uso de las funciones de RevoScaleR para buscar o instalar
paquetes de R en SQL Server.
Bibliotecas de R
PA Q UET E DESC RIP C IÓ N

MicrosoftML En esta versión, MicrosoftML se incluye en una instalación


predeterminada de R, lo que elimina el paso de actualización
necesario en los servicios de SQL Server 2016 R anteriores.
MicrosoftML proporciona algoritmos de aprendizaje
automático de última generación y transformaciones de
datos que se pueden escalar o ejecutar en contextos de
cálculo remotos. Los algoritmos incluyen redes neuronal
profundas personalizables, árboles de decisión y bosques de
decisión rápidos, regresión lineal y regresión logística.

Integración de Python para el análisis en base de datos


Python es un lenguaje que ofrece una gran flexibilidad y capacidad para distintas tareas de aprendizaje
automático. Las bibliotecas de código abierto para Python incluyen varias plataformas para redes neuronales
personalizables, así como bibliotecas conocidas para el procesamiento de lenguaje natural.
Como Python se integra con el motor de base de datos, puede mantener el análisis cerca de los datos y eliminar
los costos y riesgos de seguridad asociados con el movimiento de datos. Puede implementar soluciones de
aprendizaje automático basadas en Python mediante herramientas como Visual Studio. Las aplicaciones de
producción pueden obtener predicciones, modelos u objetos visuales del tiempo de ejecución de Python 3.5
mediante métodos de acceso a datos de SQL Server.
La integración de T-SQL y Python se admite a través del procedimiento almacenado del sistema
sp_execute_external_script. Puede llamar a cualquier código de Python mediante este procedimiento
almacenado. El código se ejecuta en una arquitectura segura y dual que permite la implementación de nivel
empresarial de modelos y scripts de Python, a los que se puede llamar desde una aplicación mediante un
procedimiento almacenado simple. Se consiguen mejoras de rendimiento adicionales mediante el streaming de
datos desde SQL a procesos de Python y la paralelización de anillos de MPI.
Puede usar la función PREDICT de T-SQL para realizar la puntuación nativa en un modelo previamente
entrenado que se haya guardado antes en el formato binario requerido.
Bibliotecas de Python
PA Q UET E DESC RIP C IÓ N

revoscalepy Equivalente de RevoScaleR en Python. Puede crear modelos


de Python para regresiones lineales y logísticas, árboles de
decisión, árboles mejorados y bosques aleatorios, que se
pueden usar en paralelo y ejecutarse en contextos de cálculo
remotos. Este paquete admite el uso de varios orígenes de
datos y contextos de cálculo remotos. El científico de datos o
el desarrollador puede ejecutar código de Python en una
instancia remota de SQL Server para explorar datos o crear
modelos sin mover datos.
PA Q UET E DESC RIP C IÓ N

microsoftml El equivalente al paquete de R MicrosoftML en Python.

Modelos entrenados previamente


Existen modelos previamente entrenados para Python y R. Use estos modelos para el reconocimiento de
imágenes y el análisis de opiniones positivas y negativas, con el fin de generar predicciones sobre datos propios.
Servidor independiente como una característica compartida en el programa de instalación de SQL Server
En esta versión también se agrega SQL Server Machine Learning Server (independiente), un servidor de ciencia
de datos totalmente independiente, que admite el análisis predictivo y estadístico en R y Python. Como sucede
con R Services, este servidor es la próxima versión de SQL Server 2016 R Server (independiente). Con el
servidor independiente, puede distribuir y escalar soluciones de R o Python sin dependencias en SQL Server.

Novedades de SQL Server 2016


En esta versión se han introducido funciones de aprendizaje automático en SQL Server a través de SQL
Ser ver 2016 R Ser vices , un motor de análisis en la base de datos para procesar scripts de R en datos
residentes dentro de una instancia del motor de base de datos.
Además, se ha publicado SQL Ser ver 2016 R Ser ver (independiente) como una manera de instalar R
Server en un servidor de Windows. Inicialmente, el programa de instalación de SQL Server proporcionaba la
única forma de instalar R Server para Windows. En versiones posteriores, los desarrolladores y científicos de
datos que querían R Server en Windows podían usar otro instalador independiente para lograr el mismo
objetivo. El servidor independiente en SQL Server es funcionalmente equivalente al producto de servidor
independiente, Microsoft R Server para Windows.
Para obtener todos los anuncios de características, vea Novedades de SQL Server 2016.

REL EA SE A C T UA L IZ A C IÓ N DE C A RA C T ERÍST IC A S

Adiciones de CU La puntuación en tiempo real se basa en bibliotecas


nativas de C++ para leer un modelo almacenado en un
formato binario optimizado y, después, generar predicciones
sin tener que llamar al tiempo de ejecución de R. Esto hace
que las operaciones de puntuación sean mucho más rápidas.
Con la puntuación en tiempo real, puede ejecutar un
procedimiento almacenado o realizar una puntuación en
tiempo real desde código de R. La puntuación en tiempo real
también está disponible para SQL Server 2016, si la instancia
se actualiza a la versión más reciente de Microsoft R Server.
REL EA SE A C T UA L IZ A C IÓ N DE C A RA C T ERÍST IC A S

Versión inicial Integración de R para el análisis en base de datos .

Paquetes de R para llamar a funciones de R en T-SQL y


viceversa. Las funciones de RevoScaleR proporcionan análisis
de R a escala mediante la fragmentación de datos en partes
de componente, la coordinación y la administración del
procesamiento distribuido, y la agregación de resultados. En
SQL Server 2016 R Services (en base de datos), el motor de
RevoScaleR se integra con una instancia del motor de base
de datos, donde se agrupan los datos y los análisis en el
mismo contexto de procesamiento.

Integración de T-SQL y R a través de


sp_execute_external_script. Puede llamar a cualquier código
de R mediante este procedimiento almacenado. Esta
infraestructura segura permite la implementación de nivel
empresarial de modelos y scripts de Rn, a los que se puede
llamar desde una aplicación mediante un procedimiento
almacenado simple. Se consiguen mejoras de rendimiento
adicionales mediante el streaming de datos desde SQL a
procesos de R y la paralelización de anillos de MPI.

Puede usar la función PREDICT de T-SQL para realizar la


puntuación nativa en un modelo previamente entrenado
que se haya guardado antes en el formato binario requerido.

Compatibilidad de Linux
SQL Server 2019 agrega compatibilidad con Linux para R y Python cuando se instalan los paquetes de
aprendizaje automático con una instancia del motor de base de datos. Para obtener más información, vea
Instalación de SQL Server Machine Learning Services en Linux.
En Linux, SQL Server 2017 no tiene integración de R o Python, pero puede usar la puntuación nativa en Linux
porque esa funcionalidad está disponible a través de PREDICT de T-SQL, que se ejecuta en Linux. La puntuación
nativa habilita la puntuación de alto rendimiento a partir de un modelo previamente entrenado, sin llamar a un
tiempo de ejecución de R ni siquiera requerirlo.

Pasos siguientes
Instalación de SQL Server Machine Learning Services (en base de datos)
Instalación de SQL Server Machine Learning
Services (Python y R) en Windows
14/07/2021 • 15 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores


Obtenga información sobre cómo instalar SQL Server Machine Learning Services en Windows. Puede usar
Machine Learning Services para ejecutar scripts de Python y R en la base de datos.

Lista de comprobación previa a la instalación


Se necesita una instancia del motor de base de datos. No se pueden instalar características solo de
Python o de R, aunque se pueden agregar incrementalmente a una instancia existente.
Para la continuidad empresarial, se admiten Grupos de disponibilidad AlwaysOn para Machine Learning
Services. Instale Machine Learning Services y configure los paquetes en cada nodo.
No se admite la instalación de Machine Learning Services en una instancia de clúster de conmutación por
error (FCI) de Always On en SQL Server 2017. Es compatible con SQL Server 2019 y versiones
posteriores.
No instale Machine Learning Services en un controlador de dominio. Se producirá un error en la parte de
la instalación de Machine Learning Services.
No instale Características compar tidas > Machine Learning Ser ver (independiente) en el mismo
equipo en el que se ejecuta una instancia de base de datos. Un servidor independiente competirá por los
mismos recursos, lo que disminuirá el rendimiento de ambas instalaciones.
Se admite la instalación en paralelo con otras versiones de Python y R, pero no se recomienda. Se admite
porque la instancia de SQL Server usa sus propias copias de las distribuciones de R y Anaconda de
código abierto. Sin embargo, no se recomienda porque la ejecución de código que usa Python y R en el
equipo con SQL Server fuera de SQL°Server puede provocar varios problemas:
El uso de una biblioteca y archivos ejecutables distintos creará resultados incoherentes que los que se
ejecutan en SQL Server.
SQL Server no puede administrar los scripts de R y Python que se ejecutan en bibliotecas externas, lo
que produce la contención de recursos.

NOTE
Machine Learning Services se instala de forma predeterminada en clústeres de macrodatos de SQL Ser ver . Si usa un
clúster de macrodatos , no es necesario que siga los pasos de este artículo. Para más información, vea Uso de Machine
Learning Services (Python y R) en Clústeres de macrodatos.

IMPORTANT
Una vez finalizada la instalación, asegúrese de completar los pasos posteriores a la configuración que se describen en este
artículo. En estos pasos se incluye la habilitación de SQL Server para usar scripts externos y la adición de cuentas
necesarias para que SQL Server ejecute trabajos de R y Python en su nombre. Habitualmente, si se realizan cambios en la
configuración, es necesario reiniciar la instancia o el servicio Launchpad.
Obtener los medios de instalación
La ubicación de descarga de SQL Server depende de la edición:
Las ediciones Enterprise, Standard y Express de SQL Ser ver tienen licencia para su uso en
producción. En el caso de las ediciones Enterprise y Standard, póngase en contacto con su proveedor de
software para obtener los soportes de instalación. Encontrará información sobre la adquisición y un
directorio de asociados de Microsoft en el sitio web de adquisición de Microsoft.
Edición gratuita más reciente.
Para más información sobre qué ediciones de SQL Server admiten la integración de Python y R con Machine
Learning Services, consulte Ediciones y características admitidas de SQL Server 2017.
Para más información sobre qué ediciones de SQL Server admiten la integración de Python y R con Machine
Learning Services, consulte Ediciones y características admitidas de SQL Server 2019 (15.x).

Ejecución de la configuración
En las instalaciones locales debe ejecutar el programa de instalación como administrador. Si instala SQL Server
desde un recurso compartido remoto, deberá usar una cuenta de dominio que tenga permisos de lectura y
ejecución para dicho recurso.
1. Inicie el asistente para la instalación de SQL Server.
2. En la pestaña Instalación , seleccione Nueva instalación independiente de SQL Ser ver o agregar
características a una instalación existente .
3. En la página Selección de características , seleccione estas opciones:
Ser vicios de Motor de base de datos
Para usar R y Python con SQL Server, debe instalar una instancia del motor de base de datos.
Puede usar una instancia predeterminada o una con nombre.
Machine Learning Ser vices (en base de datos)
Esta opción instala los servicios de base de datos que admiten la ejecución de scripts de R y
Python.
Ser vicios de Motor de base de datos
Para usar R o Python con SQL Server, debe instalar una instancia del motor de base de datos.
Puede usar una instancia predeterminada o una con nombre.
Machine Learning Ser vices (en base de datos)
Esta opción instala los servicios de base de datos que admiten la ejecución de scripts de R y
Python.
R
Active esta opción para agregar los paquetes de Microsoft R, el intérprete y R de código abierto.
Python
Active esta opción para agregar los paquetes de Microsoft Python, el archivo ejecutable de
Python 3.5 y bibliotecas seleccionadas de la distribución de Anaconda.
Para información sobre la instalación y el uso de Java, consulte Instalación de extensiones de lenguaje de
SQL Server en Windows.
NOTE
No seleccione la opción para Machine Learning Ser ver (independiente) . La opción de instalar Machine
Learning Server incluida en Características compar tidas está pensada para su uso en un equipo
independiente.

4. En la página Consentimiento para instalar Microsoft R Open , seleccione Aceptar y Siguiente .


El contrato de licencia abarca:
Microsoft R Open
Herramientas y paquetes base de R de código abierto
Paquetes de R y proveedores de conectividad mejorados del equipo de desarrollo de Microsoft.
1. En la página Consentimiento de instalación de Python , seleccione Aceptar y Siguiente . El contrato
de licencia de código abierto de Python también cubre Anaconda y herramientas relacionadas, además
de algunas bibliotecas nuevas de Python del equipo de desarrollo de Microsoft.

NOTE
Si el equipo que está usando no tiene acceso a Internet, puede pausar la instalación en este punto y descargar los
instaladores por separado. Para obtener más información, consulte Instalación de componentes de aprendizaje
automático sin acceso a Internet.

2. En la página Listo para instalar , confirme que estas selecciones se han realizado y haga clic en
Instalar .
Servicios de Motor de base de datos
Machine Learning Services (en base de datos)
R o Python, o ambos
Tome nota de la ubicación de la carpeta en la ruta de acceso ..\Setup Bootstrap\Log donde se almacenan
los archivos de configuración. Una vez que se haya completado la instalación, podrá revisar los
componentes instalados en el archivo de resumen.
3. Cuando finalice la instalación, si el programa indica que se reinicie el equipo, hágalo. Es importante leer el
mensaje del Asistente para la instalación tras finalizar el programa de instalación. Para obtener más
información, vea View and Read SQL Server Setup Log Files.
1. En la página Consentimiento para instalar Microsoft R Open , seleccione Aceptar y Siguiente . Este
contrato de licencia cubre Microsoft R Open, que incluye una distribución de las herramientas y paquetes
base de R de código abierto, junto con proveedores de conectividad y paquetes de R mejorados del
equipo de desarrollo de Microsoft.
2. En la página Consentimiento de instalación de Python , seleccione Aceptar y Siguiente . El contrato
de licencia de código abierto de Python también cubre Anaconda y herramientas relacionadas, además
de algunas bibliotecas nuevas de Python del equipo de desarrollo de Microsoft.
3. En la página Listo para instalar , confirme que estas selecciones se han realizado y haga clic en
Instalar .
Servicios de Motor de base de datos
Machine Learning Services (en base de datos)
R o Python
Tome nota de la ubicación de la carpeta en la ruta de acceso ..\Setup Bootstrap\Log donde se almacenan
los archivos de configuración. Una vez que se haya completado la instalación, podrá revisar los
componentes instalados en el archivo de resumen.
4. Cuando finalice la instalación, si el programa indica que se reinicie el equipo, hágalo. Es importante leer el
mensaje del Asistente para la instalación tras finalizar el programa de instalación. Para obtener más
información, vea View and Read SQL Server Setup Log Files.

Establecimiento de variables de entorno


Solo de cara a la integración de características de R, conviene establecer la variable de entorno MKL_CBWR
para garantizar una salida coherente de los cálculos de la biblioteca Math Kernel Library (MKL) de Intel.
1. En el panel de control, haga clic en Sistema y seguridad > Sistema > Configuración avanzada del
sistema > Variables de entorno .
2. Cree un usuario o una variable del sistema.
Establezca el nombre de la variable en MKL_CBWR .
Establezca el valor de la variable en AUTO .

Este paso requiere el reinicio del servidor. Si va a habilitar la ejecución de scripts, puede posponer el reinicio
hasta que se realice todo el trabajo de configuración.

Habilitación de la ejecución de scripts


1. Abra SQL Server Management Studio.
TIP
Puede descargar e instalar la versión adecuada desde esta página: Descargue SQL Server Management Studio
(SSMS).
También puede usar Azure Data Studio, que admite tareas administrativas y consultas en SQL Server.

2. Conéctese a la instancia en la que instaló Machine Learning Services, haga clic en Nueva consulta para
abrir una ventana de consulta y ejecute el comando siguiente:

sp_configure

El valor de la propiedad, external scripts enabled , debería ser 0 en este momento. La característica está
desactivada de forma predeterminada. Un administrador debe habilitar explícitamente la característica
para poder ejecutar scripts de R o Python.
3. Para habilitar la característica de scripting externo, ejecute la siguiente instrucción:

EXEC sp_configure 'external scripts enabled', 1


RECONFIGURE WITH OVERRIDE

Si ya ha habilitado la característica para el lenguaje R, no ejecute RECONFIGURE una segunda vez para
Python. La plataforma de extensibilidad subyacente admite ambos lenguajes.

Reinicie el servicio.
Después de que la instalación se haya completado, reinicie el motor de base de datos.
Al reiniciar el servicio, también se reiniciará automáticamente el servicio SQL Server Launchpad relacionado.
Para reiniciar el servicio, puede hacer clic con el botón derecho en el comando Reiniciar de la instancia
en SSMS, usar el panel Ser vicios del panel de control o emplear el Administrador de configuración de
SQL Server.

Comprobar la instalación
Haga lo siguiente para comprobar que se están ejecutando todos los componentes que se usan para iniciar el
script externo.
1. En SQL Server Management Studio, abra una nueva ventana de consulta y ejecute el siguiente comando:

EXECUTE sp_configure 'external scripts enabled'

El valor run_value está establecido en 1.


2. Abra el panel de Ser vicios o el Administrador de configuración de SQL Server y compruebe que el
ser vicio SQL Ser ver Launchpad se está ejecutando. Debe tener un servicio para cada instancia del
motor de base de datos que tenga instalado R o Python. Para más información sobre el servicio, vea
Marco de extensibilidad.
3. Si Launchpad se está ejecutando, puede ejecutar scripts sencillos de R y Python para comprobar que los
tiempos de ejecución de scripting externo pueden comunicarse con SQL Server.
Abra una ventana nueva de consulta en SQL Server Management Studio y, luego, ejecute un script como
el siguiente:
Para R

EXEC sp_execute_external_script @language =N'R',


@script=N'
OutputDataSet <- InputDataSet;
',
@input_data_1 =N'SELECT 1 AS hello'
WITH RESULT SETS (([hello] int not null));
GO

Para Python

EXEC sp_execute_external_script @language =N'Python',


@script=N'
OutputDataSet = InputDataSet;
',
@input_data_1 =N'SELECT 1 AS hello'
WITH RESULT SETS (([hello] int not null));
GO

Resultados
El script puede tardar un poco en ejecutarse la primera vez que se carga el tiempo de ejecución del script
externo. Los resultados deben tener un aspecto similar al siguiente:

H EL LO

NOTE
Las columnas o los encabezados usados en el script de Python no se devuelven de manera automática. Para agregar
nombres de columna para la salida, debe especificar el esquema para el conjunto de datos devuelto. Para ello, use el
parámetro WITH RESULTS del procedimiento almacenado, asigne un nombre a las columnas y especifique el tipo de datos
SQL.
Por ejemplo, puede agregar la línea siguiente para generar un nombre de columna arbitrario:
WITH RESULT SETS ((Col1 AS int)) .

Aplicación de actualizaciones
Instalación existente
Si ha agregado Machine Learning Services a una instancia de SQL Server existente y ha aplicado previamente
una actualización acumulativa (CU), las versiones del motor de base de datos y la característica Machine
Learning Services podrían ser diferentes. Esto puede producir un comportamiento o errores inesperados.
Siga estos pasos para llevar Machine Learning Services a la misma versión que el motor de base de datos.
1. Determine la actualización acumulativa (CU) que tiene para el motor de base de datos. Ejecute esta
instrucción T-SQL:

SELECT @@VERSION
A continuación se muestra un resultado de ejemplo de la actualización acumulativa (CU) 8 de SQL Server
2019:
Microsoft SQL Server 2019 (RTM-CU8-GDR) (KB4583459): 15.0.4083.2 (X64) 2 de noviembre de 2020
18:35:09 Copyright (C) 2019 Microsoft Corporation Developer Edition (64 bits) en Windows 10
Enterprise 10.0 (Compilación 19042: ) (Hipervisor)
Para obtener más información, consulte Determinar la versión, la edición y el nivel de actualización de
SQL Server y sus componentes.
2. Descargue la actualización acumulativa (CU) que ha instalado para el motor de base de datos.
3. Ejecute la instalación de la actualización acumulativa (CU) y siga las instrucciones para instalar la CU para
Machine Learning Services.
Nueva instalación
Si instala Machine Learning Services con una nueva instalación del motor de base de datos de SQL Server, se
recomienda aplicar la última actualización acumulativa tanto a los componentes de aprendizaje automático
como a los de motor de base de datos.
En los dispositivos conectados a Internet, las actualizaciones acumulativas suelen aplicarse a través de Windows
Update, pero también puede usar los pasos siguientes para las actualizaciones controladas. Al aplicar la
actualización para el motor de base de datos, el programa de instalación extrae las actualizaciones acumulativas
de las características de Python o R instaladas en la misma instancia.
Los servidores desconectados requieren pasos adicionales. Para obtener más información, consulte Instalación
en equipos sin acceso a Internet > Aplicación de actualizaciones acumulativas.
1. Comience con una instancia de línea de base ya instalada: versión inicial de SQL Server.
2. Vaya a la lista de actualizaciones acumulativas: Actualizaciones más recientes de Microsoft SQL Server.
3. Seleccione la actualización acumulativa más reciente. Se descarga un ejecutable que se extrae
automáticamente.
4. Ejecute el programa de instalación. Acepte los términos de licencia y, en la página de selección de
características, revise las características para las que se aplican las actualizaciones acumulativas. Debería
ver todas las características instaladas para la instancia actual, incluidas las características de aprendizaje
automático. El programa de instalación descarga los archivos CAB necesarios para actualizar todas las
características.

5. Continúe con los pasos del asistente y acepte los términos de licencia para las distribuciones de R y
Python.
Configuración adicional
Si el paso de comprobación de scripts externos se ejecuta correctamente, puede ejecutar comandos de R o
Python de SQL Server Management Studio, Visual Studio Code o cualquier otro cliente que pueda enviar
instrucciones T-SQL al servidor.
Si se produjo un error al ejecutar el comando, revise los pasos de configuración adicional de esta sección. Es
posible que tenga que crear otras configuraciones adicionales adecuadas para el servicio o la base de datos.
En el nivel de instancia, la configuración adicional podría incluir:
Configuración de firewall para SQL Server Machine Learning Services
Habilitación de protocolos de red adicionales
Habilitación de conexiones remotas
Creación de un inicio de sesión para SQLRUserGroup
Administración de cuotas de disco para evitar que los scripts externos ejecuten tareas que agoten el espacio
en disco
En SQL Server 2019 en Windows, el mecanismo de aislamiento ha cambiado. Este mecanismo afecta a
SQLRUserGroup , las reglas de firewall, los permisos de archivo y la autenticación implícita. Para obtener más
información, consulte Cambios de aislamiento para Machine Learning Services.

En la base de datos, puede que necesite las siguientes actualizaciones de configuración:


Concesión de permiso a los usuarios para SQL Server Machine Learning Services

NOTE
El hecho de que se requiera una configuración adicional depende del esquema de seguridad, del lugar en el que se haya
instalado SQL Server y de cómo se espera que los usuarios se conecten a la base de datos y ejecuten scripts externos.

Optimizaciones sugeridas
Ahora que todo funciona, puede que también le interese optimizar el servidor para admitir el aprendizaje
automático o instalar modelos de aprendizaje automático previamente entrenados.
Adición de más cuentas profesionales
Si prevé que muchos usuarios van a ejecutar scripts al mismo tiempo, puede aumentar el número de cuentas
profesionales que están asignadas al servicio Launchpad. Para obtener más información, vea Escalar la ejecución
simultánea de scripts externos en SQL Server Machine Learning Services.
Optimización del servidor para la ejecución de scripts
La configuración predeterminada del programa de instalación de SQL Server está diseñada para optimizar el
equilibrio del servidor para diversos servicios que el motor de base de datos admite, entre otros, procesos de
extracción, transformación y carga de datos (ETL), creación de informes, auditoría y aplicaciones que usan datos
de SQL Server. En la configuración predeterminada, los recursos para el aprendizaje automático están
restringidos a veces, especialmente en operaciones que usan mucha memoria.
Para asegurarse de que se asignen a los trabajos de aprendizaje automático la prioridad y los recursos correctos,
se recomienda usar Resource Governor de SQL Server para configurar un grupo de recursos externos. Puede
que también le interese cambiar la cantidad de memoria asignada al motor de base de datos de SQL Server o
aumentar el número de cuentas que se ejecutan en el servicio SQL Server Launchpad.
Para configurar un grupo de recursos para la administración de recursos externos, vea Creación de un
grupo de recursos externos.
Para cambiar la cantidad de memoria reservada para la base de datos, vea Opciones de configuración de
memoria del servidor.
Para cambiar el número de cuentas de R que se pueden iniciar mediante SQL Server Launchpad, consulte
Escalar la ejecución simultánea de scripts externos en SQL Server Machine Learning Services.
Si usa la edición Standard Edition y no dispone de Resource Governor, puede usar vistas de administración
dinámica (DMV) y eventos extendidos, así como la supervisión de eventos de Windows, como ayuda para
administrar los recursos de servidor.
Instalación de paquetes adicionales de Python y R
Las soluciones de Python y R que cree para SQL Server pueden llamar a funciones básicas, funciones de los
paquetes de su propiedad instalados con SQL Server y paquetes de terceros compatibles con la versión de
Python y R de código abierto instalada por SQL Server.
Los paquetes que quiera usar de SQL Server deben estar instalados en la biblioteca predeterminada que la
instancia usa. Si tiene una instalación independiente de Python o R en el equipo o si ha instalado paquetes en las
bibliotecas de usuario, no puede usar esos paquetes desde T-SQL.
Para instalar y administrar paquetes adicionales, puede configurar grupos de usuarios para compartir paquetes
en cada nivel de base de datos, o bien configurar roles de base de datos para permitir que los usuarios instalen
sus propios paquetes. Para obtener más información, consulte Instalación de paquetes de Python e Instalación
de nuevos paquetes de R.

Pasos siguientes
Los desarrolladores de Python pueden aprender a usar Python con SQL Server con estos tutoriales:
Tutorial de Python: Predicción de alquileres de esquíes con regresión lineal en
SQL Server Machine Learning Services
Tutorial de Python: Clasificación de clientes por categorías mediante la agrupación en clústeres k-means con
SQL Server Machine Learning Services
Los desarrolladores de R pueden empezar con algunos ejemplos sencillos y conocer los aspectos básicos del
funcionamiento de R con SQL Server. Para conocer el siguiente paso, vea los vínculos siguientes:
Inicio rápido: Ejecutar R en T-SQL
Tutorial: Análisis en base de datos para desarrolladores de R
Instalación de SQL Server Machine Learning
Services (Python y R) en Linux
14/07/2021 • 11 minutes to read

Se aplica a: SQL Server 2019 (15.x): Linux


En este artículo se le guiará por la instalación de SQL Server Machine Learning Services en Linux. Se pueden
ejecutar scripts de Python y R en la base de datos mediante Machine Learning Services.
Puede instalar Machine Learning Services en Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server
(SLES) y Ubuntu. Para obtener más información, vea la sección Plataformas admitidas de las instrucciones de
instalación de SQL Server en Linux.

NOTE
Machine Learning Services se instala de forma predeterminada en los clústeres de macrodatos de SQL Server. Para más
información, vea Uso de Machine Learning Services (Python y R) en Clústeres de macrodatos

Lista de comprobación previa a la instalación


Instale SQL Server en Linux y compruebe la instalación.
Compruebe en los repositorios de SQL Server para Linux si están las extensiones de Python y R. Si ya ha
configurado repositorios de origen para la instalación del motor de base de datos, puede ejecutar los
comandos de instalación de paquetes mssql-mlser vices usando el mismo registro de repositorio.
(Solo R) Microsoft R Open (MRO) proporciona la distribución de R base para la característica R de
SQL Server y es un requisito previo para usar RevoScaleR, MicrosoftML y otros paquetes de R instalados
con Machine Learning Services.
La versión necesaria es MRO 3.5.2.
Elija entre los dos métodos siguientes para instalar MRO:
Descargue el tarball de MRO desde MRAN, desempaquételo y ejecute el script install.sh. Si
quiere usar este método, puede seguir las instrucciones de instalación en MRAN.
Registre el repositorio packages.microsoft.com como se describe a continuación para
instalar la distribución de MRO: microsoft-r-open-mro y microsoft-r-open-mkl.
Vea las secciones de instalación siguientes para saber cómo instalar MRO.
Debe tener una herramienta para ejecutar comandos de T-SQL.
Puede usar Azure Data Studio, una herramienta de base de datos gratuita que se ejecuta en Linux,
Windows y macOS.

Lista de paquetes
En un dispositivo conectado a Internet, los paquetes se descargan e instalan de forma independiente del motor
de base de datos mediante el instalador de paquetes de cada sistema operativo. En la siguiente tabla se
describen todos los paquetes disponibles, pero para R y Python hay que especificar paquetes que proporcionen
la instalación completa de características o la instalación mínima de características.
Paquetes de instalación disponibles:

N O M B RE DEL PA Q UET E VÁ L IDO PA RA DESC RIP C IÓ N

mssql-server-extensibility All Marco de extensibilidad que se usa


para ejecutar Python y R.

microsoft-openmpi Python, R Interfaz de paso de mensajes usada


por las bibliotecas Rev* para la
paralelización en Linux.

mssql-mlservices-python Python Distribución de código abierto de


Anaconda y Python.

mssql-mlservices-mlm-py Python Instalación completa. Proporciona


revoscalepy, microsoftml, modelos
entrenados previamente para las
características de imágenes y análisis
de opiniones de texto.

mssql-mlservices-packages-py Python Instalación mínima. Proporciona


revoscalepy y microsoftml.
Excluye los modelos previamente
entrenados.

microsoft-r-open* R Distribución de código abierto de R,


formada por tres paquetes.

mssql-mlservices-mlm-r R Instalación completa. Proporciona:


RevoScaleR, MicrosoftML, sqlRUtils,
olapR, modelos entrenados
previamente para las características de
imágenes y análisis de opiniones de
texto.

mssql-mlservices-packages-r R Instalación mínima. Proporciona


RevoScaleR, sqlRUtils, MicrosoftML,
olapr.
Excluye los modelos previamente
entrenados.

Instalación en RHEL
Siga los pasos siguientes para instalar SQL Server Machine Learning Services en Red Hat Enterprise Linux
(RHEL).
Instalación de MRO en RHEL
Los siguientes comandos registran el repositorio que proporciona MRO. Tras el registro, los comandos para
instalar otros paquetes de R (como mssql-mlservices-mml-r) incluirán automáticamente MRO como una
dependencia de paquete.
# Import the Microsoft repository key

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

# Set the location of the package repo at the "prod" directory


# The following command is for version 8.x
# To get the version for 6.x or 7.x, replace 8 with 6 or 7, respectively.
rpm -Uvh https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm

# Update packages on your system (optional)


yum update

Opciones de instalación para Python y R:


Instale la compatibilidad de lenguaje según los requisitos (uno o varios lenguajes).
En la instalación completa se proporcionan todas las características disponibles, incluidos modelos de
Machine Learning entrenados previamente.
La instalación mínima excluye los modelos pero todavía mantiene toda la funcionalidad.

TIP
Si es posible, ejecute yum clean all para actualizar los paquetes en el sistema antes de la instalación.

Instalación completa
Incluye:
Python de código abierto
R de código abierto
Marco de extensibilidad
Microsoft-openmpi
Extensiones (Python, R)
Bibliotecas de aprendizaje automático
Modelos entrenados previamente para Python y R

# Install as root or sudo


# Add everything (all R, Python)
# Be sure to include -9.4.7* in mlsservices package names
sudo yum install mssql-mlservices-mlm-py-9.4.7*
sudo yum install mssql-mlservices-mlm-r-9.4.7*

Instalación mínima
Incluye:
Python de código abierto
R de código abierto
Marco de extensibilidad
Microsoft-openmpi
Bibliotecas Revo* básicas
Bibliotecas de aprendizaje automático
# Install as root or sudo
# Minimum install of R, Python extensions
# Be sure to include -9.4.6* in mlsservices package names
sudo yum install mssql-mlservices-packages-py-9.4.7*
sudo yum install mssql-mlservices-packages-r-9.4.7*

Instalación en Ubuntu
Siga los pasos siguientes para instalar SQL Server Machine Learning Services en Ubuntu.
Instalación de MRO en Ubuntu
Los siguientes comandos registran el repositorio que proporciona MRO. Tras el registro, los comandos para
instalar otros paquetes de R (como mssql-mlservices-mml-r) incluirán automáticamente MRO como una
dependencia de paquete.

# Install as root
sudo su

# Optionally, if your system does not have the https apt transport option
apt-get install apt-transport-https

# Set the location of the package repo the "prod" directory containing the distribution.
# This example specifies 20.04. Replace with 16.04 or 14.04 if you want those versions.
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb

# Register the repo


dpkg -i packages-microsoft-prod.deb

# Update packages on your system (required), including MRO installation


sudo apt-get update

Opciones de instalación para Python y R:


Instale la compatibilidad de lenguaje según los requisitos (uno o varios lenguajes).
En la instalación completa se proporcionan todas las características disponibles, incluidos los modelos de
aprendizaje automático entrenados previamente.
La instalación mínima excluye los modelos pero todavía mantiene toda la funcionalidad.

TIP
Si es posible, ejecute apt-get update para actualizar los paquetes en el sistema antes de la instalación.

Instalación completa
Incluye:
Python de código abierto
R de código abierto
Marco de extensibilidad
Microsoft-openmpi
Extensiones de Python
Extensiones de R
Bibliotecas de aprendizaje automático
Modelos entrenados previamente para Python y R
# Install as root or sudo
# Add everything (all R, Python)
# There is no asterisk in this full install
sudo apt-get install mssql-mlservices-mlm-py
sudo apt-get install mssql-mlservices-mlm-r

Instalación mínima
Incluye:
Python de código abierto
R de código abierto
Marco de extensibilidad
Microsoft-openmpi
Bibliotecas Revo* básicas
Bibliotecas de aprendizaje automático

# Install as root or sudo


# Minimum install of R, Python
# No asterisk
sudo apt-get install mssql-mlservices-packages-py
sudo apt-get install mssql-mlservices-packages-r

Instalación en SLES
Siga los pasos siguientes para instalar SQL Server Machine Learning Services en SUSE Linux Enterprise Server
(SLES).
Instalación de MRO en SLES
Los siguientes comandos registran el repositorio que proporciona MRO. Tras el registro, los comandos para
instalar otros paquetes de R (como mssql-mlservices-mml-r) incluirán automáticamente MRO como una
dependencia de paquete.

# Install as root
sudo su

# Set the location of the package repo at the "prod" directory containing the distribution
# This example is for SLES12
zypper ar -f https://packages.microsoft.com/sles/12/prod packages-microsoft-com

# Update packages on your system (optional)


zypper update

Opciones de instalación para Python y R:


Instale la compatibilidad de lenguaje según los requisitos (uno o varios lenguajes).
En la instalación completa se proporcionan todas las características disponibles, incluidos los modelos de
aprendizaje automático entrenados previamente.
La instalación mínima excluye los modelos pero todavía mantiene toda la funcionalidad.
Instalación completa
Incluye:
Python de código abierto
R de código abierto
Marco de extensibilidad
Microsoft-openmpi
Extensiones para Python y R
Bibliotecas de aprendizaje automático
Modelos entrenados previamente para Python y R

# Install as root or sudo


# Add everything (all R, Python)
sudo zypper install mssql-mlservices-mlm-py
sudo zypper install mssql-mlservices-mlm-r

Instalación mínima
Incluye:
Python de código abierto
R de código abierto
Marco de extensibilidad
Microsoft-openmpi
Bibliotecas Revo* básicas
Bibliotecas de aprendizaje automático

# Install as root or sudo


# Minimum install of R, Python extensions
sudo zypper install mssql-mlservices-packages-py
sudo zypper install mssql-mlservices-packages-r

Configuración posterior a la instalación (obligatoria)


La configuración adicional se realiza principalmente a través de la herramienta mssql-conf.
1. Cuando finalice la instalación del paquete, ejecute mssql-conf setup y siga las indicaciones para
establecer la contraseña de administrador del sistema y elegir la edición. Realice este paso solo si aún no
ha configurado SQL Server en Linux.

sudo /opt/mssql/bin/mssql-conf setup

2. Acepte los contratos de licencia de las extensiones de R y Python de código abierto. Use el comando
siguiente:

# Run as SUDO or root


# Use set + EULA
sudo /opt/mssql/bin/mssql-conf set EULA accepteulaml Y

El programa de instalación detecta los paquetes mssql-mlservices y solicita la aceptación del CLUF (si no
se ha aceptado antes) cuando se ejecuta mssql-conf setup . Para más información sobre los parámetros
EULA, vea Configuración de SQL Server con la herramienta mssql-conf.
3. Habilite el acceso de red saliente. El acceso de red saliente está deshabilitado de forma predeterminada.
Para habilitar las solicitudes salientes, establezca la propiedad booleana "outboundnetworkaccess" con la
herramienta mssql-conf. Para más información, vea Configuración de SQL Server en Linux con mssql-
conf.
# Run as SUDO or root
# Enable outbound requests over the network
sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1

4. Solo de cara a la integración de características de R, establezca la variable de entorno MKL_CBWR para


garantizar una salida coherente de los cálculos de la biblioteca Math Kernel Library (MKL) de Intel.
Edite o cree un archivo llamado .bash_profile en el directorio principal de usuario, mediante la
adición de la línea export MKL_CBWR="AUTO" al archivo.
Ejecute este archivo escribiendo source .bash_profile en un símbolo del sistema de Bash.
5. Reinicie el servicio SQL Server Launchpad y la instancia del motor de base de datos para leer los valores
actualizados del archivo INI. Cuando se modifica una configuración relacionada con la extensibilidad, se
muestra un mensaje de notificación.

systemctl restart mssql-launchpadd

systemctl restart mssql-server.service

6. Habilite la ejecución de scripts externos con Azure Data Studio u otra herramienta como SQL Server
Management Studio (solo Windows) que ejecute Transact-SQL.

EXEC sp_configure 'external scripts enabled', 1


RECONFIGURE WITH OVERRIDE

7. Vuelva a reiniciar el servicio Launchpad.

Comprobar la instalación
Las bibliotecas de R (MicrosoftML, RevoScaleR y otras) se encuentran en
/opt/mssql/mlservices/libraries/RServer .

Las bibliotecas de Python (microsoftml y revoscalepy) se encuentran en


/opt/mssql/mlservices/libraries/PythonServer .

Para validar la instalación:


Ejecute un script de T-SQL que ejecute un procedimiento almacenado del sistema que invoque Python o
R mediante una herramienta de consulta.
Ejecute el siguiente comando SQL para probar la ejecución de R en SQL Server. ¿Errores? Pruebe el
reinicio del servicio, sudo systemctl restart mssql-server.service .

EXEC sp_execute_external_script
@language =N'R',
@script=N'
OutputDataSet <- InputDataSet',
@input_data_1 =N'SELECT 1 AS hello'
WITH RESULT SETS (([hello] int not null));
GO

Ejecute el siguiente comando SQL para probar la ejecución de Python en SQL Server.
EXEC sp_execute_external_script
@language =N'Python',
@script=N'
OutputDataSet = InputDataSet;
',
@input_data_1 =N'SELECT 1 AS hello'
WITH RESULT SETS (([hello] int not null));
GO

Instalación desatendida
Mediante la instalación desatendida del motor de base de datos, agregue los paquetes de mssql-mlservices y
los contratos de licencia.
Use uno de los parámetros de CLUF específicos de mlservices para las distribuciones de R y Python de código
abierto:

sudo /opt/mssql/bin/mssql-conf setup accept-eula-ml

El CLUF completo se documenta en Configuración de SQL Server en Linux con la herramienta mssql-conf.

Instalación sin conexión


Siga las instrucciones de instalación sin conexión para ver los pasos para instalar los paquetes. Busque el sitio de
descarga y luego descargue paquetes específicos mediante la lista de paquetes siguiente.

TIP
Varias de las herramientas de administración de paquetes proporcionan comandos que pueden ayudar a determinar las
dependencias de los paquetes. En yum, use sudo yum deplist [package] . En Ubuntu, use
sudo apt-get install --reinstall --download-only [package name] seguido de dpkg -I [package name].deb .

Sitio de descarga
Descargue los paquetes desde https://packages.microsoft.com/. Todos los paquetes mlservices de Python y R se
colocan con el paquete del motor de base de datos. La versión base de los paquetes mlservices es 9.4.6.
Recuerde que los paquetes microsoft-r-open están en un repositorio diferente.
Rutas de acceso de RHEL/8
PA Q UET E UB IC A C IÓ N DE DESC A RGA

Paquetes mssql/mlservices https://packages.microsoft.com/rhel/8/mssql-server-2019/

Paquetes microsoft-r-open https://packages.microsoft.com/rhel/8/prod/

Rutas de acceso de Ubuntu/20.04


PA Q UET E UB IC A C IÓ N DE DESC A RGA

Paquetes mssql/mlservices https://packages.microsoft.com/ubuntu/20.04/mssql-server-


2019/pool/main/m/
PA Q UET E UB IC A C IÓ N DE DESC A RGA

Paquetes microsoft-r-open https://packages.microsoft.com/ubuntu/20.04/prod/pool/ma


in/m/

Rutas de acceso de SLES/12


PA Q UET E UB IC A C IÓ N DE DESC A RGA

Paquetes mssql/mlservices https://packages.microsoft.com/sles/12/mssql-server-2019/

Paquetes microsoft-r-open https://packages.microsoft.com/sles/12/prod/

Seleccione las extensiones que quiera usar y descargue los paquetes necesarios para un lenguaje específico. Los
nombres de archivo incluyen información de la plataforma en el sufijo.
Lista de paquetes
En función de las extensiones que quiera usar, descargue los paquetes necesarios relativos a un lenguaje
específico. Los nombres de archivo exactos incluyen información de la plataforma en el sufijo, pero los nombres
de archivo siguientes deben ser lo suficientemente cercanos para que pueda determinar qué archivos va a
obtener.

# Core packages
mssql-server-15.0.1000
mssql-server-extensibility-15.0.1000

# R
microsoft-openmpi-3.0.0
microsoft-r-open-mkl-3.5.2
microsoft-r-open-mro-3.5.2
mssql-mlservices-packages-r-9.4.7.64
mssql-mlservices-mlm-r-9.4.7.64

# Python
microsoft-openmpi-3.0.0
mssql-mlservices-python-9.4.7.64
mssql-mlservices-packages-py-9.4.7.64
mssql-mlservices-mlm-py-9.4.7.64

Pasos siguientes
Los desarrolladores de Python pueden aprender a usar Python con SQL Server con estos tutoriales:
Tutorial de Python: Predicción de alquileres de esquíes con regresión lineal en
SQL Server Machine Learning Services
Tutorial de Python: Clasificación de clientes por categorías mediante la agrupación en clústeres k-means con
SQL Server Machine Learning Services
Los desarrolladores de R pueden empezar con algunos ejemplos sencillos y conocer los aspectos básicos del
funcionamiento de R con SQL Server. Para conocer el siguiente paso, vea los vínculos siguientes:
Inicio rápido: Ejecutar R en T-SQL
Tutorial: Análisis en base de datos para desarrolladores de R
Instalación de SQL Server Machine Learning
Services (Python y R) en Docker
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2019 (15.x): Linux


En este artículo se explica cómo instalar SQL Server Machine Learning Services en Docker. Puede usar Machine
Learning Services para ejecutar scripts de Python y R en la base de datos. No se proporcionan contenedores
generados previamente con Machine Learning Services. Puede crear uno a partir de los contenedores de
SQL Server mediante una plantilla de ejemplo disponible en GitHub.

Requisitos previos
Interfaz de la línea de comandos de Git.
Motor de Docker 1.8 o versiones posteriores en cualquier distribución de Linux admitida o Docker para
Mac y Windows. Para más información, vea Get Docker (Obtención de Docker).
Vea también los requisitos del sistema para SQL Server en Linux.

Clonación del repositorio mssql-docker


El comando siguiente clona el repositorio git mssql-docker en un directorio local.
1. Abra un terminal de Bash en Linux o Mac.
2. Cree un directorio para almacenar una copia local del repositorio mssql-docker.
3. Ejecute el comando git clone para clonar el repositorio mssql-docker:

git clone https://github.com/microsoft/mssql-docker mssql-docker

Compilación de una imagen de contenedor de Linux de SQL Server


Complete los pasos siguientes para compilar la imagen de Docker:
1. Cambie el directorio al directorio mssql-mlservices:

/mssql-docker/linux/preview/examples/mssql-mlservices

2. En el mismo directorio, ejecute el comando siguiente:

docker build -t mssql-server-mlservices .

3. Ejecute el comando:

docker run -d -e MSSQL_PID=Developer -e ACCEPT_EULA=Y -e ACCEPT_EULA_ML=Y -e MSSQL_SA_PASSWORD=


<password> -v <directory on the host OS>:/var/opt/mssql -p 1433:1433 mssql-server-mlservices
NOTE
Para MSSQL_PID se pueden usar cualquiera de los valores siguientes: Desarrollador (gratis), Express (gratis),
Enterprise (de pago), Estándar (de pago). Si va a usar una edición de pago, asegúrese de que ha comprado una
licencia. Reemplace (contraseña) por la contraseña real. El montaje de volúmenes con -v es opcional. Reemplace
(directorio en el sistema operativo del host) por un directorio real en el que quiera montar los archivos de datos y
de registro de la base de datos.

4. Ejecute el comando siguiente para confirmarlo:

docker ps -a

NOTE
Para compilar la imagen de Docker, debe instalar paquetes de varios GB de tamaño. El script puede tardar algún
tiempo en terminar de ejecutarse, en función del ancho de banda de red.

Ejecución de la imagen de contenedor de SQL Server para Linux


1. Establezca las variables de entorno antes de ejecutar el contenedor. Establezca la variable de entorno
PATH_TO_MSSQL en un directorio host:

export MSSQL_PID='Developer'
export ACCEPT_EULA='Y'
export ACCEPT_EULA_ML='Y'
export PATH_TO_MSSQL='/home/mssql/'

NOTE
El proceso para ejecutar ediciones de producción de SQL Server en contenedores es ligeramente diferente. Para
obtener más información, consulte Configuración de imágenes de contenedor de SQL Server en Docker. Si usa los
mismos nombres y puertos de contenedor, el resto de este tutorial funciona con los contenedores de producción.

2. Para ver los contenedores de Docker, ejecute el comando docker ps :

sudo docker ps -a

3. Si en la columna ESTADO se muestra el estado Activo , SQL Server se ejecuta en el contenedor y escucha
en el puerto especificado en la columna PUERTOS . Si la columna ESTADO de su contenedor de SQL
Server muestra Cerrado , consulte la sección Solución de problemas de la guía de configuración.
Salida:

CONTAINER ID IMAGE COMMAND CREATED


STATUS PORTS NAMES
941e1bdf8e1d mcr.microsoft.com/mssql/server/mssql-server-linux "/bin/sh -c /opt/m..."
About an hour ago Up About an hour 0.0.0.0:1401->1433/tcp sql1

Habilitar Machine Learning Services


Para habilitar Machine Learning Services, conéctese a la instancia de SQL Server y ejecute la siguiente
instrucción de T-SQL:

EXEC sp_configure 'external scripts enabled', 1;


RECONFIGURE WITH OVERRIDE

Pasos siguientes
Los desarrolladores de Python pueden aprender a usar Python con SQL Server con estos tutoriales:
Tutorial de Python: Predicción de alquileres de esquíes con regresión lineal en
SQL Server Machine Learning Services
Tutorial de Python: Clasificación de clientes por categorías mediante la agrupación en clústeres k-means con
SQL Server Machine Learning Services
Los desarrolladores de R pueden empezar con algunos ejemplos sencillos y conocer los aspectos básicos del
funcionamiento de R con SQL Server. Para conocer el siguiente paso, vea los vínculos siguientes:
Inicio rápido: Ejecutar R en T-SQL
Tutorial: Análisis en base de datos para desarrolladores de R
SQL Server 2019 en Windows: Cambios de
aislamiento para Machine Learning Services
14/07/2021 • 5 minutes to read

Se aplica a: SQL Server 2019 (15.x) - Solo Windows


En este artículo se describen los cambios en el mecanismo de aislamiento de Machine Learning Services en
SQL Server 2019 en Windows. Estos cambios afectan a SQLRUserGroup , las reglas de firewall, los permisos
de archivo y la autenticación implícita.
Para obtener más información, vea cómo instalar SQL Server Machine Learning Services en Windows.

Cambios en el mecanismo de aislamiento


En Windows, el programa de instalación de SQL Server 2019 cambia el mecanismo de aislamiento para los
procesos externos. Este cambio reemplaza las cuentas de trabajo locales por contenedores AppContainer, una
tecnología de aislamiento para las aplicaciones cliente que se ejecutan en Windows.
No hay elementos de acción específicos para el administrador como resultado de la modificación. En un
servidor nuevo o actualizado, todos los scripts y código externos ejecutados desde sp_execute_external_script
siguen automáticamente el nuevo modelo de aislamiento.
En resumen, las principales diferencias en esta versión son las siguientes:
Las cuentas de usuario locales en el grupo de usuarios restringidos de SQL (SQLRUserGroup) ya no
se crean ni se usan para ejecutar procesos externos. Los contenedores AppContainer las reemplazan.
La pertenencia a SQLRUserGroup ha cambiado. En lugar de varias cuentas de usuario locales, la
pertenencia consta únicamente de la cuenta de servicio de SQL Server Launchpad. Los procesos de R y
Python ahora se ejecutan con la identidad de servicio de Launchpad, aislada a través de contenedores
AppContainer.
Aunque el modelo de aislamiento ha cambiado, en SQL Server 2019 el Asistente para la instalación y los
parámetros de la línea de comandos siguen siendo los mismos. Para obtener ayuda con la instalación, vea
Instalación de SQL Server Machine Learning Services (Python y R) en Windows.

Acerca del aislamiento de AppContainer


En las versiones anteriores, SQLRUserGroup contenía un grupo de cuentas de usuario de Windows locales
(MSSQLSERVER00-MSSQLSERVER20) que se usaban para aislar y ejecutar procesos externos. Cuando se
necesitaba un proceso externo, el servicio de SQL Server Launchpad tomaba una cuenta disponible y la usaba
para ejecutar un proceso.
En SQL Server 2019, el programa de instalación ya no crea cuentas profesionales locales. En cambio, el
aislamiento se consigue a través de contenedores AppContainer. En tiempo de ejecución, cuando se detecta un
código o script insertado en un procedimiento almacenado o una consulta, SQL Server llama a Launchpad con
una solicitud para un iniciador específico de la extensión. Launchpad invoca el entorno de runtime adecuado en
un proceso bajo su identidad y crea una instancia de AppContainer para que lo contenga. Este cambio es
beneficioso porque ya no se requiere la administración de cuentas y contraseñas locales. Además, en las
instalaciones en las que las cuentas de usuario locales están prohibidas, la eliminación de la dependencia de la
cuenta de usuario local comporta la posibilidad de usar esta característica.
Según la implementación de SQL Server, los contenedores AppContainer son un mecanismo interno. Aunque no
verá ninguna evidencia física de los contenedores AppContainer en el monitor de procesos, podrá encontrarlos
en las reglas de firewall de salida creadas por el programa de instalación para evitar que los procesos realicen
llamadas de red.

Reglas de firewall creadas por el programa de instalación


De forma predeterminada, SQL Server deshabilita las conexiones salientes mediante la creación de reglas de
firewall. Antiguamente, estas reglas se basaban en cuentas de usuario locales, en las que el programa de
instalación creó una regla de salida para SQLRUserGroup que denegaba a sus miembros el acceso a la red
(cada cuenta profesional aparecía como un principio local sujeto a la regla).
Como parte del cambio a contenedores AppContainer, hay nuevas reglas de firewall que se basan en los SID de
AppContainer: una para cada uno de los 20 contenedores AppContainer creados por el programa de instalación
de SQL Server. Las convenciones de nomenclatura para el nombre de la regla de firewall se corresponden a
Block network access for AppContainer-00 in SQL Ser ver instance MSSQLSERVER (Bloquear el
acceso a la red para AppContainer-00 en la instancia MSSQLSERVER de SQL Server), en el que 00 es el número
del contenedor AppContainer (00-20 de forma predeterminada) y MSSQLSERVER es el nombre de la instancia
de SQL Server.

NOTE
Si se requieren llamadas de red, puede deshabilitar las reglas de salida en Firewall de Windows.

Permisos de archivo
De forma predeterminada, los scripts externos de Python y R solo tienen permiso de acceso de lectura en sus
directorios de trabajo.
Si los scripts de Python o R necesitan acceso a cualquier otro directorio, debe proporcionar permisos de
Lectura y ejecución y/o Escritura en la cuenta de usuario del servicio NT Ser vice\MSSQLLaunchpad y
TODOS LOS PAQUETES DE APLICACIONES en este directorio.
Siga los pasos siguientes para conceder el acceso.
1. En el Explorador de archivos, haga clic con el botón derecho en la carpeta que quiera usar como directorio de
trabajo y seleccione Propiedades .
2. Seleccione Seguridad y haga clic en Editar... para cambiar los permisos.
3. Haga clic en Agregar... .
4. Asegúrese de que el valor de Desde esta ubicación sea el nombre del equipo local.
5. Escriba TODOS LOS PAQUETES DE APLICACIONES en Escriba los nombres de objeto que desea
seleccionar y haga clic en Comprobar nombres . Haga clic en OK .
6. Seleccione Leer y ejecutar en la columna Permitir .
7. Seleccione Escribir en la columna Permitir , si quiere conceder permisos de escritura.
8. Haga clic en Aceptar y en Aceptar .
Permisos de archivos de programa
Al igual que en las versiones anteriores, el SQLRUserGroup sigue proporcionando permisos de lectura y
ejecución en los archivos ejecutables de los directorios de SQL Server Binn , R_SERVICES y
PYTHON_SERVICES . En esta versión, el único miembro de SQLRUserGroup es la cuenta del servicio
SQL Server Launchpad. Cuando el servicio Launchpad inicia un entorno de ejecución de R o Python, el proceso
se ejecuta como servicio LaunchPad.
Autenticación implícita
Como anteriormente, sigue siendo necesaria una configuración adicional para la autenticación implícita en los
casos en los que el script o código tiene que volver a conectarse a SQL Server con autenticación de confianza
para recuperar datos o recursos. La configuración adicional implica la creación de un inicio de sesión de base de
datos para SQLRUserGroup , cuyo único miembro ahora es la única cuenta de servicio de SQL Server
Launchpad, en lugar de varias cuentas de trabajo. Para obtener más información sobre esta tarea, vea Agregar
SQLRUserGroup como usuario de base de datos.

Vínculo simbólico creado por el programa de instalación


Se crea un vínculo simbólico al valor predeterminado actual R_SERVICES y PYTHON_SERVICES , como parte
del programa de instalación de SQL Server. Si no quiere crear este vínculo, una alternativa es conceder el
permiso de lectura "todos los paquetes de aplicaciones" a la jerarquía que conduce a la carpeta.

Vea también
Instalación de SQL Server Machine Learning Services (Python y R) en Windows
Instalación de SQL Server Machine Learning Services (Python y R) en Linux
Instalación de SQL Server 2016 R Services
14/07/2021 • 11 minutes to read

Se aplica a: Solo disponible en SQL Server 2016 (13.x)


Obtenga información sobre cómo instalar SQL Server 2016 R Services en Windows. Puede usar R Services para
ejecutar scripts de R en la base de datos.

NOTE
En SQL Server 2017 y versiones posteriores, R se incluye en Machine Learning Services junto con Python. Si quiere R y
tiene SQL Server 2017 o versiones posteriores, consulte Instalación de SQL Server Machine Learning Services para
agregar la característica.

Lista de comprobación previa a la instalación


Se necesita una instancia del motor de base de datos. No se puede instalar solo R, aunque se puede
agregar incrementalmente a una instancia existente.
De cara a la continuidad empresarial, se admiten Grupos de disponibilidad AlwaysOn para R Services.
Debe instalar R Services y configurar los paquetes en cada nodo.
No instale R Services en una Instancia de clúster de conmutación por error (FCI) de SQL Server Always
On. El mecanismo de seguridad que se usa para aislar los procesos de R no es compatible con un entorno
de instancia de clúster de conmutación por error (FCI) de SQL Server Always On.
No instale R Services en un controlador de dominio. Se producirá un error en la parte de la instalación de
R Services.
No instale Características compar tidas > R Ser ver (independiente) en el mismo equipo en el que
se ejecuta una instancia en base de datos.
Se admite la instalación en paralelo con otras versiones de R, pero no se recomienda. Se admite porque
la instancia de SQL Server usa sus propias copias de las distribuciones de R de código abierto. Sin
embargo, la ejecución de código que usa R en el equipo con SQL Server fuera de SQL Server puede
provocar varios problemas:
Se usa una biblioteca y un ejecutable diferentes y se obtienen resultados diferentes que cuando se
ejecuta en SQL Server.
SQL Server no puede administrar los scripts de R que se ejecutan en bibliotecas externas, lo que
produce la contención de recursos.

IMPORTANT
Una vez finalizada la instalación, asegúrese de completar los pasos adicionales posteriores a la configuración que se
describen en este artículo. En estos pasos se incluye la habilitación de SQL Server para usar scripts externos y la adición de
cuentas necesarias para que SQL Server ejecute trabajos de R en su nombre. Normalmente, si se realizan cambios en la
configuración, es necesario reiniciar la instancia o el servicio Launchpad.

Obtener los medios de instalación


La ubicación de descarga de SQL Server depende de la edición:
Las ediciones Enterprise, Standard y Express de SQL Ser ver tienen licencia para su uso en
producción. En el caso de las ediciones Enterprise y Standard, póngase en contacto con su proveedor de
software para obtener los soportes de instalación. Encontrará información sobre la adquisición y un
directorio de asociados de Microsoft en el sitio web de adquisición de Microsoft.
Edición gratuita más reciente.

Requisito de instalación de revisión


Microsoft ha identificado un problema con la versión concreta de los archivos binarios en tiempo de ejecución
de Microsoft VC++ 2013 que instala como requisito previo SQL Server. Si esta actualización de los archivos
binarios en tiempo de ejecución de VC++ no se instala, puede que SQL Server experimente problemas de
estabilidad en determinados escenarios. Antes de instalar SQL Server, siga las instrucciones de Notas de la
versión de SQL Server para ver si el equipo necesita una revisión para los archivos binarios en tiempo de
ejecución de VC.

Ejecución de la configuración
En instalaciones locales, debe ejecutar el programa de instalación como administrador. Si instala SQL Server
desde un recurso compartido remoto, deberá usar una cuenta de dominio que tenga permisos de lectura y
ejecución para dicho recurso.
1. Inicie el asistente para la instalación de SQL Server 2016.
2. En la pestaña Instalación , seleccione Nueva instalación independiente de SQL Ser ver o agregar
características a una instalación existente .

3. En la página Selección de características , seleccione las siguientes opciones:


Seleccione Ser vicios de Motor de base de datos . El motor de base de datos es necesario en cada
instancia que usa el aprendizaje automático.
Seleccione R Ser vices (en bases de datos) . Instalar compatibilidad con el uso en la base de datos
de R.
IMPORTANT
No instale R Server y R Services al mismo tiempo.

4. En la página Consentimiento para instalar Microsoft R Open , haga clic en Aceptar .


Este contrato de licencia es necesario para descargar Microsoft R Open, que incluye una distribución de
las herramientas y paquetes base de R de código abierto, junto con proveedores de conectividad y
paquetes de R mejorados del equipo de desarrollo de Microsoft R.
5. Una vez aceptado el contrato de licencia, habrá una breve pausa mientras se prepara el instalador. Haga
clic en Siguiente cuando el botón se encuentre disponible.
6. En la página Listo para instalar , confirme que se incluyen los siguientes elementos y, a continuación,
seleccione Instalar .
Servicios de Motor de base de datos
R Services (en bases de datos)
7. Cuando finalice la instalación, si el programa indica que se reinicie el equipo, hágalo. Es importante leer el
mensaje del Asistente para la instalación tras finalizar el programa de instalación. Para obtener más
información, vea View and Read SQL Server Setup Log Files.

Establecimiento de variables de entorno


Solo de cara a la integración de características de R, conviene establecer la variable de entorno MKL_CBWR
para garantizar una salida coherente de los cálculos de la biblioteca Math Kernel Library (MKL) de Intel.
1. En el panel de control, haga clic en Sistema y seguridad > Sistema > Configuración avanzada del
sistema > Variables de entorno .
2. Cree un usuario o una variable del sistema.
Establezca el nombre de la variable en MKL_CBWR .
Establezca el valor de la variable en AUTO .

Este paso requiere el reinicio del servidor. Puede posponer el reinicio hasta que se realice todo el trabajo de
configuración.

Habilitación de la ejecución de scripts


1. Abra SQL Server Management Studio (SSMS) o Azure Data Studio.
2. Conéctese a la instancia en la que se ha instalado R Services, haga clic en Nueva consulta para abrir
una ventana de consulta y ejecute el comando siguiente:

sp_configure

El valor de la propiedad, external scripts enabled , debería ser 0 en este momento. Esto se debe a que la
característica está desactivada de forma predeterminada. Un administrador debe habilitar explícitamente
la característica para poder ejecutar scripts de R.
3. Para habilitar la característica de scripting externo, ejecute la siguiente instrucción:

EXEC sp_configure 'external scripts enabled', 1


RECONFIGURE WITH OVERRIDE

Reinicie el servicio.
Cuando se haya completado la instalación, reinicie el motor de base de datos antes de continuar con lo siguiente
para habilitar la ejecución de scripts.
Al reiniciar el servicio, también se reiniciará automáticamente el servicio SQL Server Launchpad relacionado.
Para reiniciar el servicio, puede hacer clic con el botón derecho en el comando Reiniciar de la instancia
en SSMS o emplear el Administrador de configuración de SQL Server.

Comprobar la instalación
Haga lo siguiente para comprobar que se están ejecutando todos los componentes que se usan para iniciar el
script externo.
1. En SQL Server Management Studio, abra una nueva ventana de consulta y ejecute el siguiente comando:

EXEC sp_configure 'external scripts enabled'

run_value debería estar establecido ahora en 1.


2. Abra el Administrador de configuración de SQL Server y compruebe que el ser vicio SQL Ser ver
Launchpad se está ejecutando. Debe tener un servicio para cada instancia del motor de base de datos
que tenga instalado R. Para más información sobre el servicio, vea Marco de extensibilidad.
3. Si Launchpad se está ejecutando, debería poder ejecutar scripts sencillos de R para comprobar que los
tiempos de ejecución de scripting externo pueden comunicarse con SQL Server.
Abra una nueva ventana de consulta en SQL Server Management Studio o en Azure Data Studio y
ejecute un script como el siguiente:
EXEC sp_execute_external_script @language =N'R',
@script=N'
OutputDataSet <- InputDataSet;
',
@input_data_1 =N'SELECT 1 AS hello'
WITH RESULT SETS (([hello] int not null));
GO

El script puede tardar un poco en ejecutarse la primera vez que se carga el tiempo de ejecución del script
externo. Los resultados deben tener un aspecto similar al siguiente:

H EL LO

Aplicación de actualizaciones
Se recomienda aplicar el último Service Pack y la última actualización acumulativa tanto en el motor de base de
datos como en los componentes de aprendizaje automático.
En los dispositivos conectados a Internet, las actualizaciones acumulativas suelen aplicarse a través de Windows
Update, pero también puede usar los pasos siguientes para las actualizaciones controladas. Al aplicar la
actualización para el motor de base de datos, el programa de instalación extrae las actualizaciones acumulativas
de las bibliotecas de R instaladas en la misma instancia.
En los servidores desconectados, se requieren pasos extra. Para obtener más información, consulte Instalación
en equipos sin acceso a Internet > Aplicación de actualizaciones acumulativas.
1. Comience con una instancia de línea base ya instalada: Versión inicial de SQL Server 2016,
SQL Server 2016 SP1 o SQL Server 2016 SP2.
2. Vaya a la lista de actualizaciones acumulativas: Actualizaciones más recientes de Microsoft SQL Server
3. Seleccione el Service Pack más reciente (si no está instalado todavía como instancia de línea de base) y la
actualización acumulativa. Se descarga un ejecutable que se extrae automáticamente.
4. Ejecute el programa de instalación. Acepte los términos de licencia y, en la página de selección de
características, revise las características para las que se aplican las actualizaciones acumulativas. Debería
ver todas las características instaladas para la instancia actual, incluido R Services. El programa de
instalación descarga los archivos CAB necesarios para actualizar todas las características.
5. Continúe con los pasos del asistente y acepte los términos de licencia para la distribuciones de R.

NOTE
La actualización acumulativa (CU) 14 y versiones posteriores para SQL Server 2016 SP2 incluye una versión más reciente
del entorno de ejecución de R. Para más información, consulte Cambio a la versión predeterminada del entorno de
ejecución del lenguaje.

Configuración adicional
Si el paso de comprobación de scripts externos se ha ejecutado correctamente, puede ejecutar comandos de R
desde SQL Server Management Studio, Azure Data Studio o cualquier otro cliente que pueda enviar
instrucciones T-SQL al servidor.
Si se produjo un error al ejecutar el comando, revise los pasos de configuración adicional de esta sección. Es
posible que tenga que crear otras configuraciones adicionales adecuadas para el servicio o la base de datos.
En el nivel de instancia, la configuración adicional podría incluir:
Configuración de firewall para SQL Server Machine Learning Services.
Habilitación de protocolos de red adicionales.
Habilitación de conexiones remotas.
Administración de cuotas de disco para evitar que los scripts externos ejecuten tareas que agoten el espacio
en disco.

En la base de datos, puede que necesite las siguientes actualizaciones de configuración:


Concesión de permiso a los usuarios para SQL Server Machine Learning Services
Agregar SQLRUserGroup como usuario de base de datos

NOTE
No se requieren todos los cambios enumerados y no es necesario ninguno de ellos. Los requisitos dependen del esquema
de seguridad, del lugar en el que se haya instalado SQL Server y de cómo se espera que los usuarios se conecten a la base
de datos y ejecuten scripts externos. Se pueden encontrar instrucciones de instalación adicionales aquí: Instalación de
SQL Server Machine Learning Services

Optimizaciones sugeridas
Puede que también le interese optimizar el servidor para admitir el aprendizaje automático con R o instalar
modelos previamente entrenados.
Adición de más cuentas profesionales
Si cree que puede hacer un uso intensivo de R, o si prevé que muchos usuarios ejecuten scripts al mismo
tiempo, puede aumentar el número de cuentas de trabajo que están asignadas al servicio Launchpad. Para
obtener más información, vea Escalar la ejecución simultánea de scripts externos en SQL Server Machine
Learning Services.

Optimización del servidor para la ejecución de scripts externos


La configuración predeterminada del programa de instalación de SQL Server está diseñada para optimizar el
equilibrio del servidor para diversos servicios que el motor de base de datos admite, entre otros, procesos de
extracción, transformación y carga de datos (ETL), creación de informes, auditoría y aplicaciones que usan datos
de SQL Server. Por lo tanto, en la configuración predeterminada, podría ver que los recursos para el aprendizaje
automático están restringidos a veces, especialmente en operaciones que usan mucha memoria.
Para asegurarse de que se asignen a los trabajos de aprendizaje automático la prioridad y los recursos correctos,
se recomienda usar Resource Governor de SQL Server para configurar un grupo de recursos externos. Puede
que también le interese cambiar la cantidad de memoria asignada al motor de base de datos de SQL Server o
aumentar el número de cuentas que se ejecutan en el servicio SQL Server Launchpad.
Para configurar un grupo de recursos para la administración de recursos externos, vea Creación de un
grupo de recursos externos.
Para cambiar la cantidad de memoria reservada para la base de datos, vea Opciones de configuración de
memoria del servidor.
Para cambiar el número de cuentas de R que se pueden iniciar mediante SQL Server Launchpad, consulte
Escalar la ejecución simultánea de scripts externos en SQL Server Machine Learning Services.
Si usa la edición Standard Edition y no dispone de Resource Governor, puede usar vistas de administración
dinámica (DMV) y eventos extendidos, así como la supervisión de eventos de Windows, como ayuda para
administrar los recursos de servidor que usa R.
Instalación de paquetes adicionales de R
Las soluciones de R que cree para SQL Server pueden llamar a funciones básicas de R, funciones de los
paquetes de su propiedad instalados con SQL Server y paquetes de R de terceros compatibles con la versión de
R de código abierto instalada por SQL Server.
Los paquetes que quiera usar de SQL Server deben estar instalados en la biblioteca predeterminada que la
instancia usa. Si tiene una instalación independiente de R en el equipo o si ha instalado paquetes en las
bibliotecas de usuario, no podrá usar esos paquetes desde T-SQL.
El proceso de instalación y administración de paquetes de R es diferente en SQL Server 2016 y SQL
Server 2017. En SQL Server 2016, un administrador de bases de datos debe instalar los paquetes de R que
necesitan los usuarios. En SQL Server 2017 puede configurar grupos de usuarios para compartir paquetes en
cada nivel de base de datos, o bien configurar roles de base de datos para permitir que los usuarios instalen sus
propios paquetes. Para obtener más información, vea Instalación de paquetes con herramientas de R.

Pasos siguientes
Los desarrolladores de R pueden empezar con algunos ejemplos sencillos y conocer los aspectos básicos del
funcionamiento de R con SQL Server. Para conocer el siguiente paso, vea los vínculos siguientes:
Inicio rápido: Ejecutar R en T-SQL
Tutoriales de R para aprendizaje automático de SQL
Documentación del aprendizaje automático en SQL
Instalación sin conexión de SQL Server Machine
Learning Services (Python y R) en equipos aislados
sin acceso a Internet
14/07/2021 • 8 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En este artículo se describe cómo instalar SQL Server Machine Learning Services sin conexión en equipos sin
acceso a Internet aislados detrás de un firewall de red.
De forma predeterminada, los instaladores se conectan a sitios de descarga de Microsoft para obtener los
componentes necesarios y actualizados de Machine Learning en SQL Server. Si las restricciones del firewall
impiden que el instalador acceda a estos sitios, puede usar un dispositivo conectado a Internet para descargar
archivos, transferirlos a un servidor sin conexión y, a continuación, ejecutar el programa de instalación.
El análisis en la base de datos consta de una instancia de motor de base de datos, además de componentes
adicionales para la integración de R y Python, en función de la versión de SQL Server.
SQL Server 2019 incluye R, Python y Java
SQL Server 2017 incluye R y Python
SQL Server 2016 es solo R
En un servidor aislado, las características específicas del idioma de Machine Learning y de R/Python se agregan
mediante archivos CAB.

Instalación sin conexión de SQL Server 2019


Para instalar SQL Server Machine Learning Services (R y Python) en un servidor aislado, empiece por descargar
la versión inicial de SQL Server y los archivos CAB correspondientes para la compatibilidad con R y Python.
Incluso si planea actualizar inmediatamente el servidor para que use la actualización acumulativa más reciente,
primero se debe instalar una versión inicial.

NOTE
SQL Server 2019 no tiene Service Packs. La versión inicial es la única línea base, con mantenimiento solo a través de
actualizaciones acumulativas.

1 - Descargar archivos CAB 2019


En un equipo que tenga conexión a Internet, descargue los archivos CAB que proporcionan características de R y
Python para la versión inicial y los medios de instalación de SQL Server 2019.

REL EA SE VÍN C ULO DE DESC A RGA

Microsoft R Open SRO_3.5.2.125_1033.cab

Microsoft R Server SRS_9.4.7.25_1033.cab

Microsoft Python Open SPO_4.5.12.120_1033.cab


REL EA SE VÍN C ULO DE DESC A RGA

Microsoft Python Server SPS_9.4.7.25_1033.cab

NOTE
La característica de Java se incluye con los medios de instalación de SQL Server y no necesita un archivo CAB
independiente.

2 - Obtener medios de instalación de SQL Server 2019


1. En un equipo que tenga conexión a Internet, descargue el programa de instalación de SQL Server 2019.
2. Haga doble clic en la configuración y elija el tipo de instalación Descargar medios . Con esta opción, el
programa de instalación crea un archivo local .iso (o .cab) que contiene el medio de instalación.

Instalación sin conexión de SQL Server 2017


Para instalar SQL Server Machine Learning Services (R y Python) en un servidor aislado, empiece por descargar
la versión inicial de SQL Server y los archivos CAB correspondientes para la compatibilidad con R y Python.
Incluso si planea actualizar inmediatamente el servidor para que use la actualización acumulativa más reciente,
primero se debe instalar una versión inicial.

NOTE
SQL Server 2017 no tiene Service Packs. Es la primera versión de SQL Server que usa la versión inicial como única línea
base, con mantenimiento solo a través de las actualizaciones acumulativas.

1 - Descargar archivos CAB 2017


En un equipo que tenga conexión a Internet, descargue los archivos CAB que proporcionan características de R y
Python para la versión inicial y los medios de instalación de SQL Server 2017.
REL EA SE VÍN C ULO DE DESC A RGA

Microsoft R Open SRO_3.3.3.24_1033.cab

Microsoft R Server SRS_9.2.0.24_1033.cab

Microsoft Python Open SPO_9.2.0.24_1033.cab

Microsoft Python Server SPS_9.2.0.24_1033.cab

2 - Obtener medios de instalación de SQL Server 2017


1. En un equipo que tenga conexión a Internet, descargue el programa de instalación de SQL Server 2017.
2. Haga doble clic en la configuración y elija el tipo de instalación Descargar medios . Con esta opción, el
programa de instalación crea un archivo local .iso (o .cab) que contiene el medio de instalación.

Instalación sin conexión de SQL Server 2016


El análisis en base de datos de SQL Server 2016 es de solo R, con solo dos archivos CAB para los paquetes de
productos y la distribución de Microsoft de R de código abierto, respectivamente. Empiece instalando cualquiera
de estas versiones: RTM, SP 1, SP 2. Una vez efectuada una instalación base, las actualizaciones acumulativas se
pueden aplicar como paso siguiente.
En un equipo que tenga conexión a Internet, descargue los archivos CAB usados por el programa de instalación
para instalar el análisis de base de datos en SQL Server 2016.
1 - Descargar archivos CAB 2016
REL EA SE M IC RO SO F T R O P EN M IC RO SO F T R SERVER

SQL Ser ver 2016 RTM SRO_3.2.2.803_1033.cab SRS_8.0.3.0_1033.cab

SQL Ser ver 2016 SP 1 SRO_3.2.2.15000_1033.cab SRS_8.0.3.15000_1033.cab


REL EA SE M IC RO SO F T R O P EN M IC RO SO F T R SERVER

SQL Ser ver 2016 SP 2 SRO_3.2.2.16000_1033.cab SRS_8.0.3.17000_1033.cab

2 - Obtener medios de instalación de SQL Server 2016


Puede instalar SQL Server 2016 RTM, SP 1 o SP 2 como primera instalación en el equipo de destino. Cualquiera
de estas versiones puede aceptar una actualización acumulativa.
Un modo de obtener un archivo .iso que contiene el medio de instalación es con Visual Studio Dev Essentials.
Inicie sesión y, a continuación, use el vínculo Descargas para buscar la versión de SQL Server 2016 que quiere
instalar. La descarga es un archivo .iso, que puede copiar en el equipo de destino para efectuar una instalación
sin conexión.

Transferencia de archivos
Copie el medio de instalación de SQL Server (.iso o .cab) y los archivos CAB de análisis de base de datos en el
equipo de destino. Coloque los archivos CAB y el archivo del medio de instalación en la misma carpeta del
equipo de destino (por ejemplo, en la carpeta %TEMP% del usuario que realiza la instalación).
La carpeta %TEMP% es necesaria para los archivos CAB de Python. En cuanto a R, puede usar %TEMP% o
establecer el parámetro myrcachedirectory en la ruta de acceso del archivo CAB.

Ejecución del programa de instalación


Al ejecutar el programa de instalación de SQL Server en un equipo sin conexión a Internet, agrega una página
de instalación sin conexión al asistente para que pueda especificar la ubicación de los archivos CAB que ha
copiado en el paso anterior.
1. Para comenzar la instalación, haga doble clic en el archivo .iso o .cab para obtener acceso a los medios de
instalación. Debería ver el archivo setup. exe .
2. Haga clic con el botón secundario en setup.exe y ejecútelo como administrador.
3. Cuando el asistente para la instalación muestre la página de licencias de los componentes de R o Python
de código abierto, haga clic en Aceptar . La aceptación de los términos de licencia le permite continuar
con el siguiente paso.
4. Cuando llegue a la página Instalación sin conexión , en Ruta de instalación , especifique la carpeta
que contiene los archivos CAB que ha copiado antes.
5. Siga las indicaciones en pantalla para completar la instalación.

Aplicación de actualizaciones acumulativas


Se recomienda aplicar la última actualización acumulativa tanto en el motor de base de datos como en los
componentes de Machine Learning. Las actualizaciones acumulativas se instalan a través del programa de
instalación.
1. Comience con una instancia de línea base. Solo puede aplicar las actualizaciones acumulativas a las
instalaciones existentes de la versión inicial de SQL Server.
2. En un dispositivo conectado a Internet, vaya a la lista de actualizaciones acumulativas correspondientes a
su versión de SQL Server:
Actualizaciones de SQL Server 2019 (las actualizaciones aún no están disponibles para la
versión 2019)
1. Comience con una instancia de línea base. Solo puede aplicar las actualizaciones acumulativas a las
instalaciones existentes de la versión inicial de SQL Server.
2. En un dispositivo conectado a Internet, vaya a la lista de actualizaciones acumulativas correspondientes a
su versión de SQL Server:
Actualizaciones de SQL Server 2017
1. Comience con una instancia de línea base. Solo puede aplicar actualizaciones acumulativas a las
instalaciones existentes de la versión inicial de SQL Server 2016, SQL Server 2016 SP 1 o SQL
Server 2016 SP 2.
2. En un dispositivo conectado a Internet, vaya a la lista de actualizaciones acumulativas correspondientes a
su versión de SQL Server:
Actualizaciones de SQL Server 2016
3. Seleccione la actualización acumulativa más reciente para descargar el archivo ejecutable.
4. Obtenga los archivos .CAB correspondientes a R y Python. Para obtener los vínculos de descarga, vea
Descargas de CAB de actualizaciones acumulativas en instancias de análisis en base de datos de
SQL Server.
5. Transfiera todos los archivos, archivos ejecutables y archivos CAB a la misma carpeta del equipo sin
conexión.
6. Ejecute el programa de instalación. Acepte los términos de licencia y, en la página de selección de
características, revise las características para las que se aplican las actualizaciones acumulativas. Debería
ver todas las características instaladas para la instancia actual, incluidas las características de aprendizaje
automático.

7. Continúe con los pasos del asistente y acepte los términos de licencia para las distribuciones de R y
Python. Durante la instalación se le pedirá que elija la ubicación de la carpeta que contiene los archivos
CAB actualizados.

Establecimiento de variables de entorno


Solo de cara a la integración de características de R, conviene establecer la variable de entorno MKL_CBWR
para garantizar una salida coherente de los cálculos de la biblioteca Math Kernel Library (MKL) de Intel.
1. En el panel de control, haga clic en Sistema y seguridad > Sistema > Configuración avanzada del
sistema > Variables de entorno .
2. Cree un usuario o una variable del sistema.
Establezca el nombre de la variable en MKL_CBWR .
Establezca el valor de la variable en AUTO .

Este paso requiere el reinicio del servidor. Si va a habilitar la ejecución de scripts, puede posponer el reinicio
hasta que se realice todo el trabajo de configuración.

Configuración posterior a la instalación


Una vez finalizada la instalación, reinicie el servicio y, a continuación, configure el servidor para habilitar la
ejecución del script:
Habilitación de la ejecución de scripts externos
Una instalación sin conexión inicial de SQL Server Machine Learning Services requiere la misma configuración
que una instalación en línea:
Comprobación de la instalación
Configuración adicional según sea necesario
Una vez finalizada la instalación, reinicie el servicio y, a continuación, configure el servidor para habilitar la
ejecución del script:
Habilitación de la ejecución de scripts externos
Una instalación sin conexión inicial de SQL Server R Services requiere la misma configuración que una
instalación en línea:
Comprobación de la instalación
Configuración adicional según sea necesario

Pasos siguientes
Para usar Machine Learning Services para ejecutar scripts de Python y R en la base de datos, consulte
Instalación de SQL Server Machine Learning Services.
Descargas de archivos CAB para la instalación sin
conexión de actualizaciones acumulativas de
SQL Server Machine Learning Services
14/07/2021 • 6 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Descargue los archivos CAB de Python y R para SQL Server Machine Learning Services. Estos archivos CAB
contienen actualizaciones de la característica Machine Learning Services (Python y R) y se usan al instalar
SQL Server en un servidor sin acceso a Internet.
Descargue los archivos CAB de Python y R para SQL Server 2016 R Services. Estos archivos CAB contienen
actualizaciones de la característica R Services y se usan al instalar SQL Server en un servidor sin acceso a
Internet.
A continuación, encontrará vínculos de descarga a archivos CAB para cada actualización acumulativa. Para
obtener más información sobres las instalaciones sin conexión, vea Instalación de componentes de aprendizaje
automático de SQL Server sin acceso a Internet.

Prerrequisitos
Comience con una instalación de línea base. En SQL Server Machine Learning Services, la versión inicial es la
instalación de línea base.
Comience con una instalación de línea base. En SQL Server 2016 R Services, puede comenzar con la versión
inicial, SP1 o SP2.
También puede aplicar las actualizaciones acumulativas.

Archivos CAB de SQL Server 2019


Los archivos CAB se enumeran en orden cronológico inverso. Cuando descargue los archivos CAB y los
transfiera al equipo de destino, colóquelos en una carpeta adecuada, como Descargas o la carpeta %temp% del
usuario de instalación.

REL EA SE C O M P O N EN T E VÍN C ULO DE DESC A RGA P RO B L EM A S T RATA DO S

SQL Ser ver 2019 CU8

Microsoft R Open SRO_3.5.2.777_1033.cab

R Server SRS_9.4.7.958_1033.cab

Microsoft Python Open SPO_4.5.12.479_1033.cab

Servidor de Python SPS_9.4.7.958_1033.cab

SQL Ser ver 2019 CU5


REL EA SE C O M P O N EN T E VÍN C ULO DE DESC A RGA P RO B L EM A S T RATA DO S

Microsoft R Open SRO_3.5.2.293_1033.cab

R Server SRS_9.4.7.804_1033.cab

Microsoft Python Open SPO_4.5.12.479_1033.cab

Servidor de Python SPS_9.4.7.804_1033.cab

SQL Ser ver 2019 CU3

Microsoft R Open SRO_3.5.2.293_1033.cab

R Server SRS_9.4.7.717_1033.cab

Microsoft Python Open SPO_4.5.12.479_1033.cab

Servidor de Python SPS_9.4.7.717_1033.cab

SQL Ser ver 2019 CU2

Microsoft R Open SRO_3.5.2.125_1033.cab

R Server SRS_9.4.7.35_1033.cab

Microsoft Python Open SPO_4.5.12.692_1033.cab

Servidor de Python SPS_9.4.7.35_1033.cab

SQL Ser ver 2019 CU1

Microsoft R Open SRO_3.5.2.125_1033.cab

R Server SRS_9.4.7.25_1033.cab

Microsoft Python Open SPO_4.5.12.120_1033.cab

Servidor de Python SPS_9.4.7.25_1033.cab

Versión inicial

Microsoft R Open SRO_3.5.2.125_1033.cab

R Server SRS_9.4.7.25_1033.cab

Microsoft Python Open SPO_4.5.12.120_1033.cab

Servidor de Python SPS_9.4.7.25_1033.cab

CAB de SQL Server 2017


Los archivos CAB se enumeran en orden cronológico inverso. Cuando descargue los archivos CAB y los
transfiera al equipo de destino, colóquelos en una carpeta adecuada, como Descargas o la carpeta %temp% del
usuario de instalación.

REL EA SE C O M P O N EN T E VÍN C ULO DE DESC A RGA P RO B L EM A S T RATA DO S

SQL Ser ver 2017


CU22 - CU23

Microsoft R Open SRO_3.5.2.777_1033.cab

R Server SRS_9.4.7.958_1033.cab

Microsoft Python Open SPO_4.5.12.479_1033.cab

Servidor de Python SPS_9.4.7.958_1033.cab

SQL Ser ver 2017


CU19 - CU20

Microsoft R Open SRO_3.3.3.1900_1033.cab Corrige el error que


provoca que la ejecución de
un script de R por parte de
sp_execute_external_script
muestre un mensaje de
advertencia

R Server SRS_9.2.0.1900_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

Microsoft Python Open SPO_9.2.0.1400_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

Servidor de Python SPS_9.2.0.1900_1033.cab Corrige el error que


provoca que la ejecución de
un script de Python por
parte de
sp_execute_external_script
a veces pierda datos al
devolver el tipo de datos
varbinary o binary a
SQL Server en forma de
OutputDataSet.

SQL Ser ver 2017


CU14 - CU15 - CU16 - CU1
7 - CU18

Microsoft R Open SRO_3.3.3.1400_1033.cab Los binarios del paquete


están ahora firmados.

R Server SRS_9.2.0.1400_1033.cab Los binarios del paquete


están ahora firmados.
REL EA SE C O M P O N EN T E VÍN C ULO DE DESC A RGA P RO B L EM A S T RATA DO S

Microsoft Python Open SPO_9.2.0.1400_1033.cab Los binarios del paquete


están ahora firmados.

Servidor de Python SPS_9.2.0.1400_1033.cab Los binarios del paquete


están ahora firmados.

SQL Ser ver 2017 CU13

Microsoft R Open SRO_3.3.3.1300_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

R Server SRS_9.2.0.1300_1033.cab Contiene una corrección


para actualizar un R Server
con operaciones
independientes, como se
instala a través de la
configuración del SQL
Server. Use la CAB CU13 y
siga estas instrucciones
para aplicar la actualización.

Microsoft Python Open SPO_9.2.0.24_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

Servidor de Python SPS_9.2.0.1300_1033.cab Contiene una corrección


para actualizar un Python
Server con operaciones
independientes, como se
instala a través de la
configuración del SQL
Server. Use la CAB CU13 y
siga estas instrucciones
para aplicar la actualización.

SQL Ser ver 2017


CU10 - CU11 - CU12

Microsoft R Open SRO_3.3.3.300_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

R Server SRS_9.2.0.1000_1033.cab Correcciones menores.

Microsoft Python Open SPO_9.2.0.24_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.
REL EA SE C O M P O N EN T E VÍN C ULO DE DESC A RGA P RO B L EM A S T RATA DO S

Servidor de Python SPS_9.2.0.1000_1033.cab Python rx_data_step pierde


el orden de las filas cuando
se eliminan los duplicados.
SPEE produce un error en la
detección del tipo de datos
en el índice de almacén de
columnas agrupado.
Devuelve una tabla vacía
cuando las columnas
contienen todos los valores
NULL.

SQL Ser ver 2017


CU8 - CU9

Microsoft R Open SRO_3.3.3.300_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

R Server SRS_9.2.0.800_1033.cab

Microsoft Python Open SPO_9.2.0.24_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

Servidor de Python SPS_9.2.0.800_1033.cab

SQL Ser ver 2017


CU6 - CU7

Microsoft R Open SRO_3.3.3.300_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

R Server SRS_9.2.0.600_1033.cab

Microsoft Python Open SPO_9.2.0.24_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

Servidor de Python SPS_9.2.0.600_1033.cab Tipos de datos de fecha y


hora en la consulta SPEES.
se han mejorado los
mensajes de error de
microsoftml cuando faltan
modelos entrenados
previamente.
Correcciones de funciones y
variables de transformación
de revoscalepy.

SQL Ser ver 2017 CU5

Microsoft R Open SRO_3.3.3.300_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.
REL EA SE C O M P O N EN T E VÍN C ULO DE DESC A RGA P RO B L EM A S T RATA DO S

R Server SRS_9.2.0.500_1033.cab Errores relacionados con la


ruta de acceso en
rxInstallPackages.
Conexiones en un bucle
invertido para RxExec.

Microsoft Python Open No existe ningún cambio


con respecto a las versiones
anteriores.

Servidor de Python SPS_9.2.0.500_1033.cab


Conexiones en un bucle
invertido para rx_exec.

SQL Ser ver 2017 CU4

Microsoft R Open SRO_3.3.3.300_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

R Server SRS_9.2.0.400_1033.cab

Microsoft Python Open SPO_9.2.0.24_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

Servidor de Python SPS_9.2.0.400_1033.cab

SQL Ser ver 2017 CU3

Microsoft R Open SRO_3.3.3.300_1033.cab

R Server SRS_9.2.0.300_1033.cab

Microsoft Python Open SPO_9.2.0.24_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

Servidor de Python SPS_9.2.0.300_1033.cab Serialización del modelo de


Python en revoscalepy con
la función rx_serialize_model
function.
Compatibilidad de la
puntuación nativa, además
de mejoras en la
puntuación en tiempo real.

SQL Ser ver 2017


CU1 - CU2

Microsoft R Open SRO_3.3.3.24_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

R Server SRS_9.2.0.100_1033.cab
REL EA SE C O M P O N EN T E VÍN C ULO DE DESC A RGA P RO B L EM A S T RATA DO S

Microsoft Python Open SPO_9.2.0.24_1033.cab No existe ningún cambio


con respecto a las versiones
anteriores.

Servidor de Python SPS_9.2.0.100_1033.cab Agrega rx_create_col_info


para devolver información
del esquema.
Mejoras en rx_exec para
admitir escenarios paralelos
mediante el contexto de
cálculo de
RxLocalParallel .

Versión inicial

Microsoft R Open SRO_3.3.3.24_1033.cab

R Server SRS_9.2.0.24_1033.cab

Microsoft Python Open SPO_9.2.0.24_1033.cab

Servidor de Python SPS_9.2.0.24_1033.cab

CAB de SQL Server 2016


Para SQL Server 2016 R Services, las versiones de línea base son la versión RTM o una versión del Service Pack.

REL EA SE VÍN C ULO DE DESC A RGA

SQL Ser ver 2016 SP2 CU14-CU15

Microsoft R Open SRO_3.5.2.777_1033.cab

Microsoft R Server SRS_9.4.7.958_1033.cab

SQL Ser ver 2016 SP2 CU6-CU13

Microsoft R Open SRO_3.2.2.20100_1033.cab

Microsoft R Server SRS_8.0.3.20100_1033.cab

SQL Ser ver 2016 SP2 CU1-CU5

Microsoft R Open SRO_3.2.2.16000_1033.cab

Microsoft R Server SRS_8.0.3.20000_1033.cab

SQL Ser ver 2016 SP2


REL EA SE VÍN C ULO DE DESC A RGA

Microsoft R Open SRO_3.2.2.16000_1033.cab

Microsoft R Server SRS_8.0.3.17000_1033.cab

SQL Ser ver 2016 SP1 CU14

Microsoft R Open SRO_3.2.2.16100_1033.cab

Microsoft R Server SRS_8.0.3.17200_1033.cab

SQL Ser ver 2016 SP1 CU1-CU13

Microsoft R Open SRO_3.2.2.16000_1033.cab

Microsoft R Server SRS_8.0.3.16000_1033.cab

SQL Ser ver 2016 SP1

Microsoft R Open SRO_3.2.2.15000_1033.cab

Microsoft R Server SRS_8.0.3.15000_1033.cab

SQL Ser ver 2016 CU4-CU9

Microsoft R Open SRO_3.2.2.13000_1033.cab

Microsoft R Server SRS_8.0.3.13000_1033.cab

SQL Ser ver 2016 CU2-CU3

Microsoft R Open SRO_3.2.2.12000_1033.cab

Microsoft R Server SRS_8.0.3.12000_1033.cab

SQL Ser ver 2016 CU1

Microsoft R Open SRO_3.2.2.10000_1033.cab

Microsoft R Server SRS_8.0.3.10000_1033.cab

SQL Ser ver 2016 RTM

Microsoft R Open SRO_3.2.2.803_1033.cab

Microsoft R Server SRS_8.0.3.0_1033.cab


NOTE
Al instalar SQL Server 2016 SP1 CU4 o SP1 CU5 sin conexión, descargue SRO_3.2.2.16000_1033.cab. Si descargó
SRO_3.2.2.13000_1033.cab de FWLINK 831785 como se indica en el cuadro de diálogo de instalación, cambie el nombre
del archivo a SRO_3.2.2.16000_1033.cab antes de instalar la actualización acumulativa.

Pasos siguientes
Aplicación de actualizaciones acumulativas en equipos sin acceso a Internet
Aplicación de actualizaciones acumulativas en equipos que tengan conectividad a Internet
Aplicación de actualizaciones acumulativas a un servidor independiente
Instalación de SQL Server Machine Learning
Services con R y Python mediante la línea de
comandos
14/07/2021 • 8 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En este artículo se proporcionan instrucciones para instalar SQL Server Machine Learning Services con Python y
R mediante una línea de comandos.
Puede especificar la interacción silenciosa, básica o completa con la interfaz de usuario del programa de
instalación. Este contenido complementa al artículo Instalar SQL Server desde el símbolo del sistema, el cual
abarca los parámetros exclusivos de los componentes de aprendizaje automático de R y Python.

Lista de comprobación previa a la instalación


Ejecute los comandos desde un símbolo del sistema con privilegios elevados.
Se requiere una instancia del motor de base de datos para las instalaciones en base de datos. No se
pueden instalar características solo de R o de Python, aunque se pueden agregar incrementalmente a una
instancia existente. Si solo quiere R y Python sin el motor de base de datos, instale el servidor
independiente.
No realice la instalación en un clúster de conmutación por error. El mecanismo de seguridad que se usa
para aislar los procesos de R y Python no es compatible con un entorno de clúster de conmutación por
error de Windows Server.
No realice la instalación en un controlador de dominio. Se producirá un error en la parte de la instalación
de Machine Learning Services.
Evite instalar instancias independientes y en bases de datos en el mismo equipo. Un servidor
independiente competirá por los mismos recursos, lo que afectará al rendimiento de ambas instalaciones.

Argumentos de la línea de comandos


El argumento /FEATURES es obligatorio, igual que los contratos de términos de licencia.
Al realizar la instalación a través del símbolo del sistema, SQL Server admite el modo totalmente silencioso
mediante el uso del parámetro /Q o el modo silencioso sencillo mediante el parámetro /QS . El modificador /QS
solamente muestra el progreso, pero no acepta ninguna entrada ni muestra mensajes de error si los encuentra.
El parámetro /QS solamente se admite cuando se ha especificado /Action=install .

A RGUM EN TO S DESC RIP C IÓ N

/FEATURES = AdvancedAnalytics Instala la versión en la base de datos: SQL Server R Services


(en base de datos).

/FEATURES = SQL_SHARED_MR Instala la característica de R para la versión independiente:


SQL Server R Server (independiente). Un servidor
independiente es una "característica compartida" que no
está enlazada a una instancia del motor de base de datos.
A RGUM EN TO S DESC RIP C IÓ N

/IACCEPTROPENLICENSETERMS Indica que ha aceptado los términos de licencia para usar los
componentes de R de código abierto.

/IACCEPTPYTHONLICENSETERMS Indica que ha aceptado los términos de licencia para usar los
componentes de Python.

/IACCEPTSQLSERVERLICENSETERMS Indica que ha aceptado los términos de licencia para usar


SQL Server.

/MRCACHEDIRECTORY Para la instalación sin conexión, establece la carpeta que


contiene los archivos .cab de los componentes de R.

A RGUM EN TO S DESC RIP C IÓ N

/FEATURES = AdvancedAnalytics Instala la versión en la base de datos: SQL Server Machine


Learning Services (en base de datos).

/FEATURES = SQL_INST_MR Combine esto con AdvancedAnalytics. Instala la característica


de R (en base de datos), incluidos Microsoft R Open y los
paquetes de propiedad de R.

/FEATURES = SQL_INST_MPY Combine esto con AdvancedAnalytics. Instala la característica


de R (en base de datos), incluidos Anaconda y los paquetes
de propiedad de Python.

/FEATURES = SQL_SHARED_MR Instala la característica de R para la versión independiente:


SQL Server Machine Learning Server (independiente). Un
servidor independiente es una "característica compartida"
que no está enlazada a una instancia del motor de base de
datos.

/FEATURES = SQL_SHARED_MPY Instala la característica de Python para la versión


independiente: SQL Server Machine Learning Server
(independiente). Un servidor independiente es una
"característica compartida" que no está enlazada a una
instancia del motor de base de datos.

/IACCEPTROPENLICENSETERMS Indica que ha aceptado los términos de licencia para usar los
componentes de R de código abierto.

/IACCEPTPYTHONLICENSETERMS Indica que ha aceptado los términos de licencia para usar los
componentes de Python.

/IACCEPTSQLSERVERLICENSETERMS Indica que ha aceptado los términos de licencia para usar


SQL Server.

/MRCACHEDIRECTORY Para la instalación sin conexión, establece la carpeta que


contiene los archivos .cab de los componentes de R.

/MPYCACHEDIRECTORY Reservado para uso futuro. Use %TEMP% para almacenar


archivos .cab de los componentes de Python para su
instalación en equipos que no tienen conexión a Internet.
A RGUM EN TO S DESC RIP C IÓ N

/FEATURES = AdvancedAnalytics Instala la versión en la base de datos: SQL Server Machine


Learning Services (en base de datos).

/FEATURES = SQL_INST_MR Combine esto con AdvancedAnalytics. Instala la característica


de R (en base de datos), incluidos Microsoft R Open y los
paquetes de propiedad de R.

/FEATURES = SQL_INST_MPY Combine esto con AdvancedAnalytics. Instala la característica


de R (en base de datos), incluidos Anaconda y los paquetes
de propiedad de Python.

/FEATURES = SQL_INST_MJAVA Combine esto con AdvancedAnalytics. Instala la característica


de Java (en base de datos), incluido Open JRE. Se aplica a la
extensión de lenguaje Java de SQL Server.

/FEATURES = SQL_SHARED_MR Instala la característica de R para la versión independiente:


SQL Server Machine Learning Server (independiente). Un
servidor independiente es una "característica compartida"
que no está enlazada a una instancia del motor de base de
datos.

/FEATURES = SQL_SHARED_MPY Instala la característica de Python para la versión


independiente: SQL Server Machine Learning Server
(independiente). Un servidor independiente es una
"característica compartida" que no está enlazada a una
instancia del motor de base de datos.

/IACCEPTROPENLICENSETERMS Indica que ha aceptado los términos de licencia para usar los
componentes de R de código abierto.

/IACCEPTPYTHONLICENSETERMS Indica que ha aceptado los términos de licencia para usar los
componentes de Python.

/IACCEPTSQLSERVERLICENSETERMS Indica que ha aceptado los términos de licencia para usar


SQL Server.

/MRCACHEDIRECTORY Para la instalación sin conexión, establece la carpeta que


contiene los archivos .cab de los componentes de R.

/MPYCACHEDIRECTORY Reservado para uso futuro. Use %TEMP% para almacenar


archivos .cab de los componentes de Python para su
instalación en equipos que no tienen conexión a Internet.

Instalaciones de instancias en bases de datos


El análisis en bases de datos está disponible para las instancias del motor de base de datos, y es necesario para
agregar la característica AdvancedAnalytics a la instalación. Puede instalar una instancia del motor de base de
datos con análisis avanzado o agregarla a una instancia existente.
Para ver la información de progreso sin los mensajes interactivos en pantalla, use el argumento /qs.
IMPORTANT
Después de la instalación, quedan dos pasos de configuración más. La integración no está completa hasta que no se
realizan estas tareas. Consulte Tareas posteriores a la instalación para obtener instrucciones.

SQL Server Machine Learning Services: motor de base de datos y análisis avanzado con Python y R
Para una instalación simultánea de la instancia del motor de base de datos, proporcione el nombre de la
instancia y las credenciales de inicio de sesión de un administrador (Windows). Incluye características para la
instalación de componentes principales y de lenguaje, así como la aceptación de todos los términos de licencia.

Setup.exe /qs /ACTION=Install /FEATURES=SQLEngine,ADVANCEDANALYTICS,SQL_INST_MR,SQL_INST_MPY


/INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS="<Windows-username>"
/IACCEPTSQLSERVERLICENSETERMS /IACCEPTROPENLICENSETERMS /IACCEPTPYTHONLICENSETERMS

Se trata del mismo comando, pero con un inicio de sesión de SQL Server en un motor de base de datos
mediante el uso de autenticación mixta.

Setup.exe /q /ACTION=Install /FEATURES=SQLEngine,ADVANCEDANALYTICS,SQL_INST_MR,SQL_INST_MPY


/INSTANCENAME=MSSQLSERVER /SECURITYMODE=SQL /SAPWD="%password%" /SQLSYSADMINACCOUNTS="<sql-username>"
/IACCEPTSQLSERVERLICENSETERMS /IACCEPTROPENLICENSETERMS /IACCEPTPYTHONLICENSETERMS

Este ejemplo solo se aplica a Python, y muestra que se puede agregar un lenguaje si se omite una característica.

Setup.exe /qs /ACTION=Install /FEATURES=SQLEngine,ADVANCEDANALYTICS,SQL_INST_MPY


/INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS="<username>"
/IACCEPTSQLSERVERLICENSETERMS /IACCEPTPYTHONLICENSETERMS

SQL Server R Services: motor de base de datos y análisis avanzado con R


Para una instalación simultánea de la instancia del motor de base de datos, proporcione el nombre de la
instancia y las credenciales de inicio de sesión de un administrador (Windows). Incluye características para la
instalación de componentes principales y de lenguaje, así como la aceptación de todos los términos de licencia.

Setup.exe /qs /ACTION=Install /FEATURES=SQLEngine,ADVANCEDANALYTICS,SQL_INST_MR


/INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS="<Windows-username>"
/IACCEPTSQLSERVERLICENSETERMS /IACCEPTROPENLICENSETERMS

Configuración posterior a la instalación (obligatoria)


Solo se aplica a las instalaciones en la base de datos.
Una vez finalizada la instalación, tiene una instancia del motor de base de datos con R y Python, paquetes de
Microsoft de R y Python, Microsoft R Open, Anaconda, herramientas, ejemplos y scripts que forman parte de la
distribución.
Se necesitan realizar dos pasos más para completar la instalación:
1. Reinicie el servicio de motor de base de datos.
2. SQL Server Machine Learning Services: Habilite los scripts externos para poder usar la característica. El
siguiente paso es seguir las instrucciones de Instalación de SQL Server Machine Learning Services (en
bases de datos).
1. Reinicie el servicio de motor de base de datos.
2. SQL Server R Services: Habilite los scripts externos para poder usar la característica. El siguiente paso es
seguir las instrucciones de Instalación de SQL Server R Services (en bases de datos).

Adición de análisis avanzado a una instancia existente del motor de


base de datos
Cuando agregue análisis avanzado en base de datos a una instancia existente del motor de base de datos,
proporcione el nombre de la instancia. Por ejemplo, si ha instalado anteriormente un motor de base de datos
SQL Server 2017 (o una versión posterior) y Python, podría usar este comando para agregar R.

Setup.exe /qs /ACTION=Install /FEATURES=SQL_INST_MR /INSTANCENAME=MSSQLSERVER


/IACCEPTSQLSERVERLICENSETERMS /IACCEPTROPENLICENSETERMS

Instalación silenciosa
Una instalación silenciosa suprime la comprobación de las ubicaciones de los archivos .cab. Por este motivo, es
necesario que especifique la ubicación donde se van a desempaquetar los archivos .cab. En el caso de Python,
los archivos .cab deben estar ubicados en %TEMP*. Para R, puede establecer la ruta de acceso de la carpeta con
el directorio temporal.

Setup.exe /q /ACTION=Install /FEATURES=SQLEngine,ADVANCEDANALYTICS,SQL_INST_MR,SQL_INST_MPY


/INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS="<username>"
/IACCEPTSQLSERVERLICENSETERMS /IACCEPTROPENLICENSETERMS /IACCEPTPYTHONLICENSETERMS
/MRCACHEDIRECTORY=%temp%

Instalaciones de servidor independiente


Un servidor independiente es una "característica compartida" que no está enlazada a una instancia del motor de
base de datos. En los siguientes ejemplos se muestra la sintaxis válida para la instalación del servidor
independiente.
SQL Server Machine Learning Server admite Python y R en un servidor independiente:

Setup.exe /q /ACTION=Install /FEATURES=SQL_SHARED_MR,SQL_SHARED_MPY


/IACCEPTROPENLICENSETERMS /IACCEPTPYTHONLICENSETERMS /IACCEPTSQLSERVERLICENSETERMS

SQL Server R Server solo admite R:

Setup.exe /q /ACTION=Install /FEATURES=SQL_SHARED_MR


/IACCEPTROPENLICENSETERMS /IACCEPTSQLSERVERLICENSETERMS

Una vez finalizada la instalación, tiene un servidor, paquetes de Microsoft, distribuciones de código abierto de R
y Python, herramientas, ejemplos y scripts que forman parte de la distribución.
Para abrir una ventana de la consola de R, vaya a
\Program files\Microsoft SQL Server\150 (or 140/130)\R_SERVER\bin\x64 y haga doble clic en RGui.exe . ¿No está
familiarizado con R? Pruebe este tutorial: Comandos de R y funciones de RevoScaleR básicos: 25 ejemplos
comunes.
Para abrir un comando de Python, vaya a
\Program files\Microsoft SQL Server\150 (or 140)\PYTHON_SERVER\bin\x64 y haga doble clic en python.exe .
Pasos siguientes
Los desarrolladores de Python pueden aprender a usar Python con SQL Server con estos tutoriales:
Tutorial de Python: Predicción de alquileres de esquíes con regresión lineal en
SQL Server Machine Learning Services
Tutorial de Python: Clasificación de clientes por categorías mediante la agrupación en clústeres k-means con
SQL Server Machine Learning Services
Los desarrolladores de R pueden empezar con algunos ejemplos sencillos y conocer los aspectos básicos del
funcionamiento de R con SQL Server. Para conocer el siguiente paso, vea los vínculos siguientes:
Inicio rápido: Ejecutar R en T-SQL
Tutorial: Análisis en base de datos para desarrolladores de R
Instalación de modelos de aprendizaje automático
entrenados previamente en SQL Server
14/07/2021 • 6 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En este artículo se explica cómo usar PowerShell para agregar modelos gratuitos de aprendizaje automático
entrenados previamente para el análisis de sentimiento y las características de imagen a una instancia de SQL
Server que tenga integración con R o Python. Los modelos entrenados previamente están compilados por
Microsoft y listos para su uso, que se agregan a una instancia como una tarea posterior a la instalación. Para
obtener más información acerca de estos modelos, vea la sección Recursos de este artículo.
Una vez instalados, los modelos previamente entrenados se consideran un detalle de implementación que tiene
funciones específicas de energía en las bibliotecas de MicrosoftML (R) y microsoftml (Python). No debe (y no
puede) ver, personalizar, ni volver a entrenar los modelos, ni puede tratarlos como un recurso independiente en
el código personalizado o emparejar otras funciones.
Para usar los modelos previamente entrenados, llame a las funciones que se enumeran en la tabla siguiente.

F UN C IÓ N DE P Y T H O N
F UN C IÓ N DE R ( M IC RO SO F T M L ) ( M IC RO SO F T M L ) USO

getSentiment get_sentiment Genera una puntuación de opinión


positiva-negativa sobre las entradas de
texto.

featurizeImage featurize_image Extrae información de texto de


entradas de archivo de imagen.

Prerrequisitos
Los algoritmos de aprendizaje automático son de cálculo intensivo. Se recomienda 16 GB de RAM para cargas
de trabajo de baja a moderada, incluida la finalización de tutoriales con todos los datos de ejemplo.
Debe tener derechos de administrador en el equipo y SQL Server para agregar modelos previamente
entrenados.
Los scripts externos deben estar habilitados y el servicio SQL Server LaunchPad debe estar en ejecución. Las
instrucciones de instalación proporcionan los pasos para habilitar y comprobar estas capacidades.
El paquete MicrosoftML R o el paquete microsoftml de Python contienen los modelos entrenados previamente.
SQL Server Machine Learning Services incluye las versiones de ambos lenguajes de la biblioteca de aprendizaje
automático, por lo que se cumple este requisito previo sin necesidad de realizar ninguna acción por su parte.
Dado que las bibliotecas están presentes, puede usar el script de PowerShell que se describe en este artículo
para agregar los modelos entrenados previamente a estas bibliotecas.
El paquete MicrosoftML R contiene los modelos entrenados previamente.
SQL Server R Services, que solo admite R, no incluye el paquete MicrosoftML de serie. Para agregar
MicrosoftML, debe realizar una actualización de componentes. Una ventaja de la actualización de componentes
es que puede agregar simultáneamente los modelos entrenados previamente, lo que hace que no sea necesario
ejecutar el script de PowerShell. Sin embargo, si ya ha realizado la actualización pero ha perdido la adición de
los modelos previamente entrenados la primera vez, puede ejecutar el script de PowerShell como se describe en
este artículo. Funciona en ambas versiones de SQL Server. Antes de hacerlo, confirme que la biblioteca
MicrosoftML existe en C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library .

Comprobación de si los modelos previamente entrenados están


instalados
Las rutas de acceso de instalación para los modelos R y Python son las siguientes:
Para R:
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\MicrosoftML\mxLibs\x64

Para Python:
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\Lib\site-
packages\microsoftml\mxLibs

Los nombres de archivo de modelo se enumeran a continuación:


AlexNet_Updated.model
ImageNet1K_mean.xml
pretrained.model
ResNet_101_Updated.model
ResNet_18_Updated.model
ResNet_50_Updated.model
Si los modelos ya están instalados, vaya al paso de validación para confirmar la disponibilidad.

Descargue el script de instalación.


Haga clic en https://aka.ms/mlm4sql para descargar el archivo Install-MLModels.ps1 .

Ejecución con privilegios elevados


1. Inicie PowerShell. En la barra de tareas, haga clic con el botón derecho en el icono del programa
PowerShell y seleccione Ejecutar como administrador .
2. Escriba una ruta de acceso completa al archivo de script de instalación e incluya el nombre de la instancia.
Asumiendo la carpeta descargas y una instancia predeterminada, el comando podría ser similar al
siguiente:

PS C:\WINDOWS\system32> C:\Users\<user-name>\Downloads\Install-MLModels.ps1 MSSQLSERVER

Salida
En una instancia predeterminada de SQL Server Machine Learning Services conectada a Internet con R y
Python, debería ver mensajes similares a los siguientes.
MSSQL14.MSSQLSERVER
Verifying R models [9.2.0.24]
Downloading R models [C:\Users\<user-name>\AppData\Local\Temp]
Installing R models [C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\]
Verifying Python models [9.2.0.24]
Installing Python models [C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\]
PS C:\WINDOWS\system32>

Comprobar la instalación
En primer lugar, busque los nuevos archivos en la carpeta mxlibs. A continuación, ejecute el código de
demostración para confirmar que los modelos están instalados y funcionan.
Pasos de comprobación de R
1. Inicie RGUI. EXE en C:\Archivos de programa\Microsoft SQL
Server\MSSQL14.MSSQLSERVER\R_SERVICES\bin\x64.
2. Pegue el siguiente script de R en el símbolo del sistema.

# Create the data


CustomerReviews <- data.frame(Review = c(
"I really did not like the taste of it",
"It was surprisingly quite good!",
"I will never ever ever go to that place again!!"),
stringsAsFactors = FALSE)

# Get the sentiment scores


sentimentScores <- rxFeaturize(data = CustomerReviews,
mlTransforms = getSentiment(vars = list(SentimentScore = "Review")))

# Let's translate the score to something more meaningful


sentimentScores$PredictedRating <- ifelse(sentimentScores$SentimentScore > 0.6,
"AWESOMENESS", "BLAH")

# Let's look at the results


sentimentScores

3. Pulse Entrar para ver las puntuaciones de opinión. El resultado debería ser el siguiente:

> sentimentScores
Review SentimentScore
1 I really did not like the taste of it 0.4617899
2 It was surprisingly quite good! 0.9601924
3 I will never ever ever go to that place again!! 0.3103435
PredictedRating
1 BLAH
2 AWESOMENESS
3 BLAH

Pasos de comprobación de Python


1. Inicie Python.exe en C:\Archivos de programa\Microsoft SQL
Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES.
2. Pegue el siguiente script de Python en el símbolo del sistema
import numpy
import pandas
from microsoftml import rx_logistic_regression, rx_featurize, rx_predict, get_sentiment

# Create the data


customer_reviews = pandas.DataFrame(data=dict(review=[
"I really did not like the taste of it",
"It was surprisingly quite good!",
"I will never ever ever go to that place again!!"]))

# Get the sentiment scores


sentiment_scores = rx_featurize(
data=customer_reviews,
ml_transforms=[get_sentiment(cols=dict(scores="review"))])

# Let's translate the score to something more meaningful


sentiment_scores["eval"] = sentiment_scores.scores.apply(
lambda score: "AWESOMENESS" if score > 0.6 else "BLAH")
print(sentiment_scores)

3. Presione Entrar para imprimir las puntuaciones. El resultado debería ser el siguiente:

>>> print(sentiment_scores)
review scores eval
0 I really did not like the taste of it 0.461790 BLAH
1 It was surprisingly quite good! 0.960192 AWESOMENESS
2 I will never ever ever go to that place again!! 0.310344 BLAH
>>>

NOTE
Si se produce un error en los scripts de demostración, compruebe primero la ubicación del archivo. En los sistemas que
tienen varias instancias de SQL Server, o para las instancias que se ejecutan en paralelo con versiones independientes, es
posible que el script de instalación no lea el entorno y coloque los archivos en la ubicación equivocada. Normalmente, la
copia manual de los archivos en la carpeta mxlib correcta corrige el problema.

Ejemplos de uso de modelos previamente entrenados


El siguiente vínculo incluye el código de ejemplo que invoca los modelos previamente entrenados.
Ejemplo de código: análisis de sentimiento mediante Caracterizador de texto

Investigación y recursos
Actualmente, los modelos que están disponibles son modelos de red neuronal profunda (DNN) para el análisis
de sentimiento y la clasificación de imágenes. Todos los modelos entrenados previamente se entrenaron
mediante el uso del kit de herramientas de red computacional de Microsoft o CNTK .
La configuración de cada red se basó en las siguientes implementaciones de referencia:
ResNet-18
ResNet-50
ResNet-101
AlexNet
Para obtener más información sobre los algoritmos que se usan en estos modelos de aprendizaje profundo y
cómo se implementan y se entrenan con CNTK, vea estos artículos:
El algoritmo de los investigadores de Microsoft marca un hito en el reto ImageNet
El kit de herramientas de red computacional de Microsoft ofrece un rendimiento de cálculo de
aprendizaje profundo distribuido más eficaz

Consulte también
SQL Server Machine Learning Services
Actualización de los componentes de R y Python en instancias de SQL Server
Paquete MicrosoftML para R
Paquete microsoftml para Python
Instalación de un entorno de ejecución
personalizado de Python para SQL Server
14/07/2021 • 15 minutes to read

Se aplica a: SQL Server 2019 (15.x)


Obtenga información sobre cómo instalar un entorno de ejecución personalizado de Python para ejecutar
scripts externos de Python con SQL Server en:
Windows
Ubuntu Linux
Red Hat Enterprise Linux (RHEL)
SUSE Linux Enterprise Server (SLES)
El entorno de ejecución personalizado puede ejecutar scripts de aprendizaje automático y usa Extensiones de
lenguaje de SQL Server.
Use la versión propia del entorno de ejecución de Python con SQL Server, en lugar de la versión del entorno de
ejecución predeterminada instalada con SQL Server Machine Learning Services.

Requisitos previos
Antes de instalar un entorno de ejecución personalizado de Python, instale lo siguiente:
Si usa una instancia de SQL Server existente, instale la actualización acumulativa (CU) 3 o posterior para
SQL Server 2019.

Instalación de Extensiones de lenguaje


NOTE
Si instaló Machine Learning Services en SQL Server 2019, las Extensiones de lenguaje ya están instaladas y puede omitir
este paso.

Siga los pasos que aparecen a continuación para instalar Extensiones de lenguaje de SQL Server, que se usa
para el entorno de ejecución personalizado de Python.
1. Inicie el asistente para la instalación de SQL Server 2019.
2. En la pestaña Instalación , seleccione Nueva instalación independiente de SQL Ser ver o agregar
características a una instalación existente .
3. En la página Selección de características , seleccione estas opciones:
Ser vicios de Motor de base de datos
Para usar las extensiones de lenguaje con SQL Server, debe instalar una instancia del motor de
base de datos. Puede usar una instancia nueva o una existente.
Machine Learning Ser vices y extensiones de lenguaje
Seleccione Machine Learning Ser vices y extensiones de lenguaje . No seleccione Python, ya
que va a instalar el entorno de ejecución de Python personalizado más adelante.

4. En la página Listo para instalar , confirme que estas selecciones se han realizado y haga clic en
Instalar .
Servicios de Motor de base de datos
Machine Learning Services y extensiones de lenguaje
5. Una vez que se completa la instalación, reinicie la máquina si se le pide hacerlo.

IMPORTANT
Si instala una instancia nueva de SQL Server 2019 con Extensiones de lenguaje, instale la actualización acumulativa (CU) 3
o posterior antes de ir al paso siguiente.

Instalar Python
La extensión del lenguaje Python que se usa para el entorno de ejecución de Python actualmente admite solo
Python 3.7. Si quiere usar una versión distinta de Python, siga la instrucción que aparece en el repositorio de
GitHub sobre Extensiones de lenguaje de Python para modificar y recompilar la extensión.
1. Descargue Python 3.7 para Windows y ejecute el programa de instalación en el servidor.
2. Seleccione Agregar Python 3.7 a la ruta de acceso y, después, Personalizar instalación .
3. En Características opcionales , deje los valores predeterminados y seleccione Siguiente .
4. Seleccione Instalar para todos los usuarios y anote la ubicación de instalación.

5. Seleccione Instalar .

Instalación de pandas
Instale el paquete pandas para Python desde un símbolo del sistema con privilegios elevados (Ejecutar como
administrador):

python.exe -m pip install pandas

Concesión de acceso a la carpeta de Python


Ejecute los comandos icacls siguientes desde un símbolo del sistema con privilegios elevados nuevo para
conceder acceso de LECTURA Y EJECUCIÓN a la ubicación de la instalación de Python al ser vicio
SQL Ser ver Launchpad y al SID S-1-15-2-1 (ALL_APPLICATION_PACKAGES ).
En los ejemplos siguientes se usa la ubicación de instalación de Python como C:\Program Files\Python37 . Si la
ubicación es diferente, cámbiela en el comando.
1. Conceda permisos al nombre de usuario del ser vicio SQL Ser ver Launchpad .

icacls "C:\Program Files\Python37" /grant "NT Service\MSSQLLAUNCHPAD":(OI)(CI)RX /T

En el caso de una instancia con nombre, el comando será


icacls "C:\Program Files\Python37" /grant "NT Service\MSSQLLAUNCHPAD$SQL01":(OI)(CI)RX /T para una
instancia denominada SQL01 .
2. Conceda permisos al SID S-1-15-2-1 .

icacls "C:\Program Files\Python37" /grant *S-1-15-2-1:(OI)(CI)RX /T

El comando anterior concede permisos al SID del equipo S-1-15-2-1 , que es equivalente a TODOS LOS
PAQUETES DE APLICACIONES en una versión en inglés de Windows. Como alternativa, puede usar
icacls "C:\Program Files\Python37" /grant "ALL APPLICATION PACKAGES":(OI)(CI)RX /T en una versión en
inglés de Windows.

Reinicio de SQL Server Launchpad


Siga estos pasos para reiniciar el servicio SQL Server Launchpad.
1. Abra el Administrador de configuración de SQL Server.
2. En Ser vicios de SQL Ser ver , haga clic con el botón derecho en SQL Ser ver Launchpad
(MSSQLSERVER) y seleccione Reiniciar . Si va a usar una instancia con nombre, se mostrará el nombre
de la instancia en lugar de (MSSQLSERVER) .

Registro de la extensión del lenguaje


Siga estos pasos para descargar y registrar la extensión del lenguaje Python, que se usa para el entorno de
ejecución personalizado de Python.
1. Descargue el archivo python-lang-extension-windows-release.zip del repositorio de GitHub de
Extensiones de lenguaje de SQL Server.
También puede usar la versión de depuración (python-lang-extension-windows-debug.zip ) en un
entorno de desarrollo o prueba. La versión de depuración proporciona información de registro detallada
para investigar los errores y no se recomienda para los entornos de producción.
2. Use Azure Data Studio para conectarse a la instancia de SQL Server y ejecute el comando de T-SQL
siguiente para registrar la extensión del lenguaje Python con CREAR UN LENGUAJE EXTERNO.
Modifique la ruta de acceso de esta instrucción para reflejar la ubicación del archivo ZIP descargado de la
extensión del lenguaje (python-lang-extension-windows-release.zip ) y la ubicación de la instalación
de Python ( C:\\Program Files\\Python3.7 ).

CREATE EXTERNAL LANGUAGE [myPython]


FROM (CONTENT = N'C:\path\to\python-lang-extension-windows-release.zip',
FILE_NAME = 'pythonextension.dll',
ENVIRONMENT_VARIABLES = N'{"PYTHONHOME": "C:\\Program Files\\Python3.7"}');
GO
Ejecute la instrucción para cada base de datos en la que quiera usar la extensión del lenguaje Python.

NOTE
Python es una palabra reservada y no se puede usar como nombre de un lenguaje externo nuevo. Use otro
nombre. Por ejemplo, la instrucción anterior usa myPython .

Requisitos previos
Antes de instalar un entorno de ejecución personalizado de Python, instale lo siguiente:
Instale SQL Server 2019 para Linux. Puede instalar SQL Server en Red Hat Enterprise Linux (RHEL),
SUSE Linux Enterprise Server (SLES) y Ubuntu. Para más información, consulte la guía de instalación de
SQL Server en Linux.
Instale la actualización acumulativa (CU) 3 o posterior para SQL Server 2019. Siga estos pasos:
1. Configure los repositorios para las actualizaciones acumulativas. Para más información, consulte
Configuración de repositorios para instalar y actualizar SQL Server en Linux.
2. Actualice el paquete mssql-ser ver a la actualización acumulativa más reciente. Para más
información, consulte la sección de actualización de SQL Server en la guía de instalación de
SQL Server en Linux.

Instalación de Extensiones de lenguaje


NOTE
Si instaló Machine Learning Services en SQL Server 2019, el paquete mssql-ser ver-extensibility para las Extensiones
de lenguaje ya está instalado y puede omitir este paso.

Ejecute los comandos siguientes para instalar Extensiones de lenguaje de SQL Server en Ubuntu Linux, que se
usa para el entorno de ejecución personalizado de Python.
1. Si es posible, ejecute este comando para actualizar los paquetes en el sistema antes de la instalación.

# Install as root or sudo


sudo apt-get update

2. Ubuntu podría no tener la opción de transporte de apt para https. Para realizar la instalación, ejecute este
comando.

# Install as root or sudo


apt-get install apt-transport-https

3. Instale mssql-ser ver-extensibility con este comando.

# Install as root or sudo


sudo apt-get install mssql-server-extensibility

Instalación de Python 3.7 y pandas


La extensión del lenguaje Python que se usa para el entorno de ejecución de Python actualmente admite solo
Python 3.7. Si quiere usar una versión distinta de Python, siga la instrucción que aparece en el repositorio de
GitHub sobre Extensiones de lenguaje de Python para modificar y recompilar la extensión.
1. Ejecute los comandos siguientes para instalar Python 3.7.

# Install python3.7 and the corresponding library:


sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.7 python3-pip libpython3.7

2. Ejecute el comando siguiente para instalar el paquete pandas

# Install pandas to /usr/lib:


sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages

Instalación personalizada de Python


NOTE
Si instaló Python 3.7 en la ubicación predeterminada de /usr/lib/python3.7 , puede omitir esta sección y pasar a la
sección Registro de la extensión del lenguaje.

Si compiló su propia versión de Python 3.7, use los comandos siguientes para que SQL Server sepa de su
instalación personalizada.
Incorporación de una variable de entorno
Primero, edite el servicio mssql-launchpadd para agregar la variable de entorno PYTHONHOME al archivo
/etc/systemd/system/mssql-launchpadd.service.d/override.conf .

1. Abra el archivo con systemctl.

sudo systemctl edit mssql-launchpadd

2. Inserte el texto siguiente en el archivo /etc/systemd/system/mssql-launchpadd.service.d/override.conf que


se abre. Establezca el valor de PYTHONHOME en la ruta de instalación personalizada de Python.

[Service]
Environment="PYTHONHOME=<path to the python3.7 lib>"

3. Guarde el archivo y cierre el editor.


A continuación, asegúrese de que se puede cargar libpython3.7m.so.1.0 .
1. Cree el archivo custom-python.conf en /etc/ld.so.conf.d .

sudo vi /etc/ld.so.conf.d/custom-python.conf

2. En el archivo que se abre, agregue la ruta de acceso a libpython3.7m.so.1.0 de la instalación


personalizada de Python.

<path to the python3.7 lib>


3. Guarde el archivo nuevo y cierre el editor.
4. Ejecute ldconfig y compruebe que se puede cargar libpython3.7m.so.1.0 ; para ello, ejecute los
comandos siguientes y compruebe que se pueden encontrar todas las bibliotecas dependientes.

sudo ldconfig
ldd <path to the python3.7 lib>/libpython3.7m.so.1.0

Concesión de acceso a la carpeta de Python


Establezca la opción datadirectories de la sección de extensibilidad del archivo /var/opt/mssql/mssql.conf en
la instalación personalizada de Python.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Reinicio de mssql-launchpadd
Ejecute el comando siguiente para reiniciar mssql-launchpadd .

sudo systemctl restart mssql-launchpadd

Registro de la extensión del lenguaje


Siga estos pasos para descargar y registrar la extensión del lenguaje Python, que se usa para el entorno de
ejecución personalizado de Python.
1. Descargue el archivo python-lang-extension-linux-release.zip del repositorio de GitHub de
Extensiones de lenguaje de SQL Server.
También puede usar la versión de depuración (python-lang-extension-linux-debug.zip ) en un
entorno de desarrollo o prueba. La versión de depuración proporciona información de registro detallada
para investigar los errores y no se recomienda para los entornos de producción.
2. Use Azure Data Studio para conectarse a la instancia de SQL Server y ejecute el comando de T-SQL
siguiente para registrar la extensión del lenguaje Python con CREAR UN LENGUAJE EXTERNO.
Modifique la ruta de acceso de esta instrucción para reflejar la ubicación del archivo ZIP descargado de la
extensión del lenguaje (python-lang-extension-linux-release.zip ).

CREATE EXTERNAL LANGUAGE [myPython]


FROM (CONTENT = N'/path/to/python-lang-extension-linux-release.zip', FILE_NAME =
'libPythonExtension.so.1.1');
GO

Ejecute la instrucción para cada base de datos en la que quiera usar la extensión del lenguaje Python.

NOTE
Python es una palabra reservada y no se puede usar como nombre de un lenguaje externo nuevo. Use otro
nombre. Por ejemplo, la instrucción anterior usa myPython .

Requisitos previos
Antes de instalar un entorno de ejecución personalizado de Python, instale lo siguiente:
Instale SQL Server 2019 para Linux. Puede instalar SQL Server en Red Hat Enterprise Linux (RHEL),
SUSE Linux Enterprise Server (SLES) y Ubuntu. Para más información, consulte la guía de instalación de
SQL Server en Linux.
Instale la actualización acumulativa (CU) 3 o posterior para SQL Server 2019. Siga estos pasos:
1. Configure los repositorios para las actualizaciones acumulativas. Para más información, consulte
Configuración de repositorios para instalar y actualizar SQL Server en Linux.
2. Actualice el paquete mssql-ser ver a la actualización acumulativa más reciente. Para más
información, consulte la sección de actualización de SQL Server en la guía de instalación de
SQL Server en Linux.

Instalación de Extensiones de lenguaje


NOTE
Si instaló Machine Learning Services en SQL Server 2019, el paquete mssql-ser ver-extensibility para las Extensiones
de lenguaje ya está instalado y puede omitir este paso.

Ejecute el comando siguiente para instalar Extensiones de lenguaje de SQL Server en Red Hat Enterprise Linux
(RHEL), que se usa para el entorno de ejecución personalizado de Python.

# Install as root or sudo


sudo yum install mssql-server-extensibility

Instalación de Python 3.7 y pandas


La extensión del lenguaje Python que se usa para el entorno de ejecución de Python actualmente admite solo
Python 3.7. Si quiere usar una versión distinta de Python, siga la instrucción que aparece en el repositorio de
GitHub sobre Extensiones de lenguaje de Python para modificar y recompilar la extensión.
1. Ejecute los comandos siguientes para instalar Python 3.7.

# Install python3.7 and the corresponding library:


yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel

cd /usr/src
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
tar xzf Python-3.7.9.tgz

cd Python-3.7.9
./configure --enable-optimizations --prefix=/usr
make altinstall

2. Ejecute el comando siguiente para instalar el paquete pandas

# Install pandas to /usr/lib:


sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages

Instalación personalizada de Python


NOTE
Si instaló Python 3.7 en la ubicación predeterminada de /usr/lib/python3.7 , puede omitir esta sección y pasar a la
sección Registro de la extensión del lenguaje.

Si compiló su propia versión de Python 3.7, use los comandos siguientes para que SQL Server sepa de su
instalación personalizada.
Incorporación de una variable de entorno
Primero, edite el servicio mssql-launchpadd para agregar la variable de entorno PYTHONHOME al archivo
/etc/systemd/system/mssql-launchpadd.service.d/override.conf .

1. Abra el archivo con systemctl.

sudo systemctl edit mssql-launchpadd

2. Inserte el texto siguiente en el archivo /etc/systemd/system/mssql-launchpadd.service.d/override.conf que


se abre. Establezca el valor de PYTHONHOME en la ruta de instalación personalizada de Python.

[Service]
Environment="PYTHONHOME=<path to the python3.7 lib>"

3. Guarde el archivo y cierre el editor.


A continuación, asegúrese de que se puede cargar libpython3.7m.so.1.0 .
1. Cree el archivo custom-python.conf en /etc/ld.so.conf.d .

sudo vi /etc/ld.so.conf.d/custom-python.conf

2. En el archivo que se abre, agregue la ruta de acceso a libpython3.7m.so.1.0 de la instalación


personalizada de Python.

<path to the python3.7 lib>

3. Guarde el archivo nuevo y cierre el editor.


4. Ejecute ldconfig y compruebe que se puede cargar libpython3.7m.so.1.0 ; para ello, ejecute los
comandos siguientes y compruebe que se pueden encontrar todas las bibliotecas dependientes.

sudo ldconfig
ldd <path to the python3.7 lib>/libpython3.7m.so.1.0

Concesión de acceso a la carpeta de Python


Establezca la opción datadirectories de la sección de extensibilidad del archivo /var/opt/mssql/mssql.conf en
la instalación personalizada de Python.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Reinicio de mssql-launchpadd
Ejecute el comando siguiente para reiniciar mssql-launchpadd .
sudo systemctl restart mssql-launchpadd

Registro de la extensión del lenguaje


Siga estos pasos para descargar y registrar la extensión del lenguaje Python, que se usa para el entorno de
ejecución personalizado de Python.
1. Descargue el archivo python-lang-extension-linux-release.zip del repositorio de GitHub de
Extensiones de lenguaje de SQL Server.
También puede usar la versión de depuración (python-lang-extension-linux-debug.zip ) en un
entorno de desarrollo o prueba. La versión de depuración proporciona información de registro detallada
para investigar los errores y no se recomienda para los entornos de producción.
2. Use Azure Data Studio para conectarse a la instancia de SQL Server y ejecute el comando de T-SQL
siguiente para registrar la extensión del lenguaje Python con CREAR UN LENGUAJE EXTERNO.
Modifique la ruta de acceso de esta instrucción para reflejar la ubicación del archivo ZIP descargado de la
extensión del lenguaje (python-lang-extension-linux-release.zip ).

CREATE EXTERNAL LANGUAGE [myPython]


FROM (CONTENT = N'/path/to/python-lang-extension-linux-release.zip', FILE_NAME =
'libPythonExtension.so.1.1');
GO

Ejecute la instrucción para cada base de datos en la que quiera usar la extensión del lenguaje Python.

NOTE
Python es una palabra reservada y no se puede usar como nombre de un lenguaje externo nuevo. Use otro
nombre. Por ejemplo, la instrucción anterior usa myPython .

Requisitos previos
Antes de instalar un entorno de ejecución personalizado de Python, instale lo siguiente:
Instale SQL Server 2019 para Linux. Puede instalar SQL Server en Red Hat Enterprise Linux (RHEL),
SUSE Linux Enterprise Server (SLES) y Ubuntu. Para más información, consulte la guía de instalación de
SQL Server en Linux.
Instale la actualización acumulativa (CU) 3 o posterior para SQL Server 2019. Siga estos pasos:
1. Configure los repositorios para las actualizaciones acumulativas. Para más información, consulte
Configuración de repositorios para instalar y actualizar SQL Server en Linux.
2. Actualice el paquete mssql-ser ver a la actualización acumulativa más reciente. Para más
información, consulte la sección de actualización de SQL Server en la guía de instalación de
SQL Server en Linux.

Instalación de Extensiones de lenguaje


NOTE
Si instaló Machine Learning Services en SQL Server 2019, el paquete mssql-ser ver-extensibility para las Extensiones
de lenguaje ya está instalado y puede omitir este paso.

Ejecute el comando siguiente para instalar Extensiones de lenguaje de SQL Server en SUSE Linux Enterprise
Server (SLES), que se usa para el entorno de ejecución personalizado de Python.

# Install as root or sudo


sudo zypper install mssql-server-extensibility

Instalación de Python 3.7 y pandas


La extensión del lenguaje Python que se usa para el entorno de ejecución de Python actualmente admite solo
Python 3.7. Si quiere usar una versión distinta de Python, siga la instrucción que aparece en el repositorio de
GitHub sobre Extensiones de lenguaje de Python para modificar y recompilar la extensión.
1. Instale Python 3.7 en el servidor.
2. Ejecute el comando siguiente para instalar el paquete pandas

# Install pandas to /usr/lib:


sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages

Instalación personalizada de Python


NOTE
Si instaló Python 3.7 en la ubicación predeterminada de /usr/lib/python3.7 , puede omitir esta sección y pasar a la
sección Registro de la extensión del lenguaje.

Si compiló su propia versión de Python 3.7, use los comandos siguientes para que SQL Server sepa de su
instalación personalizada.
Incorporación de una variable de entorno
Primero, edite el servicio mssql-launchpadd para agregar la variable de entorno PYTHONHOME al archivo
/etc/systemd/system/mssql-launchpadd.service.d/override.conf .

1. Abra el archivo con systemctl.

sudo systemctl edit mssql-launchpadd

2. Inserte el texto siguiente en el archivo /etc/systemd/system/mssql-launchpadd.service.d/override.conf que


se abre. Establezca el valor de PYTHONHOME en la ruta de instalación personalizada de Python.

[Service]
Environment="PYTHONHOME=<path to the python3.7 lib>"

3. Guarde el archivo y cierre el editor.


A continuación, asegúrese de que se puede cargar libpython3.7m.so.1.0 .
1. Cree el archivo custom-python.conf en /etc/ld.so.conf.d .

sudo vi /etc/ld.so.conf.d/custom-python.conf

2. En el archivo que se abre, agregue la ruta de acceso a libpython3.7m.so.1.0 de la instalación


personalizada de Python.

<path to the python3.7 lib>

3. Guarde el archivo nuevo y cierre el editor.


4. Ejecute ldconfig y compruebe que se puede cargar libpython3.7m.so.1.0 ; para ello, ejecute los
comandos siguientes y compruebe que se pueden encontrar todas las bibliotecas dependientes.

sudo ldconfig
ldd <path to the python3.7 lib>/libpython3.7m.so.1.0

Concesión de acceso a la carpeta de Python


Establezca la opción datadirectories de la sección de extensibilidad del archivo /var/opt/mssql/mssql.conf en
la instalación personalizada de Python.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Reinicio de mssql-launchpadd
Ejecute el comando siguiente para reiniciar mssql-launchpadd .

sudo systemctl restart mssql-launchpadd

Registro de la extensión del lenguaje


Siga estos pasos para descargar y registrar la extensión del lenguaje Python, que se usa para el entorno de
ejecución personalizado de Python.
1. Descargue el archivo python-lang-extension-linux-release.zip del repositorio de GitHub de
Extensiones de lenguaje de SQL Server.
También puede usar la versión de depuración (python-lang-extension-linux-debug.zip ) en un
entorno de desarrollo o prueba. La versión de depuración proporciona información de registro detallada
para investigar los errores y no se recomienda para los entornos de producción.
2. Use Azure Data Studio para conectarse a la instancia de SQL Server y ejecute el comando de T-SQL
siguiente para registrar la extensión del lenguaje Python con CREAR UN LENGUAJE EXTERNO.
Modifique la ruta de acceso de esta instrucción para reflejar la ubicación del archivo ZIP descargado de la
extensión del lenguaje (python-lang-extension-linux-release.zip ).

CREATE EXTERNAL LANGUAGE [myPython]


FROM (CONTENT = N'/path/to/python-lang-extension-linux-release.zip', FILE_NAME =
'libPythonExtension.so.1.1');
GO
Ejecute la instrucción para cada base de datos en la que quiera usar la extensión del lenguaje Python.

NOTE
Python es una palabra reservada y no se puede usar como nombre de un lenguaje externo nuevo. Use otro
nombre. Por ejemplo, la instrucción anterior usa myPython .

Habilitación de scripts externos


Puede ejecutar un script externo de Python con el procedimiento almacenado sp_execute_external script.
Si quiere habilitar los scripts externos, use Azure Data Studio para ejecutar la instrucción siguiente.

sp_configure 'external scripts enabled', 1;


RECONFIGURE WITH OVERRIDE;

Comprobación de la instalación
Use el script de SQL siguiente para comprobar la instalación y la funcionalidad del entorno de ejecución
personalizado de Python.

EXEC sp_execute_external_script
@language =N'myPython',
@script=N'
import sys
print(sys.path)
print(sys.version)
print(sys.executable)'

Pasos siguientes
Instalación de un entorno de ejecución personalizado de R para SQL Server
Marco de extensibilidad en SQL Server
Introducción a las extensiones de lenguaje
Instalación de un entorno de ejecución
personalizado de R para SQL Server
14/07/2021 • 17 minutes to read

Se aplica a: SQL Server 2019 (15.x)


Obtenga información sobre cómo instalar un entorno de ejecución personalizado de R para ejecutar scripts de R
externos con SQL Server en:
Windows
Ubuntu Linux
Red Hat Enterprise Linux (RHEL)
Versión 12 de SUSE Linux Enterprise Server (SLES)
El entorno de ejecución personalizado puede ejecutar scripts de aprendizaje automático y usa Extensiones de
lenguaje de SQL Server.
Use la versión propia del entorno de ejecución de R con SQL Server, en lugar de la versión del entorno de
ejecución predeterminada instalada con SQL Server Machine Learning Services.

Requisitos previos
Antes de instalar un entorno de ejecución personalizado de R, instale lo siguiente:
Si usa una instancia de SQL Server existente, instale la actualización acumulativa (CU) 3 o posterior para
SQL Server 2019.

Instalación de Extensiones de lenguaje


NOTE
Si instaló Machine Learning Services en SQL Server 2019, las Extensiones de lenguaje ya están instaladas y puede omitir
este paso.

Siga los pasos que aparecen a continuación para instalar Extensiones de lenguaje de SQL Server, que se usa
para el entorno de ejecución personalizado de R.
1. Inicie el asistente para la instalación de SQL Server 2019.
2. En la pestaña Instalación , seleccione Nueva instalación independiente de SQL Ser ver o agregar
características a una instalación existente .
3. En la página Selección de características , seleccione estas opciones:
Ser vicios de Motor de base de datos
Para usar las extensiones de lenguaje con SQL Server, debe instalar una instancia del motor de
base de datos. Puede usar una instancia nueva o una existente.
Machine Learning Ser vices y extensiones de lenguaje
Seleccione Machine Learning Ser vices y extensiones de lenguaje . No seleccione R, ya que
va a instalar el entorno de ejecución de R personalizado más adelante.

4. En la página Listo para instalar , confirme que estas selecciones se han realizado y haga clic en
Instalar .
Servicios de Motor de base de datos
Machine Learning Services y extensiones de lenguaje
5. Una vez que se completa la instalación, reinicie la máquina si se le pide hacerlo.

IMPORTANT
Si instala una instancia nueva de SQL Server 2019 con Extensiones de lenguaje, instale la actualización acumulativa (CU) 3
o posterior antes de ir al paso siguiente.

Instalar R
Descargue e instale la versión de R que utilizará como el entorno de ejecución personalizado. Se admite la
versión 3.3 o posterior de R.
1. Descargue la versión 3.3 o posterior de R.
2. Ejecute el programa de instalación de R.
3. Anote la ruta de acceso donde se instala R. Por ejemplo, en este artículo es C:\Program Files\R\R-4.0.3 .
Actualización de las variables de entorno del sistema
Siga estos pasos para modificar las variables de entorno del sistema PATH .
1. En el cuadro de búsqueda de Windows, busque Editar las variables de entorno del sistema y ábralo.
2. En Opciones avanzadas , seleccione Variables de entorno .
3. Modifique la variable de entorno del sistema PATH .
Seleccione PATH y haga clic en Editar .
Seleccione Nueva y agregue la ruta de acceso a la carpeta \bin\x64 en la ruta de instalación de R. Por
ejemplo, C:\Program Files\R\R-4.0.3\bin\x64 .

Instalación del paquete Rcpp


Siga estos pasos para instalar el paquete Rcpp .
1. Inicie un símbolo del sistema con privilegios elevados (Ejecutar como administrador).
2. Inicie R desde el símbolo del sistema. Ejecute \bin\R.exe en la carpeta de la ruta de instalación de R. Por
ejemplo, C:\Program Files\R\R-4.0.3\bin\R.exe .

"C:\Program Files\R\R-4.0.3\bin\R.exe"

3. Ejecute el script siguiente para instalar el paquete Rcpp en la carpeta \library de la ruta de instalación
de R. Por ejemplo, C:\Program Files\R\R-4.0.3\library .

install.packages("Rcpp", lib="C:\\Program Files\\R\\R-4.0.3\\library");

Concesión de acceso a la carpeta de R


NOTE
Si ha instalado R en la ubicación predeterminada C:\Program Files\R\R-version (por ejemplo,
C:\Program Files\R\R-4.0.3 ), puede omitir este paso.

Ejecute los comandos icacls siguientes desde un nuevo símbolo del sistema con privilegios elevados para
conceder acceso de LECTURA Y EJECUCIÓN al nombre de usuario del ser vicio SQL Ser ver Launchpad
y al SID S-1-15-2-1 (ALL APPLICATION PACKAGES ). El nombre de usuario del servicio Launchpad tiene el
formato NT Service\MSSQLLAUNCHPAD$INSTANCENAME , donde INSTANCENAME es el nombre de la instancia de
SQL Server.
Estos comandos concederán acceso de forma recursiva a todos los archivos y carpetas en la ruta de acceso de
directorio especificada.
1. Conceda permisos al nombre de usuario del ser vicio SQL Ser ver Launchpad para la ruta de
instalación de R. Por ejemplo, C:\Program Files\R\R-4.0.3 .

icacls "C:\Program Files\R\R-4.0.3" /grant "NT Service\MSSQLLAUNCHPAD":(OI)(CI)RX /T

En el caso de una instancia con nombre, el comando será


icacls "C:\Program Files\R\R-4.0.3" /grant "NT Service\MSSQLLAUNCHPAD$SQL01":(OI)(CI)RX /T para una
instancia denominada SQL01 .
2. Conceda permisos para SID S-1-15-2-1 a la ruta de instalación de R. Por ejemplo,
C:\Program Files\R\R-4.0.3 .

icacls "C:\Program Files\R\R-4.0.3" /grant *S-1-15-2-1:(OI)(CI)RX /T

El comando anterior concede permisos al SID del equipo S-1-15-2-1 , que es equivalente a TODOS LOS
PAQUETES DE APLICACIONES en una versión en inglés de Windows. Como alternativa, puede usar
icacls "C:\Program Files\R\R-4.0.3" /grant "ALL APPLICATION PACKAGES":(OI)(CI)RX /T en una versión en
inglés de Windows.

Reinicio de SQL Server Launchpad


Siga estos pasos para reiniciar el servicio SQL Server Launchpad.
1. Abra el Administrador de configuración de SQL Server.
2. En Ser vicios de SQL Ser ver , haga clic con el botón derecho en SQL Ser ver Launchpad
(MSSQLSERVER) y seleccione Reiniciar . Si usa una instancia con nombre, se mostrará el nombre de la
instancia en lugar de (MSSQLSERVER) .

Registro de la extensión del lenguaje


Siga estos pasos para descargar y registrar la extensión del lenguaje R, que se usa para el entorno de ejecución
personalizado de R.
1. Descargue el archivo R-lang-extension-windows-release.zip del repositorio de GitHub de
Extensiones de lenguaje de SQL Server.
También puede usar la versión de depuración (R-lang-extension-windows-debug.zip ) en un entorno
de desarrollo o prueba. La versión de depuración proporciona información de registro detallada para
investigar los errores y no se recomienda para los entornos de producción.
2. Use Azure Data Studio para conectarse a la instancia de SQL Server y ejecute el comando de T-SQL
siguiente para registrar la extensión del lenguaje R con CREATE EXTERNAL LANGUAGE.
Modifique la ruta de acceso de esta instrucción para reflejar la ubicación del archivo ZIP descargado de la
extensión del lenguaje (R-lang-extension-windows-release.zip ) y la ubicación de la instalación de R (
C:\\Program Files\\R\\R-4.0.3 ).

CREATE EXTERNAL LANGUAGE [myR]


FROM (CONTENT = N'C:\path\to\R-lang-extension-windows-release.zip',
FILE_NAME = 'libRExtension.dll',
ENVIRONMENT_VARIABLES = N'{"R_HOME": "C:\\Program Files\\R\\R-4.0.3"}'););
GO

Ejecute la instrucción para cada base de datos en la que quiera usar la extensión del lenguaje R.

NOTE
R es una palabra reservada y no se puede usar como nombre de un lenguaje externo nuevo. Use otro nombre.
Por ejemplo, en la instrucción anterior se usa myR.

Requisitos previos
Antes de instalar un entorno de ejecución personalizado de R, instale lo siguiente:
Instale SQL Server 2019 para Linux. Puede instalar SQL Server en Red Hat Enterprise Linux (RHEL), la
versión 12 de SUSE Linux Enterprise Server (SLES) y Ubuntu. Para más información, consulte la guía de
instalación de SQL Server en Linux.
Instale la actualización acumulativa (CU) 3 o posterior para SQL Server 2019. Siga estos pasos:
1. Configure los repositorios para las actualizaciones acumulativas. Para más información, consulte
Configuración de repositorios para instalar y actualizar SQL Server en Linux.
2. Actualice el paquete mssql-ser ver a la actualización acumulativa más reciente. Para más
información, consulte la sección de actualización de SQL Server en la guía de instalación de
SQL Server en Linux.

Instalación de Extensiones de lenguaje


NOTE
Si instaló Machine Learning Services en SQL Server 2019, el paquete mssql-ser ver-extensibility para las Extensiones
de lenguaje ya está instalado y puede omitir este paso.

Ejecute los comandos siguientes para instalar Extensiones de lenguaje de SQL Server en Ubuntu Linux, que se
usa para el entorno de ejecución personalizado de R.
1. Si es posible, ejecute este comando para actualizar los paquetes en el sistema antes de la instalación.

# Install as root or sudo


sudo apt-get update

2. Instale mssql-ser ver-extensibility con este comando.


# Install as root or sudo
sudo apt-get install mssql-server-extensibility

Instalar R
1. Si ha instalado Machine Learning Services, R ya está instalado en /opt/microsoft/ropen/3.5.2/lib64/R . Si
quiere seguir usando esta ruta de acceso como valor de R_HOME, puede omitir este paso.
Si desea usar otro entorno de ejecución de R, primero debe eliminar microsoft-r-open-mro antes de
continuar con la instalación de una nueva versión.

sudo apt remove microsoft-r-open-mro-3.5.2

2. Instale R (3.3 o una versión posterior) para Ubuntu. De forma predeterminada, R se instala en /usr/lib/R .
Esta ruta de acceso es R_HOME . Si instala R en otra ubicación, anote esa ruta de acceso como R_HOME .
A continuación se muestran instrucciones de ejemplo para Ubuntu. Cambie la dirección URL del
repositorio siguiente para su versión de R.

export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get --no-install-recommends -y install curl zip unzip apt-transport-https libstdc++6

# Add R CRAN repository. This repository works for R 4.0.x.


#
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
E298A3A825C0D65DFD57CBB651716619E084DAB9
sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu xenial-cran40/'
sudo apt-get update

# Install R runtime.
#
sudo apt-get -y install r-base-core

Instalación personalizada de R
NOTE
Si ha instalado R en la ubicación predeterminada de /usr/lib/R, puede omitir esta sección y pasar a Instalación del
paquete Rcpp.

Actualización de las variables de entorno


En primer lugar, edite el servicio mssql-launchpadd para agregar la variable de entorno R_HOME al archivo
/etc/systemd/system/mssql-launchpadd.service.d/override.conf .

1. Abra el archivo con systemctl.

sudo systemctl edit mssql-launchpadd

2. Inserte el texto siguiente en el archivo /etc/systemd/system/mssql-launchpadd.service.d/override.conf que


se abre. Establezca el valor de R_HOME en la ruta de instalación personalizada de R.
[Service]
Environment="R_HOME=<path to R>"

3. Guarde y cierre el archivo.


A continuación, asegúrese de que se puede cargar libR.so .
1. Cree el archivo custom-r.conf en /etc/ld.so.conf.d .

sudo vi /etc/ld.so.conf.d/custom-r.conf

2. En el archivo que se abre, agregue la ruta de acceso a libR.so desde la instalación personalizada de R.

<path to the R lib>

3. Guarde el archivo nuevo y cierre el editor.


4. Ejecute ldconfig y compruebe que se puede cargar libR.so ; para ello, ejecute el comando siguiente y
compruebe que se pueden encontrar todas las bibliotecas dependientes.

sudo ldconfig
ldd <path to the R lib>/libR.so

Concesión de acceso a la carpeta de instalación personalizada de R


Establezca la opción datadirectories de la sección de extensibilidad del archivo /var/opt/mssql/mssql.conf en
la instalación personalizada de R.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

Reinicio del servicio mssql-launchpadd


Ejecute el comando siguiente para reiniciar mssql-launchpadd .

sudo systemctl restart mssql-launchpadd

Instalación del paquete Rcpp


Siga estos pasos para instalar el paquete Rcpp .
1. Inicie R desde un shell:

sudo ${R_HOME}/bin/R

2. Ejecute el script siguiente para instalar el paquete Rcpp en la carpeta ${R_HOME}\library.

install.packages("Rcpp", lib = "${R_HOME}/library");

Registro de la extensión del lenguaje


Siga estos pasos para descargar y registrar la extensión del lenguaje R, que se usa para el entorno de ejecución
personalizado de R.
1. Descargue el archivo R-lang-extension-linux-release.zip del repositorio de GitHub de Extensiones de
lenguaje de SQL Server.
También puede usar la versión de depuración (R-lang-extension-linux-debug.zip ) en un entorno de
desarrollo o prueba. La versión de depuración proporciona información de registro detallada para
investigar los errores y no se recomienda para los entornos de producción.
2. Use Azure Data Studio para conectarse a la instancia de SQL Server y ejecute el comando de T-SQL
siguiente para registrar la extensión del lenguaje R con CREATE EXTERNAL LANGUAGE.
Modifique la ruta de acceso de esta instrucción para reflejar la ubicación del archivo ZIP descargado de la
extensión del lenguaje (R-lang-extension-linux-release.zip ).

CREATE EXTERNAL LANGUAGE [myR]


FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
GO

Ejecute la instrucción para cada base de datos en la que quiera usar la extensión del lenguaje R.

NOTE
R es una palabra reservada y no se puede usar como nombre de un lenguaje externo nuevo. Use otro nombre.
Por ejemplo, en la instrucción anterior se usa myR.

Requisitos previos
Antes de instalar un entorno de ejecución personalizado de R, instale lo siguiente:
Instale SQL Server 2019 para Linux. Puede instalar SQL Server en Red Hat Enterprise Linux (RHEL), la
versión 12 de SUSE Linux Enterprise Server (SLES) y Ubuntu. Para más información, consulte la guía de
instalación de SQL Server en Linux.
Instale la actualización acumulativa (CU) 3 o posterior para SQL Server 2019. Siga estos pasos:
1. Configure los repositorios para las actualizaciones acumulativas. Para más información, consulte
Configuración de repositorios para instalar y actualizar SQL Server en Linux.
2. Actualice el paquete mssql-ser ver a la actualización acumulativa más reciente. Para más
información, consulte la sección de actualización de SQL Server en la guía de instalación de
SQL Server en Linux.
RExtension requiere GLIBCXX_3.4.20. Asegúrese de que la versión de libstdc++.so.6 en la instalación de
Red Hat Enterprise Linux (RHEL) lo proporciona.

Instalación de Extensiones de lenguaje


NOTE
Si instaló Machine Learning Services en SQL Server 2019, el paquete mssql-ser ver-extensibility para las Extensiones
de lenguaje ya está instalado y puede omitir este paso.

Ejecute el comando siguiente para instalar Extensiones de lenguaje de SQL Server en Red Hat Enterprise Linux
(RHEL), que se usa para el entorno de ejecución personalizado de R.
# Install as root or sudo
sudo yum install mssql-server-extensibility

Instalar R
1. Si ha instalado Machine Learning Services, R ya está instalado en /opt/microsoft/ropen/3.5.2/lib64/R . Si
quiere seguir usando esta ruta de acceso como valor de R_HOME, puede omitir este paso.
Si desea usar otro entorno de ejecución de R, primero debe eliminar microsoft-r-open-mro antes de
continuar con la instalación de una nueva versión.

sudo yum erase microsoft-r-open-mro-3.5.2

2. Instale R (3.3 o una versión posterior) para Red Hat Enterprise Linux (RHEL). De forma predeterminada, R
se instala en /usr/lib64/R . Esta ruta de acceso es R_HOME . Si instala R en otra ubicación, anote esa ruta
de acceso como R_HOME .

sudo yum install -y R

Instalación personalizada de R
NOTE
Si ha instalado R en la ubicación predeterminada de /usr/lib/R, puede omitir esta sección y pasar a Instalación del
paquete Rcpp.

Actualización de las variables de entorno


En primer lugar, edite el servicio mssql-launchpadd para agregar la variable de entorno R_HOME al archivo
/etc/systemd/system/mssql-launchpadd.service.d/override.conf .

1. Abra el archivo con systemctl.

sudo systemctl edit mssql-launchpadd

2. Inserte el texto siguiente en el archivo /etc/systemd/system/mssql-launchpadd.service.d/override.conf que


se abre. Establezca el valor de R_HOME en la ruta de instalación personalizada de R.

[Service]
Environment="R_HOME=<path to R>"

3. Guarde y cierre el archivo.


A continuación, asegúrese de que se puede cargar libR.so .
1. Cree el archivo custom-r.conf en /etc/ld.so.conf.d .

sudo vi /etc/ld.so.conf.d/custom-r.conf

2. En el archivo que se abre, agregue la ruta de acceso a libR.so desde la instalación personalizada de R.
<path to the R lib>

3. Guarde el archivo nuevo y cierre el editor.


4. Ejecute ldconfig y compruebe que se puede cargar libR.so ; para ello, ejecute el comando siguiente y
compruebe que se pueden encontrar todas las bibliotecas dependientes.

sudo ldconfig
ldd <path to the R lib>/libR.so

Concesión de acceso a la carpeta de instalación personalizada de R


Establezca la opción datadirectories de la sección de extensibilidad del archivo /var/opt/mssql/mssql.conf en
la instalación personalizada de R.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

Reinicio del servicio mssql-launchpadd


Ejecute el comando siguiente para reiniciar mssql-launchpadd .

sudo systemctl restart mssql-launchpadd

Instalación del paquete Rcpp


Siga estos pasos para instalar el paquete Rcpp .
1. Inicie R desde un shell:

sudo ${R_HOME}/bin/R

2. Ejecute el script siguiente para instalar el paquete Rcpp en la carpeta ${R_HOME}\library.

install.packages("Rcpp", lib = "${R_HOME}/library");

Registro de la extensión del lenguaje


Siga estos pasos para descargar y registrar la extensión del lenguaje R, que se usa para el entorno de ejecución
personalizado de R.
1. Descargue el archivo R-lang-extension-linux-release.zip del repositorio de GitHub de Extensiones de
lenguaje de SQL Server.
También puede usar la versión de depuración (R-lang-extension-linux-debug.zip ) en un entorno de
desarrollo o prueba. La versión de depuración proporciona información de registro detallada para
investigar los errores y no se recomienda para los entornos de producción.
2. Use Azure Data Studio para conectarse a la instancia de SQL Server y ejecute el comando de T-SQL
siguiente para registrar la extensión del lenguaje R con CREATE EXTERNAL LANGUAGE.
Modifique la ruta de acceso de esta instrucción para reflejar la ubicación del archivo ZIP descargado de la
extensión del lenguaje (R-lang-extension-linux-release.zip ).
CREATE EXTERNAL LANGUAGE [myR]
FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
GO

Ejecute la instrucción para cada base de datos en la que quiera usar la extensión del lenguaje R.

NOTE
R es una palabra reservada y no se puede usar como nombre de un lenguaje externo nuevo. Use otro nombre.
Por ejemplo, en la instrucción anterior se usa myR.

Requisitos previos
Antes de instalar un entorno de ejecución personalizado de R, instale lo siguiente:
Instale SQL Server 2019 para Linux. Puede instalar SQL Server en Red Hat Enterprise Linux (RHEL), la
versión 12 de SUSE Linux Enterprise Server (SLES) y Ubuntu. Para más información, consulte la guía de
instalación de SQL Server en Linux.
Instale la actualización acumulativa (CU) 3 o posterior para SQL Server 2019. Siga estos pasos:
1. Configure los repositorios para las actualizaciones acumulativas. Para más información, consulte
Configuración de repositorios para instalar y actualizar SQL Server en Linux.
2. Actualice el paquete mssql-ser ver a la actualización acumulativa más reciente. Para más
información, consulte la sección de actualización de SQL Server en la guía de instalación de
SQL Server en Linux.

Instalación de Extensiones de lenguaje


NOTE
Si instaló Machine Learning Services en SQL Server 2019, el paquete mssql-ser ver-extensibility para las Extensiones
de lenguaje ya está instalado y puede omitir este paso.

Ejecute el comando siguiente para instalar Extensiones de lenguaje de SQL Server en SUSE Linux Enterprise
Server (SLES), que se usa para el entorno de ejecución personalizado de R.

# Install as root or sudo


sudo zypper install mssql-server-extensibility

Instalar R
1. Si ha instalado Machine Learning Services, R ya está instalado en /opt/microsoft/ropen/3.5.2/lib64/R . Si
quiere seguir usando esta ruta de acceso como valor de R_HOME, puede omitir este paso.
Si desea usar otro entorno de ejecución de R, primero debe eliminar microsoft-r-open-mro antes de
continuar con la instalación de una nueva versión.

sudo zypper remove microsoft-r-open-mro-3.4.4

2. Instale R (3.3 o una versión posterior) para SUSE Linux Enterprise Server (SLES). De forma
predeterminada, R se instala en /usr/lib64/R . Esta ruta de acceso es R_HOME . Si instala R en otra
ubicación, anote esa ruta de acceso como R_HOME .
Para instalar R, siga estos pasos:

sudo zypper ar -f
http://download.opensuse.org/repositories/devel:/languages:/R:/patched/openSUSE_12.3/ R-patched
sudo zypper --gpg-auto-import-keys ref
sudo zypper install R-core-libs R-core R-core-doc R-patched

Puede omitir las advertencias de R-tcltk-3.6.1 , a menos que necesite este paquete.

Instalación de gcc-c++
Instale gcc-c++ en SUSE Linux Enterprise Server (SLES). Se usa para Rcpp , que se instala más adelante.

sudo zypper install gcc-c++

Instalación personalizada de R
NOTE
Si ha instalado R en la ubicación predeterminada de /usr/lib/R, puede omitir esta sección y pasar a Instalación del
paquete Rcpp.

Actualización de las variables de entorno


En primer lugar, edite el servicio mssql-launchpadd para agregar la variable de entorno R_HOME al archivo
/etc/systemd/system/mssql-launchpadd.service.d/override.conf .

1. Abra el archivo con systemctl.

sudo systemctl edit mssql-launchpadd

2. Inserte el texto siguiente en el archivo /etc/systemd/system/mssql-launchpadd.service.d/override.conf que


se abre. Establezca el valor de R_HOME en la ruta de instalación personalizada de R.

[Service]
Environment="R_HOME=<path to R>"

3. Guarde y cierre el archivo.


A continuación, asegúrese de que se puede cargar libR.so .
1. Cree el archivo custom-r.conf en /etc/ld.so.conf.d .

sudo vi /etc/ld.so.conf.d/custom-r.conf

2. En el archivo que se abre, agregue la ruta de acceso a libR.so desde la instalación personalizada de R.

<path to the R lib>


3. Guarde el archivo nuevo y cierre el editor.
4. Ejecute ldconfig y compruebe que se puede cargar libR.so ; para ello, ejecute el comando siguiente y
compruebe que se pueden encontrar todas las bibliotecas dependientes.

sudo ldconfig
ldd <path to the R lib>/libR.so

Concesión de acceso a la carpeta de instalación personalizada de R


Establezca la opción datadirectories de la sección de extensibilidad del archivo /var/opt/mssql/mssql.conf en
la instalación personalizada de R.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

Reinicio del servicio mssql-launchpadd


Ejecute el comando siguiente para reiniciar mssql-launchpadd .

sudo systemctl restart mssql-launchpadd

Instalación del paquete Rcpp


Siga estos pasos para instalar el paquete Rcpp .
1. Inicie R desde un shell:

sudo ${R_HOME}/bin/R

2. Ejecute el script siguiente para instalar el paquete Rcpp en la carpeta ${R_HOME}\library.

install.packages("Rcpp", lib = "${R_HOME}/library");

Registro de la extensión del lenguaje


Siga estos pasos para descargar y registrar la extensión del lenguaje R, que se usa para el entorno de ejecución
personalizado de R.
1. Descargue el archivo R-lang-extension-linux-release.zip del repositorio de GitHub de Extensiones de
lenguaje de SQL Server.
También puede usar la versión de depuración (R-lang-extension-linux-debug.zip ) en un entorno de
desarrollo o prueba. La versión de depuración proporciona información de registro detallada para
investigar los errores y no se recomienda para los entornos de producción.
2. Use Azure Data Studio para conectarse a la instancia de SQL Server y ejecute el comando de T-SQL
siguiente para registrar la extensión del lenguaje R con CREATE EXTERNAL LANGUAGE.
Modifique la ruta de acceso de esta instrucción para reflejar la ubicación del archivo ZIP descargado de la
extensión del lenguaje (R-lang-extension-linux-release.zip ).
CREATE EXTERNAL LANGUAGE [myR]
FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
GO

Ejecute la instrucción para cada base de datos en la que quiera usar la extensión del lenguaje R.

NOTE
R es una palabra reservada y no se puede usar como nombre de un lenguaje externo nuevo. Use otro nombre.
Por ejemplo, en la instrucción anterior se usa myR.

Habilitación de scripts externos


Puede ejecutar un script externo de R con el procedimiento almacenado sp_execute_external_script.
Si quiere habilitar los scripts externos, use Azure Data Studio para ejecutar la instrucción siguiente.

sp_configure 'external scripts enabled', 1;


RECONFIGURE WITH OVERRIDE;

Comprobación de la instalación
Use el script de SQL siguiente para comprobar la instalación y la funcionalidad del runtime personalizado de
Python.

EXEC sp_execute_external_script
@language =N'myR',
@script=N'
print(R.home());
print(file.path(R.home("bin"), "R"));
print(R.version);
print("Hello RExtension!");'

Problemas conocidos
Si usa el entorno de ejecución de R que se proporciona como parte de SQL Server Machine Learning Services
estableciendo R_HOME en C:\Program Files\Microsoft SQL Server\MSSQL15.<INSTANCE_NAME>\R_SERVICES al registrar
la extensión de lenguaje, es posible que se encuentre con el siguiente error al ejecutar cualquier script de R
personalizado externo con sp_execute_external_script.
Error: cons memory exhausted (limit reached?) (Error: se ha agotado la memoria de la operación "cons" [¿se ha
llegado al límite?])
Para solucionar este problema:
1. Establezca la variable de entorno R_NSIZE que indica el número de objetos de tamaño fijo ( cons cells ) en
un valor razonable, por ejemplo, 200000 .
2. Reinicie el servicio Launchpad y vuelva a intentar la ejecución del script.

Problemas conocidos
Si libstdc++.so.6 no es la versión correcta, verá este error:
Exthost: Load extension failed /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by
/home/mssql_satellite/externallanguagessandboxpath/libRExtension.so.1.1) (Exthost: Error al cargar la extensión
/lib64/libstdc++.so.6: no se encontró la versión "GLIBCXX_3.4.20" (necesaria para
/home/mssql_satellite/externallanguagessandboxpath/libRExtension.so.1.1))

Pasos siguientes
Instalación de un entorno de ejecución personalizado de Python para SQL Server
Marco de extensibilidad en SQL Server
Introducción a las extensiones de lenguaje
Cambio de la versión predeterminada del entorno
de ejecución del lenguaje R o Python
14/07/2021 • 5 minutes to read

Se aplica a: SQL Server 2016 (13.x) SQL Server 2017 (14.x)


En este artículo se describe cómo cambiar la versión predeterminada de R o Python usada en SQL Server 2016
R Services o SQL Server 2017 Machine Learning Services.
A continuación se enumeran las versiones del entorno de ejecución de R y Python que se incluyen en las
distintas versiones de SQL Server.

VERSIÓ N DEL
VERSIO N ES DEL EN TO RN O DE
VERSIÓ N DE SQ L A C T UA L IZ A C IÓ N EN TO RN O DE E JEC UC IÓ N DE
SERVER SERVIC IO A C UM UL A DA E JEC UC IÓ N DE R PYT H ON

SQL Server 2016 R Services RTM - SP2 CU13 3.2.2 No disponible

SQL Server 2016 R Services SP2 CU14 y 3.2.2 y 3.5.2 No disponible


versiones posteriores

SQL Server 2017 Machine Learning RTM - CU21 3.3.3 3.5.2


Services

SQL Server 2017 Machine Learning CU22 y versiones 3.3.3 y 3.5.2 3.5.2 y 3.7.2
Services posteriores

Requisitos previos
Debe instalar una actualización acumulativa (CU) para cambiar la versión predeterminada del entorno de
ejecución del lenguaje R o Python:
SQL Ser ver 2016: actualización acumulativa (CU) 14 de Service Pack (SP) 2 o posterior
SQL Ser ver 2017: actualización acumulativa (CU) 22 o posterior
Para descargar la actualización acumulativa más reciente, consulte las últimas actualizaciones de
Microsoft SQL Server.

NOTE
Si integra la actualización acumulativa con una nueva instalación de SQL Server, solo se instalarán las versiones más
recientes del entorno de ejecución de R y Python.

Cambio de la versión del entorno de ejecución de R


Si ha instalado una de las actualizaciones acumulativas anteriores para SQL Server 2016 o 2017, puede tener
varias versiones de R en una instancia de SQL. Cada versión se encuentra en una subcarpeta de la carpeta de la
instancia con el nombre R_SERVICES. <major> . <minor> (es posible que la carpeta de la instalación original no
tenga un número de versión anexado al nombre de la carpeta).
Si instala una CU que contiene R 3.5, la nueva carpeta R_SERVICES es:
SQL Server 2016: C:\Program Files\Microsoft SQL Server\MSSQL13.<INSTANCE_NAME>\R_SERVICES.3.5
SQL Server 2017: C:\Program Files\Microsoft SQL Server\MSSQL14.<INSTANCE_NAME>\R_SERVICES.3.5

Cada instancia de SQL usa una de estas versiones como versión predeterminada de R. Puede cambiar la versión
predeterminada mediante la utilidad de línea de comandos RegisterRext.exe . La utilidad se encuentra en la
carpeta R en cada instancia de SQL:
<Ruta de acceso de instancia de SQL> \R_SERVICES.n.n\library\RevoScaleR\rxLibs\x64\RegisterRext.exe

NOTE
La funcionalidad descrita en este artículo solo está disponible con la copia de RegisterRext.exe incluida en las CU de
SQL. No use la copia incluida con la instalación de SQL original.

Para cambiar la versión del entorno de ejecución de R, pase los siguientes argumentos de la línea de comandos
a RegisterRext.exe :
/configure -obligatorio, especifica que está configurando la versión predeterminada de R.
/instance: <nombre de instancia> : opcional, la instancia de que desea configurar. Si no se especifica, se
configura la instancia predeterminada.
/rhome: <Ruta de acceso a la carpeta R_SERVICES[n.n]> : opcional, ruta de acceso a la carpeta de la
versión del entorno de ejecución que desea establecer como la versión predeterminada de R.
Si no especifica /rhome, la ruta de acceso configurada es la ruta de acceso en la que se encuentra
RegisterRext.exe .
Ejemplos
A continuación se muestran ejemplos de cómo cambiar la versión del tiempo de ejecución de R en
SQL Server 2016 y 2017.
Cambio de la versión del entorno de ejecución de R en SQL Server 2016
Por ejemplo, para configurar R 3.5 como la versión predeterminada de R para la instancia MSSQLSERVER01 en
SQL Server 2016:

cd "C:\Program Files\Microsoft SQL


Server\MSSQL13.MSSQLSERVER01\R_SERVICES.3.5\library\RevoScaleR\rxLibs\x64"

.\RegisterRext.exe /configure /rhome:"C:\Program Files\Microsoft SQL


Server\MSSQL13.MSSQLSERVER01\R_SERVICES.3.5" /instance:MSSQLSERVER01

Cambio de la versión del entorno de ejecución de R en SQL Server 2017


Por ejemplo, para configurar R 3.5 como la versión predeterminada de R para la instancia MSSQLSERVER01 en
SQL Server 2017:

cd "C:\Program Files\Microsoft SQL


Server\MSSQL14.MSSQLSERVER01\R_SERVICES.3.5\library\RevoScaleR\rxLibs\x64"

.\RegisterRext.exe /configure /rhome:"C:\Program Files\Microsoft SQL


Server\MSSQL14.MSSQLSERVER01\R_SERVICES.3.5" /instance:MSSQLSERVER01

En estos ejemplos, no es necesario incluir el argumento /rhome , ya que se está especificando la misma carpeta
en la que se encuentra RegisterRext.exe .
Cambio de la versión del entorno de ejecución de Python
Si ha instalado CU22 o posterior para SQL Server 2017, puede tener varias versiones de Python en una
instancia de SQL. Cada versión se encuentra en una subcarpeta de la carpeta de la instancia con el nombre
PYTHON_SERVICES. <major> . <minor> (es posible que la carpeta de la instalación original no tenga un número
de versión anexado al nombre de la carpeta).
Por ejemplo, si instala una CU que contiene Python 3.7, se crea una nueva carpeta PYTHON_SERVICES :
C:\Program Files\Microsoft SQL Server\MSSQL14.<INSTANCE_NAME>\PYTHON_SERVICES.3.7

Cada instancia de SQL usa una de estas versiones como la versión predeterminada de Python. Puede cambiar la
versión predeterminada mediante la utilidad de la línea de comandos RegisterRExt.exe . La utilidad se
encuentra en las carpetas de Python en cada instancia de SQL:
<Ruta de acceso de instancia de SQL>
\PYTHON_SERVICES.n.n\Lib\site-packages\revoscalepy\rxLibs\RegisterRExt.exe

NOTE
La funcionalidad descrita en este artículo solo está disponible con la copia de RegisterRExt.exe incluida en las CU de
SQL. No use la copia incluida con la instalación de SQL original.

Para cambiar la versión del entorno de ejecución de Python, pase los siguientes argumentos de la línea de
comandos a RegisterRext.exe :
/configure -obligatorio, especifica que está configurando la versión predeterminada de Python.
/python : especifica que está configurando la versión predeterminada de Python. Opcional si se especifica
/pythonhome .

/instance: <nombre de instancia> : opcional, la instancia de que desea configurar. Si no se especifica, se


configura la instancia predeterminada.
/pythonhome: <Ruta de acceso a la carpeta PYTHON_SERVICES[n.n]> : opcional, ruta de acceso a la
carpeta de la versión del entorno de ejecución que desea establecer como la versión predeterminada de
Python.
Si no especifica /pythonhome, la ruta de acceso configurada es la ruta de acceso en la que se encuentra
RegisterRext.exe .
Ejemplo
Por ejemplo, para configurar Python 3.7 como versión predeterminada de Python para la instancia
MSSQLSERVER01 en SQL Server 2017:

cd "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER01\PYTHON_SERVICES.3.7\Lib\site-


packages\revoscalepy\rxLibs"

.\RegisterRext.exe /configure /pythonhome:"C:\Program Files\Microsoft SQL


Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES.3.7" /instance:MSSQLSERVER01

En este ejemplo, no es necesario incluir el argumento /pythonhome , ya que se está especificando la misma
carpeta en la que se encuentra RegisterRext.exe .

Eliminación de una versión del entorno de ejecución


Para quitar una versión de R o Python, use RegisterRExt.exe con el argumento de la línea de comandos
/cleanup , utilizando los mismos argumentos /rhome , /pythonhome y /instance descritos anteriormente.
Por ejemplo, para quitar la carpeta R 3.2 de la instancia MSSQLSERVER01:

.\RegisterRext.exe /cleanup /rhome:"C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER01\R_SERVICES"


/instance:MSSQLSERVER01

Por ejemplo, para quitar la carpeta Python 3.7 de la instancia MSSQLSERVER01:

.\RegisterRExt.exe /cleanup /python /pythonhome:"C:\Program Files\Microsoft SQL


Server\MSSQL14.MSSQLSERVER01\PYTHON_SERVICES.3.7" /instance:MSSQLSERVER01

RegisterRext.exe le pedirá que confirme la limpieza del entorno de ejecución de R especificado:

¿Seguro que desea eliminar permanentemente el entorno de ejecución determinado junto con todos los
paquetes instalados en él? [Sí(Y)/No(N)/Predeterminado(Sí)]:

Para confirmar, responda Y o presione Entrar. Como alternativa, puede omitir este mensaje pasando /y o
/Yes junto con la opción /cleanup .

NOTE
Puede quitar una versión solo si no está configurada como predeterminada y no se usa actualmente para ejecutar
RegisterRext.exe .

Pasos siguientes
Obtención de información de paquetes de R
Obtención de información de paquetes de Python
Instalación de paquetes con herramientas de R
Instalación de paquetes con las herramientas de Python
Actualización del entorno de ejecución de Python y
R con enlace en SQL Server Machine Learning
Services
14/07/2021 • 13 minutes to read

Se aplica a: SQL Server 2016 (13.x) SQL Server 2017 (14.x)

IMPORTANT
La compatibilidad con Machine Learning Server (anteriormente conocido como R Server) finalizará el 1 de julio de 2022.
Para obtener más información, consulte ¿Qué sucederá con Machine Learning Server?

En este artículo se describe cómo usar un proceso de instalación llamado enlace para actualizar los entornos de
ejecución de R o Python en SQL Server 2016 R Services o SQL Server 2017 Machine Learning Services. Puede
obtener las versiones más recientes de Python y R enlazando a Microsoft Machine Learning Server.

IMPORTANT
En este artículo se describe un método anterior para actualizar los entornos de ejecución de R y Python, denominado
enlace. Si ha instalado actualización acumulativa (CU) 14 o posterior para SQL Ser ver 2016 Ser vices Pack
(SP) 2 o la actualización acumulativa (CU) 22 o posterior para SQL Ser ver 2017 , consulte cómo cambiar el
entorno de ejecución del lenguaje R o Python predeterminado a una versión posterior en su lugar.

¿Qué es un enlace?
El enlace es un proceso de instalación que reemplaza el contenido de las carpetas R_SERVICES y
PYTHON_SERVICES por archivos ejecutables, bibliotecas y herramientas más recientes de Microsoft Machine
Learning Server.
Los componentes cargados que se incluyen con el modelo de servicio han cambiado. Las actualizaciones del
servicio coinciden con la escala de tiempo de soporte técnico para Microsoft R Server y Machine Learning
Server en el ciclo de vida moderno.
A excepción de las versiones de los componentes y las actualizaciones del servicio, el enlace no cambia los
aspectos básicos de la instalación:
La integración de Python y R sigue formando parte de una instancia del motor de base de datos.
La concesión de licencias permanece igual (no hay costos adicionales asociados al enlace).
Las directivas de soporte técnico de SQL Server permanecen para el motor de base de datos.
En el resto de este artículo se explica el mecanismo de enlace y su funcionamiento en cada versión de
SQL Server.

NOTE
El enlace solo se aplica a instancias en base de datos que estén enlazadas a instancias de SQL Server. En este caso, el
enlace no es necesario para una instalación independiente.
Consideraciones sobre el enlace de SQL Ser ver 2016
Para los clientes de SQL Server 2016 R Services, el enlace proporciona:
Paquetes de R actualizados.
Nuevos paquetes que no forman parte de la instalación original (MicrosoftML)
Modelos de aprendizaje automático entrenados previamente para el análisis de opiniones y la detección de
imágenes.
Todo los enlaces pueden recibir nuevas actualizaciones en cada nueva versión principal y secundaria de
Microsoft Machine Learning Server.

Mapa de versiones
Las tablas siguientes son mapas de versiones. Cada mapa muestra las versiones de los paquetes en todas las
versiones. Puede revisar las rutas de actualización al enlazar a Microsoft Machine Learning Server (conocido
anteriormente como R Server, antes de la adición de compatibilidad con Python a partir de Machine Learning
Server 9.2.1).
El enlace no garantiza la versión más reciente de R o Anaconda. Al enlazar con Microsoft Machine Learning
Server, se obtiene la versión de R o Python que se instala con el programa de instalación, que podría no ser la
versión más reciente disponible en el sitio web.
SQL Ser ver 2016 R Ser vices

M A C H IN E M A C H IN E M A C H IN E
C O M P O N EN T VERSIÓ N R L EA RN IN G L EA RN IN G L EA RN IN G
E IN IC IA L SERVER 9. 0. 1 R SERVER 9. 1 SERVER 9. 2. 1 SERVER 9. 3 SERVER 9. 4. 7

Microsoft R R 3.2.2 R 3.3.2 R 3.3.3 R 3.4.1 R 3.4.3 R 3.5.2


Open (MRO)
en R

RevoScaleR 8.0.3 9.0.1 9.1 9.2.1 9.3 9.4.7

MicrosoftML n/a 9.0.1 9.1 9.2.1 9.3 9.4.7

modelos n/a 9.0.1 9.1 9.2.1 9.3 9.4.7


previamente
entrenados

sqlrutils n/a 1.0 1.0 1.0 1.0 1.0

olapR n/a 1.0 1.0 1.0 1.0 1.0

SQL Ser ver 2017 Machine Learning Ser vices

M A C H IN E L EA RN IN G M A C H IN E L EA RN IN G
C O M P O N EN T E VERSIÓ N IN IC IA L SERVER 9. 3 SERVER 9. 4. 7

Microsoft R Open (MRO) en R 3.3.3 R 3.4.3 R 3.5.2


R

RevoScaleR 9.2 9.3 9.4.7

MicrosoftML 9.2 9.3 9.4.7


M A C H IN E L EA RN IN G M A C H IN E L EA RN IN G
C O M P O N EN T E VERSIÓ N IN IC IA L SERVER 9. 3 SERVER 9. 4. 7

sqlrutils 1.0 1.0 1.0

olapR 1.0 1.0 1.0

Anaconda 4.2 en 4.2/3.5.2 4.2/3.5.2


Python 3.5

revoscalepy 9.2 9.3 9.4.7

microsoftml 9.2 9.3 9.4.7

modelos previamente 9.2 9.3 9.4.7


entrenados

Funcionamiento de la actualización de componentes


Las bibliotecas de archivos ejecutables, R y Python se actualizan al enlazar una instalación existente de R y
Python con Machine Learning Server.
El enlace se ejecuta con el instalador de Microsoft Machine Learning Server al ejecutar el programa de
instalación en una instancia existente del motor de base de datos de SQL Server que tenga la integración de R o
Python.
El programa de instalación detecta las características existentes y le pide que vuelva a enlazar con Machine
Learning Server.
Durante el enlace, el contenido de C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES y
\PYTHON_SERVICES se sobrescribe por los archivos ejecutables y las bibliotecas más recientes de
C:\Program Files\Microsoft\ML Server\R_SERVER y \PYTHON_SERVER .

El enlace solo se aplica a las características de Python y R. Los paquetes de código abierto para Python y R
constan de:
Anaconda
Microsoft R Open
Paquetes propios RevoScaleR
Revoscalepy
El enlace no cambia el modelo de compatibilidad de la instancia del motor de base de datos ni la versión de
SQL Server.
El enlace es reversible. Puede revertir al servicio de SQL Server desenlazando la instancia y reparando la
instancia del motor de base de datos de SQL Server.

Enlace a Machine Learning Server mediante el programa de


instalación
Siga los pasos para enlazar SQL Server a Microsoft Machine Learning Server mediante el programa de
instalación.
1. En SSMS, ejecute SELECT @@version para comprobar que el servidor cumple los requisitos mínimos de
compilación.
En el caso de SQL Server 2016 R Services, los requisitos mínimos son Service Pack 1 y CU3.
2. Compruebe la versión de los paquetes base de R y RevoScaleR para confirmar que las versiones
existentes son inferiores a las que tiene previsto reemplazar.

EXECUTE sp_execute_external_script
@language=N'R'
,@script = N'str(OutputDataSet);
packagematrix <- installed.packages();
Name <- packagematrix[,1];
Version <- packagematrix[,3];
OutputDataSet <- data.frame(Name, Version);'
, @input_data_1 = N''
WITH RESULT SETS ((PackageName nvarchar(250), PackageVersion nvarchar(max) ))

3. Cierre SSMS y todas las herramientas que tengan una conexión abierta a SQL Server. El enlace
sobrescribe los archivos del programa. Si SQL Server tiene sesiones abiertas, se producirá un error en el
enlace con el código de error de enlace 6.
4. Descargue Microsoft Machine Learning Server en el equipo que tenga la instancia que quiere actualizar.
Se recomienda la versión más reciente.
5. Descomprima la carpeta e inicie ServerSetup.exe, que se encuentra en MLSWIN93.
6. En Configurar la instalación , confirme los componentes que se van a actualizar y revise la lista de
instancias compatibles.
7. En la página Contrato de licencia , seleccione Acepto estos términos para aceptar los términos de
licencia de Machine Learning Server.
8. En las páginas sucesivas, dé su consentimiento a otras condiciones de licencia para cualquier
componente de código abierto que seleccione, como Microsoft R Open o la distribución Anaconda de
Python.
9. En la página Ya casi estamos , anote la carpeta de instalación. La carpeta predeterminada es \Archivos
de programa\Microsoft\ML Server.
Si quiere cambiar la carpeta de instalación, seleccione Avanzado para volver a la primera página del
asistente, aunque deberá repetir todas las selecciones anteriores.
Si se produce un error en la actualización, consulte Códigos de error de SqlBindR para obtener más información.

Enlace sin conexión (sin acceso a Internet)


En el caso de los sistemas sin conexión a Internet, puede descargar el instalador y los archivos .cab en un equipo
conectado a Internet y, a continuación, transferir los archivos al servidor aislado.
El instalador (ServerSetup.exe) incluye los paquetes de Microsoft (RevoScaleR, MicrosoftML, olapR y sqlRUtils).
Los archivos .cab proporcionan otros componentes principales. Por ejemplo, el archivo .cab "SRO" proporciona
R Open, la distribución de R de código abierto de Microsoft.
En las siguientes instrucciones se explica cómo colocar los archivos para una instalación sin conexión.
1. Descargue el instalador de MLSWIN93. Se descarga como archivo comprimido. Se recomienda la versión
más reciente, pero también se pueden instalar versiones anteriores.
2. Descargue los archivos .cab. Los enlaces siguientes son para la versión 9.3. Si necesita versiones
anteriores, encontrará más enlaces en R Server 9.1. Recuerde que Python/Anaconda solo se puede
agregar a una instancia de SQL Server Machine Learning Services. Existen modelos previamente
entrenados para R y Python; el archivo .cab ofrece modelos en los lenguajes que está usando.

C A RA C T ERÍST IC A DESC A RGA R

R SRO_3.4.3.0_1033.cab

Python SPO_9.3.0.0_1033.cab

Modelos entrenados previamente MLM_9.3.0.0_1033.cab

3. Transfiera los archivos .zip y .cab al servidor de destino.


4. En el servidor, escriba %temp% en el comando Ejecutar para obtener la ubicación física del directorio
temp. La ruta de acceso física varía según la máquina, pero suele ser
C:\Users\<your-user-name>\AppData\Local\Temp .

5. Coloque los archivos .cab en la carpeta %temp%.


6. Descomprima el instalador.
7. Ejecute ServerSetup.exe y siga las indicaciones en pantalla para completar la instalación.

Operaciones de línea de comandos


TIP
¿No encuentra SqlBindR? Es probable que no haya ejecutado el programa de instalación. SqlBindR solo está disponible
después de haber ejecutado el programa de instalación de Machine Learning Server.

1. Abra un símbolo del sistema como administrador y vaya hasta la carpeta que contiene sqlbindr.exe. La
ubicación predeterminada es C:\Archivos de programa\Microsoft\MLServer\Setup.
2. Escriba el comando siguiente para ver una lista de instancias disponibles: SqlBindR.exe /list

Anote el nombre completo de la instancia como se muestra. Por ejemplo, el nombre de la instancia
podría ser MSSQL14.MSSQLSERVER para una instancia predeterminada, o bien algo parecido a
SERVERNAME.MYNAMEDINSTANCE.
3. Ejecute el comando SqlBindR.exe con el argumento /bind. Especifique el nombre de la instancia que se
va a actualizar con el nombre de instancia que se devolvió en el paso anterior.
Por ejemplo, para actualizar la instancia predeterminada, escriba: SqlBindR.exe /bind MSSQL14.MSSQLSERVER

4. Cuando haya finalizado la actualización, reinicie el servicio Launchpad asociado a cualquier instancia que
se haya modificado.

Reversión o desenlace de una instancia


Puede restaurar una instancia enlazada a una instalación inicial de los componentes de R y Python, establecida
por el programa de instalación de SQL Server. Hay tres partes para revertir el servicio de SQL Server.
Paso 1: Desenlace de Microsoft Machine Learning Server
Paso 2: Restauración de la instancia al estado original
Paso 3: Reinstalación de los paquetes que haya agregado a la instalación

Paso 1: Unbind
Tiene dos opciones para revertir el enlace: volver a ejecutar el programa de instalación o usar la utilidad de línea
de comandos SqlBindR.
Desenlace mediante el programa de instalación
1. Busque el instalador de Machine Learning Server. Si ha quitado el instalador, es posible que tenga que volver
a descargarlo o copiarlo desde otro equipo.
2. Asegúrese de ejecutar el instalador en el equipo que tiene la instancia que quiere desenlazar.
3. El instalador identifica las instancias locales que son candidatas para el desenlace.
4. Anule la selección de la casilla situada junto a la instancia que quiera revertir a la configuración original.
5. Acepte todos los contratos de licencia.
6. Seleccione Finalizar . El proceso tarda unos minutos.
Desenlace mediante la línea de comandos
1. Abra un símbolo del sistema y vaya a la carpeta que contiene sqlbindr.exe , como se describe en la
sección anterior.
2. Ejecute el comando SqlBindR.exe con el argumento /unbind y especifique la instancia.
Por ejemplo, el siguiente comando revierte la instancia predeterminada:
SqlBindR.exe /unbind MSSQL14.MSSQLSERVER

Paso 2: Reparación de la instancia de SQL Server


Ejecute el programa de instalación de SQL Server para reparar la instancia del motor de base de datos que tiene
las características de R y Python. Se conservan las actualizaciones existentes. El siguiente paso se aplica si se ha
perdido una actualización para las actualizaciones de servicio en los paquetes de Python y R.
Solución alternativa: Desinstale completamente la instancia del motor de base de datos y reinstálela y, a
continuación, aplique todas las actualizaciones de servicio.

Paso 3: Incorporación de paquetes de terceros


Es posible que haya agregado otros paquetes de código abierto o de terceros a la biblioteca de paquetes. Dado
que al invertir el enlace se cambia la ubicación de la biblioteca de paquetes predeterminada, deberá volver a
instalar los paquetes en la biblioteca que ahora usan R y Python. Para obtener más información, consulte la
información y la instalación de paquetes de R, así como la información y la instalación de paquetes de Python.

Sintaxis de comandos de SqlBindR.exe


Uso
sqlbindr [/list] [/bind <SQL_instance_ID>] [/unbind <SQL_instance_ID>]

Parámetros
N O M B RE DESC RIP C IÓ N

list Muestra una lista de todos los id. de instancia de SQL Server
en el equipo actual.

bind Actualiza la instancia de SQL Server especificada a la versión


más reciente de R Server y garantiza que la instancia
obtenga automáticamente las actualizaciones futuras de R
Server.
N O M B RE DESC RIP C IÓ N

unbind Desinstala la versión más reciente de R Server de la instancia


de SQL Server especificada e impide que las actualizaciones
futuras de R Server afecten a la instancia.

Errores de enlace
El instalador de Machine Learning Server y SqlBindR devuelven los siguientes mensajes y códigos de error.

C Ó DIGO DE ERRO R M ESSA GE DETA L L ES

Error de enlace 0 Correcto Enlace pasado sin errores.

Error de enlace 1 Argumentos no válidos Error de sintaxis.

Error de enlace 2 Acción no válida Error de sintaxis.

Error de enlace 3 Instancia no válida Existe una instancia, pero no es válida


para el enlace.

Error de enlace 4 No enlazable

Error de enlace 5 Ya enlazado Ha ejecutado el comando bind , pero la


instancia especificada ya está enlazada.

Error de enlace 6 Error de enlace Se produjo un error al desenlazar la


instancia. Este error puede producirse
si se ejecuta el instalador de Machine
Learning Server sin seleccionar
ninguna característica. El enlace
requiere que se seleccione una
instancia de MSSQL y R y Python,
dando por sentado que la instancia es
SQL Server 2017. Este error también
se produce si SqlBindR no se pudo
escribir en la carpeta Archivos de
programa. Las sesiones abiertas o los
identificadores en SQL Server
producirán este error. Si recibe este
error, reinicie el equipo y repita los
pasos de enlace antes de iniciar más
sesiones.

Error de enlace 7 Sin enlace La instancia del motor de base de


datos tiene R Services o SQL Server
Machine Learning Services. La
instancia no está enlazada con
Microsoft Machine Learning Server.

Error de enlace 8 Error de desenlace Se produjo un error al desenlazar la


instancia.

Error de enlace 9 No se encontraron instancias No se encontraron instancias del


motor de base de datos en este
equipo.
Problemas conocidos
En esta sección se enumeran los problemas conocidos específicos a la hora de usar la utilidad SqlBindR.exe o de
las actualizaciones de Machine Learning Server que pueden afectar a las instancias de SQL Server.
Restauración de paquetes instalados previamente
SqlBindR.exe no puede restaurar los paquetes originales o los componentes de R con la actualización a
Microsoft R Server 9.0.1. Use reparar en la instancia de SQL Server y aplique todas las versiones de servicio.
Reinicie la instancia.
Una versión posterior de SqlBindR restaura automáticamente las características originales de R, de manera que
no es necesario reinstalar los componentes de R o volver a revisar el servidor. Sin embargo, debe instalar todas
las actualizaciones de paquetes de R que se hayan agregado después de la instalación inicial.
Use los comandos de R para sincronizar los paquetes instalados con el sistema de archivos mediante registros
en la base de datos. Para obtener más información, consulte Administración de paquetes de R para SQL Server.
Problemas con el archivo sqlbinr.ini sobrescrito en SQL Server
Escenario: Este problema se produce al enlazar Machine Learning Server 9.4.7 a SQL Server 2017. Al actualizar y
enlazar Python, o al actualizar a una nueva CU, no entiende que Python está enlazado y sobrescribe los archivos.
No hay ningún problema conocido con R.
Como alternativa, cree un archivo sqlbindr.ini en el directorio PYTHON_SERVICES que no esté vacío. El
contenido no afecta al modo en el que funciona el archivo.
Cree un archivo sqlbindr.ini , que contenga 9.4.7.82 , y guárdelo en esta ubicación:
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES

Problemas con varias actualizaciones de SQL Server


Escenario: Instancia actualizada anteriormente de SQL Server 2016 R Services a 9.0.1. Se ejecutó el nuevo
instalador para Microsoft R Server 9.1.0. El instalador muestra una lista de todas las instancias válidas. De forma
predeterminada, el instalador selecciona las instancias enlazadas previamente. Si continúa, las instancias
enlazadas anteriormente se desenlazarán. Como resultado, se quita la instalación 9.0.1 anterior, incluidos los
paquetes relacionados, pero no se instalará la nueva versión de Microsoft R Server (9.1.0).
Como solución alternativa, puede modificar la instalación existente de R Server como se indica a continuación:
1. En el Panel de control, abra Agregar o quitar programas .
2. Busque Microsoft R Server y seleccione Cambiar/modificar .
3. Cuando se inicie el instalador, seleccione las instancias que quiera enlazar a la versión 9.1.0.
Microsoft Machine Learning Server 9.2.1 y 9.3 no presentan este problema.
El enlace o desenlace deja varias carpetas temporales
Quite las carpetas temporales una vez completada la instalación.

NOTE
Espere a que haya concluido la instalación. Quitar las bibliotecas de R asociadas a una versión y agregar las nuevas
bibliotecas de R puede tardar mucho tiempo. Una vez finalizada la operación, se quitarán las carpetas temporales.

Consulte también
Cambio de la versión predeterminada del entorno de ejecución del lenguaje R o Python
Instalación de Machine Learning Server para Windows (con conexión a Internet)
Instalación de Machine Learning Server para Windows (sin conexión)
Problemas conocidos de Machine Learning Server
Anuncios de características de la versión anterior de R Server
Características en desuso, ya no admitidas o modificadas
Ejecución de scripts de Python y R en cuadernos de
Azure Data Studio con Machine Learning Services
de SQL Server
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores


Obtenga información sobre cómo ejecutar scripts de Python y R en cuadernos de Azure Data Studio con
Machine Learning Services de SQL Server. Azure Data Studio es una herramienta de base de datos
multiplataforma.

Prerrequisitos
Descargue e instale Azure Data Studio en el equipo de la estación de trabajo. Azure Data Studio es
multiplataforma y se ejecuta en Windows, macOS y Linux.
Se necesita un servidor con Machine Learning Services de SQL Server instalado y habilitado. Se puede
usar Machine Learning Services en Windows, Linux o clústeres de macrodatos:
Instale Machine Learning Services de SQL Server en Windows.
Instale Machine Learning Services de SQL Server en Linux.
Ejecute los scripts de Python y R con Machine Learning Services en clústeres de macrodatos de
SQL Server.

Creación de un cuaderno de SQL


IMPORTANT
Machine Learning Services se ejecuta como parte de SQL Server. Por lo tanto, debe usar un kernel de SQL, no uno de
Python.

Puede usar Machine Learning Services en Azure Data Studio con un cuaderno de SQL. Para crear un cuaderno
nuevo, siga estos pasos:
1. Haga clic en Archivo y Nuevo cuaderno para crear un cuaderno nuevo. De forma predeterminada, el
cuaderno usará el kernel de SQL .
2. Haga clic en Adjuntar a y Cambiar conexión .

3. Conéctese a un servidor de SQL Server nuevo o existente. Puede:


a. Elegir una conexión existente en Conexiones recientes o Conexiones guardadas .
b. Crear una conexión nueva en Detalles de conexión . Rellene los detalles de la conexión en el
servidor de SQL Server y la base de datos.

Ejecución de scripts de Python o R


Los cuadernos de SQL se componen de celdas de texto y código. Las celdas de código se usan para ejecutar
scripts de Python o R mediante el procedimiento almacenado sp_execute_external_scripts. Las celdas de texto se
pueden usar para documentar el código en el cuaderno.
Ejecutar un script de Python
Para ejecutar un script de Python, siga estos pasos:
1. Haga clic en + Código para agregar una celda de código.

2. En la celda de código, escriba el script siguiente:


EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'

3. Haga clic en Ejecutar celda (flecha redonda de color negro) o presione F5 para ejecutar la única celda.

4. El resultado se mostrará en la celda de código.

Ejecución de un script de R
Para ejecutar un script de R, siga estos pasos:
1. Haga clic en + Código para agregar una celda de código.

2. En la celda de código, escriba el script siguiente:

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'
a <- 1
b <- 2
c <- a/b
d <- a*b
print(c(c, d))
'

3. Haga clic en Ejecutar celda (flecha redonda de color negro) o presione F5 para ejecutar la única celda.
4. El resultado se mostrará en la celda de código.

Pasos siguientes
Uso de cuadernos en Azure Data Studio
Creación y ejecución de un cuaderno de SQL Server
Inicio rápido: Ejecución de scripts de Python sencillos con Machine Learning Services de SQL Server
Inicio rápido: Ejecución de scripts de R sencillos con Machine Learning Services de SQL Server
Configuración de un cliente de ciencia de datos
para el desarrollo de Python en SQL Server
Machine Learning Services
14/07/2021 • 13 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores


La integración de Python está disponible en SQL Server 2017 y posterior cuando se incluye la opción de Python
en una Instalación de Machine Learning Services (en base de datos).
Para desarrollar e implementar soluciones de Python para SQL Server, instale revoscalepy de Microsoft y otras
bibliotecas de Python en la estación de trabajo de desarrollo. La biblioteca revoscalepy, que también se
encuentra en la instancia de SQL Server remota, coordina las solicitudes de procesamiento entre ambos
sistemas.
En este artículo se aprende a configurar una estación de trabajo de desarrollo de Python que permite interactuar
con una instancia de SQL Server remota habilitada para el aprendizaje automático y la integración de Python.
Después de realizar los pasos de este artículo, dispondrá de las mismas bibliotecas de Python que en
SQL Server. También se sabe cómo enviar procesamientos de inserción desde una sesión de Python local a una
sesión remota de Python en SQL Server.

Para validar la instalación, puede usar cuadernos integrados de Jupyter Notebook, como se explica en este
artículo, o vincular las bibliotecas a PyCharm o a cualquier otro IDE que use normalmente.

TIP
Para ver una demostración en vídeo de estos ejercicios, vea Ejecución remota de R y Python en SQL Server desde
cuadernos de Jupyter Notebook.
NOTE
Una alternativa a la instalación de la biblioteca cliente es el uso de un servidor independiente como cliente enriquecido, lo
que algunos clientes prefieren para un trabajo más especializado. Un servidor independiente está totalmente desasociado
de SQL Server, pero como tiene las mismas bibliotecas de Python, se puede usar como cliente para el análisis en base de
datos de SQL Server. También se puede usar para trabajos no relacionados con SQL, lo que incluye la capacidad de
importar y modelar datos de otras plataformas de datos. Si instala un servidor independiente, puede encontrar el archivo
ejecutable de Python en esta ubicación: C:\Program Files\Microsoft SQL Server\140\PYTHON_SERVER . Para validar la
instalación, abra un cuaderno de Jupyter para ejecutar comandos con el archivo Python.exe en esa ubicación.

Herramientas de uso común


Tanto si es un desarrollador de Python nuevo en SQL como si es un desarrollador de SQL nuevo en Python y el
análisis en base de datos, necesita una herramienta de desarrollo de Python y un editor de consultas de T-SQL
como SQL Server Management Studio (SSMS) para usar todas las capacidades de análisis en base de datos.
Para el desarrollo de Python puede usar cuadernos de Jupyter Notebook, que se incluyen en la distribución de
Anaconda instalada por SQL Server. En este artículo se explica cómo iniciar cuadernos de Jupyter Notebook
para poder ejecutar el código de Python de forma local y remota en SQL Server.
SSMS es una descarga independiente que resulta útil para crear y ejecutar procedimientos almacenados en
SQL Server, incluidos aquellos que contienen código de Python. Prácticamente cualquier código de Python que
escriba en cuadernos de Jupyter Notebook se puede insertar en un procedimiento almacenado. Puede ejecutar
paso a paso otros inicios rápidos para obtener información sobre SSMS y Python insertado.

1 - Instalar paquetes de Python


Las estaciones de trabajo locales deben tener las mismas versiones de paquete de Python que las de SQL Server,
incluida la distribución base de Anaconda 4.2.0 con Python 3.5.2, y los paquetes específicos de Microsoft.
Un script de instalación agrega tres bibliotecas específicas de Microsoft al cliente de Python. El script instala
revoscalepy, que se usa para definir los objetos de origen de datos y el contexto de proceso. Instala microsoftml,
que proporciona algoritmos de aprendizaje automático. También se instala el paquete azureml, pero se aplica a
tareas de operatividad asociadas a un contexto de servidor independiente y puede tener un uso limitado en el
análisis en base de datos.
1. Descargue un script de instalación.
https://aka.ms/mls-py instala la versión 9.2.1 de los paquetes de Python de Microsoft. Esta versión
corresponde a una instancia de SQL Server predeterminada.
https://aka.ms/mls93-py instala la versión 9.3 de los paquetes de Python de Microsoft.
2. Abra una ventana de PowerShell con permisos de administrador elevados (haga clic con el botón derecho
en Ejecutar como administrador ).
3. Vaya a la carpeta en la que ha descargado el instalador y ejecute el script. Agregue el argumento de línea
de comandos -InstallFolder para especificar una ubicación de carpeta para las bibliotecas. Por ejemplo:

cd {{download-directory}}
.\Install-PyForMLS.ps1 -InstallFolder "C:\path-to-python-for-mls"

Si omite la carpeta de instalación, el valor predeterminado es C:\Archivos de programa\Microsoft\PyForMLS.


La instalación tarda algún tiempo en completarse. Puede supervisar el progreso en la ventana de PowerShell.
Una vez finalizada la instalación, tiene un conjunto completo de paquetes.

TIP
Se recomienda leer las Preguntas más frecuentes sobre Python para Windows para obtener información general sobre la
ejecución de programas de Python en Windows.

2 - Buscar los archivos ejecutables


Todavía en PowerShell, vea el contenido de la carpeta de instalación para confirmar que se han instalado
Python.exe, los scripts y otros paquetes.
1. Escriba cd \ para ir a la unidad raíz y luego escriba la ruta de acceso especificada para -InstallFolder
en el paso anterior. Si ha omitido este parámetro durante la instalación, el valor predeterminado es
cd C:\Program Files\Microsoft\PyForMLS .

2. Escriba dir *.exe para ver los archivos ejecutables. Debería ver python.exe , pythonw.exe y uninstall-
anaconda.exe .

En los sistemas que tienen varias versiones de Python, no olvide usar este archivo Python.exe concreto si quiere
cargar revoscalepy y otros paquetes de Microsoft.

NOTE
El script de instalación no modifica la variable de entorno PATH en el equipo, lo que significa que el nuevo intérprete y los
módulos de Python que acaba de instalar no están disponibles automáticamente para otras herramientas que pueda
tener. Para obtener ayuda para vincular las bibliotecas y el intérprete de Python a las herramientas, vea Instalar un IDE.

3 - Abrir cuadernos de Jupyter Notebook


Anaconda incluye cuadernos de Jupyter Notebook. Como paso siguiente, cree un cuaderno y ejecute el código
de Python que contenga las bibliotecas que acaba de instalar.
1. En el símbolo del sistema de PowerShell, en el directorio C:\Archivos de programa\Microsoft\PyForMLS,
abra cuadernos de Jupyter Notebook desde la carpeta Scripts:

.\Scripts\jupyter-notebook

Debe abrirse un cuaderno en el explorador predeterminado en https://localhost:8889/tree .


Otra manera de empezar es hacer doble clic en jupyter-notebook .exe .
2. Haga clic en Nuevo y luego en Python 3 .
3. Escriba import revoscalepy y ejecute el comando para cargar una de las bibliotecas específicas de
Microsoft.
4. Escriba y ejecute print(revoscalepy.__version__) para devolver la información de versión. Debería ver
9.2.1 o 9.3.0. Puede usar cualquiera de estas versiones con revoscalepy en el servidor.
5. Escriba una serie más compleja de instrucciones. Este ejemplo genera estadísticas de resumen mediante
rx_summary sobre un conjunto de datos local. Otras funciones obtienen la ubicación de los datos de
ejemplo y crean un objeto de origen de datos para un archivo .xdf local.

import os
from revoscalepy import rx_summary
from revoscalepy import RxXdfData
from revoscalepy import RxOptions
sample_data_path = RxOptions.get_option("sampleDataDir")
print(sample_data_path)
ds = RxXdfData(os.path.join(sample_data_path, "AirlineDemoSmall.xdf"))
summary = rx_summary("ArrDelay+DayOfWeek", ds)
print(summary)

En la captura de pantalla siguiente se muestra la entrada y una parte de la salida, recortada por motivos de
brevedad.

4 - Obtener permisos SQL


Para conectarse a una instancia de SQL Server a fin de ejecutar scripts y cargar datos, debe tener un inicio de
sesión válido en el servidor de base de datos. Puede usar un inicio de sesión de SQL o la autenticación integrada
de Windows. Por lo general, se recomienda usar la autenticación integrada de Windows, pero el inicio de sesión
de SQL es más sencillo en algunos escenarios, especialmente si el script contiene cadenas de conexión a datos
externos.
Como mínimo, la cuenta usada para ejecutar código debe tener permiso para leer en las bases de datos con las
que se está trabajando, además del permiso especial EXECUTE ANY EXTERNAL SCRIPT. La mayoría de los
desarrolladores también necesitan permisos para crear procedimientos almacenados y para escribir datos en
tablas que contienen datos de entrenamiento o datos puntuados.
Pida al administrador de bases de datos que configure los siguientes permisos para la cuenta en la base de
datos donde usa Python:
EXECUTE ANY EXTERNAL SCRIPT para ejecutar Python en el servidor.
Privilegios db_datareader para ejecutar las consultas usadas para entrenar el modelo.
db_datawriter para escribir datos de entrenamiento o datos puntuados.
db_owner para crear objetos como procedimientos almacenados, tablas y funciones. También necesita
db_owner para crear bases de datos de prueba y ejemplo.
Si el código requiere paquetes que no se instalan de forma predeterminada con SQL Server, hable con el
administrador de bases de datos para que los paquetes se instalen con la instancia. SQL Server es un entorno
protegido y hay restricciones sobre la ubicación donde se pueden instalar los paquetes. No se recomienda la
instalación ad hoc de paquetes como parte del código, aunque tenga derechos. Además, considere siempre
cuidadosamente las implicaciones de seguridad antes de instalar nuevos paquetes en la biblioteca de
servidores.

5 - Crear datos de prueba


Si tiene permisos para crear una base de datos en el servidor remoto, puede ejecutar el código siguiente para
crear la base de datos de demostración Iris que se usa en los pasos restantes de este artículo.
1 - Crear la base de datos irissql de forma remota

import pyodbc

# creating a new db to load Iris sample in


new_db_name = "irissql"
connection_string = "Driver=SQL Server;Server=localhost;Database={0};Trusted_Connection=Yes;"
# you can also swap Trusted_Connection for UID={your username};PWD={your password}
cnxn = pyodbc.connect(connection_string.format("master"), autocommit=True)
cnxn.cursor().execute("IF EXISTS(SELECT * FROM sys.databases WHERE [name] = '{0}') DROP DATABASE
{0}".format(new_db_name))
cnxn.cursor().execute("CREATE DATABASE " + new_db_name)
cnxn.close()

print("Database created")

2 - Importar el ejemplo Iris desde SkLearn

from sklearn import datasets


import pandas as pd

# SkLearn has the Iris sample dataset built in to the package


iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

3 - Usar las API de Revoscalepy para crear una tabla y cargar los datos de Iris
from revoscalepy import RxSqlServerData, rx_data_step

# Example of using RX APIs to load data into SQL table. You can also do this with pyodbc
table_ref = RxSqlServerData(connection_string=connection_string.format(new_db_name), table="iris_data")
rx_data_step(input_data = df, output_file = table_ref, overwrite = True)

print("New Table Created: Iris")


print("Sklearn Iris sample loaded into Iris table")

6 - Probar la conexión remota


Antes de probar el paso siguiente, asegúrese de que tiene permisos en la instancia de SQL Server y una cadena
de conexión a la base de datos de ejemplo Iris. Si la base de datos no existe y tiene permisos suficientes, puede
crear una base de datos con estas instrucciones en línea.
Reemplace la cadena de conexión por valores válidos. En el código de ejemplo se usa
"Driver=SQL Server;Server=localhost;Database=irissql;Trusted_Connection=Yes;" , pero el código debe especificar
un servidor remoto, posiblemente con un nombre de instancia, y una opción de credencial que se asigne al
inicio de sesión de usuario de base de datos.
Definir una función
En el código siguiente se define una función que se envía a SQL Server en un paso posterior. Cuando se ejecuta,
usa los datos y las bibliotecas (revoscalepy, pandas, matplotlib) en el servidor remoto para crear gráficos de
dispersión del conjunto de datos Iris. Devuelve la secuencia de bytes del archivo .png a los cuadernos de Jupyter
Notebook para que se represente en el explorador.

def send_this_func_to_sql():
from revoscalepy import RxSqlServerData, rx_import
from pandas.tools.plotting import scatter_matrix
import matplotlib.pyplot as plt
import io

# remember the scope of the variables in this func are within our SQL Server Python Runtime
connection_string = "Driver=SQL Server;Server=localhost;Database=irissql;Trusted_Connection=Yes;"

# specify a query and load into pandas dataframe df


sql_query = RxSqlServerData(connection_string=connection_string, sql_query = "select * from iris_data")
df = rx_import(sql_query)

scatter_matrix(df)

# return bytestream of image created by scatter_matrix


buf = io.BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)

return buf.getvalue()

Enviar la función a SQL Server


En este ejemplo, cree el contexto de proceso remoto y luego envíe la ejecución de la función a SQL Server con
rx_exec. La función r x_exec es útil porque acepta un contexto de proceso como argumento. Cualquier función
que quiera ejecutar de forma remota debe tener un argumento de contexto de proceso. Algunas funciones,
como rx_lin_mod, admiten este argumento directamente. En el caso de las operaciones que no lo hacen, puede
usar r x_exec para entregar el código en un contexto de proceso remoto.
En este ejemplo no es necesario transferir ningún dato sin procesar desde SQL Server a Jupyter Notebook. Todo
el procesamiento se produce en la base de datos Iris y solo el archivo de imagen se devuelve al cliente.
from IPython import display
import matplotlib.pyplot as plt
from revoscalepy import RxInSqlServer, rx_exec

# create a remote compute context with connection to SQL Server


sql_compute_context = RxInSqlServer(connection_string=connection_string.format(new_db_name))

# use rx_exec to send the function execution to SQL Server


image = rx_exec(send_this_func_to_sql, compute_context=sql_compute_context)[0]

# only an image was returned to my jupyter client. All data remained secure and was manipulated in my db.
display.Image(data=image)

En la captura de pantalla siguiente se muestra la entrada y la salida del gráfico de dispersión.

7 - Iniciar Python desde herramientas


Dado que los desarrolladores suelen trabajar con varias versiones de Python, el programa de instalación no
agrega Python a PATH. Para usar el archivo ejecutable y las bibliotecas de Python instalados por el programa de
instalación, vincule el IDE a Python.exe en la ruta de acceso que también proporciona revoscalepy y
microsoftml .
Línea de comandos
Al ejecutar Python.exe desde C:\Archivos de programa\Microsoft\PyForMLS (o cualquier ubicación
especificada para la instalación de la biblioteca cliente de Python), tiene acceso a la distribución completa de
Anaconda más los módulos de Python de Microsoft, revoscalepy y microsoftml .
1. Vaya a C:\Archivos de programa\Microsoft\PyForMLS y haga doble clic en Python.exe .
2. Abra la ayuda interactiva: help()
3. Escriba el nombre de un módulo en el cuadro de la ayuda: help> revoscalepy . La ayuda devuelve el nombre,
el contenido del paquete, la versión y la ubicación del archivo.
4. Versión e información del paquete devuelta en el cuadro ayuda> : revoscalepy . Presione Entrar varias veces
para salir de la ayuda.
5. Importe un módulo: import revoscalepy

Cuadernos de Jupyter Notebook


En este artículo se usan cuadernos integrados de Jupyter Notebook para mostrar las llamadas de función a
revoscalepy . Si no está familiarizado con esta herramienta, en la captura de pantalla siguiente se muestra
cómo encajan las piezas y por qué todo "simplemente funciona".
La carpeta principal C:\Archivos de programa\Microsoft\PyForMLS contiene Anaconda más los paquetes de
Microsoft. Los cuadernos de Jupyter Notebook se incluyen en Anaconda, en la carpeta Scripts, y los ejecutables
de Python se registran automáticamente en Jupyter Notebook. Los paquetes que se encuentran en paquetes del
sitio se pueden importar en un cuaderno, incluidos los tres paquetes de Microsoft que se usan para la ciencia de
datos y el aprendizaje automático.

Si usa otro IDE, tiene que vincular los ejecutables de Python y las bibliotecas de funciones a la herramienta. En
las secciones siguientes se proporcionan instrucciones para herramientas de uso común.
Visual Studio
Si tiene Python en Visual Studio, use las siguientes opciones de configuración para crear un entorno de Python
que incluya los paquetes de Python de Microsoft.

O P C IÓ N DE C O N F IGURA C IÓ N VA LO R

Prefix path (Ruta de acceso de prefijo) C:\Archivos de programa\Microsoft\PyForMLS

Interpreter path (Ruta de acceso del intérprete) C:\Archivos de programa\Microsoft\PyForMLS\python.exe

Windowed interpreter (Intérprete en ventanas) C:\Archivos de programa\Microsoft\PyForMLS\pythonw.exe

Para obtener ayuda para configurar un entorno de Python, vea Administración de entornos de Python en Visual
Studio.
PyCharm
En PyCharm, establezca el intérprete en el ejecutable de Python instalado.
1. En un nuevo proyecto, en Configuración, haga clic en Add Local (Agregar local).
2. Escriba C:\Program Files\Microsoft\PyForMLS\ .

Ahora puede importar los módulos revoscalepy , microsoftml o azureml . También puede seleccionar
Herramientas > Consola de Python para abrir una ventana interactiva.
Pasos siguientes
Ahora que tiene herramientas y una conexión operativa a SQL Server, amplíe sus conocimientos mediante la
ejecución de los inicios rápidos de Python con SQL Server Management Studio (SSMS).
Inicio rápido: Crear y ejecutar scripts de Python simples con SQL Server Machine Learning Services
Configuración de un cliente de ciencia de datos
para el desarrollo de R en SQL Server
27/07/2021 • 11 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


La integración de R está disponible en SQL Server 2016 o versiones posteriores cuando se incluye la opción de
lenguaje R en una instalación de SQL Server 2016 R Services o SQL Server Machine Learning Services (en la
base de datos).
Para desarrollar e implementar soluciones de R para SQL Server, instale Microsoft R Client en la estación de
trabajo de desarrollo para obtener RevoScaleR y otras bibliotecas de R. La biblioteca RevoScaleR, que también
se necesita en la instancia de SQL Server remota, coordina las solicitudes de procesamiento entre ambos
sistemas.
En este artículo aprenderá a configurar una estación de trabajo de desarrollo de R que permita interactuar con
una instancia de SQL Server remota habilitada para el aprendizaje automático y la integración de R. Después de
seguir los pasos de este artículo, dispondrá de las mismas bibliotecas de R que en SQL Server. También
aprenderá a enviar procesamientos de inserción de una sesión de R local a una sesión remota de R en
SQL Server.

Para validar la instalación, puede usar la herramienta integrada RGUI , como se explica en este artículo, o
vincular las bibliotecas a RStudio o cualquier otro IDE que use normalmente.

NOTE
Una alternativa a la instalación de la biblioteca cliente es el uso de un servidor independiente como cliente enriquecido, lo
que algunos clientes prefieren para un trabajo más especializado. Un servidor independiente está totalmente desasociado
de SQL Server, pero como tiene las mismas bibliotecas de R, se puede usar como cliente para el análisis en base de datos
de SQL Server. También se puede usar para trabajos no relacionados con SQL, lo que incluye la capacidad de importar y
modelar datos de otras plataformas de datos. Si instala un servidor independiente, puede encontrar el archivo ejecutable
de R en C:\Program Files\Microsoft SQL Server\140\R_SERVER . Para validar la instalación, abra una aplicación de
consola de R con el fin de ejecutar comandos mediante R.exe en esa ubicación.

Herramientas de uso común


Tanto si es un desarrollador de R que no está familiarizado con SQL como si es un desarrollador de SQL que no
está familiarizado con R y el análisis en base de datos, necesitará una herramienta de desarrollo de R y un editor
de consultas de T-SQL como SQL Server Management Studio (SSMS) para usar todas las capacidades de
análisis en la base de datos.
En el caso de escenarios sencillos de desarrollo de R, puede usar el ejecutable RGUI, incluido en la distribución
base de R en MRO y SQL Server. En este artículo se explica cómo usar RGUI para sesiones de R locales y
remotas. Para mejorar la productividad, debe usar un IDE con todas las características, como RStudio o
Visual Studio.
SSMS es una descarga independiente que resulta útil para crear y ejecutar procedimientos almacenados en
SQL Server, incluidos aquellos que contienen código de R. Casi cualquier código R que escriba en un entorno de
desarrollo se puede insertar en un procedimiento almacenado. Puede seguir los pasos que se indican en otros
tutoriales para obtener información sobre SSMS y R insertado.

1. Instalación de paquetes de R
Los paquetes de Microsoft R están disponibles en varios productos y servicios. En una estación de trabajo local,
se recomienda instalar Microsoft R Client. R Client proporciona RevoScaleR, MicrosoftML, SQLRUtils y otros
paquetes de R.
1. Descargue Microsoft R Client.
2. En el asistente para instalación, acepte o cambie la ruta predeterminada, acepte o cambie la lista de
componentes y acepte los términos de licencia de Microsoft R Client.
Una vez finalizada la instalación, una pantalla de bienvenida le presentará el producto y la
documentación.
3. Cree una variable de entorno del sistema MKL_CBWR para garantizar una salida coherente en los
cálculos de la Math Kernel Library (MKL) de Intel.
En el panel de control, haga clic en Sistema y seguridad > Sistema > Configuración avanzada
del sistema > Variables de entorno .
Cree una nueva variable del sistema denominada MKL_CBWR , con un valor establecido en
Automático .

2 - Buscar los archivos ejecutables


Busque y enumere el contenido de la carpeta de instalación para confirmar que se ha instalado R.exe, RGUI y
otros paquetes.
1. En el explorador de archivos, abra la carpeta C:\Archivos de programa\Microsoft\R Client\R_SERVER\bin
para confirmar la ubicación de R.exe.
2. Abra la subcarpeta x64 para confirmar RGUI . Esta herramienta se usarán en el paso siguiente.
3. Abra C:\Archivos de programa\Microsoft\R Client\R_SERVER\library para revisar la lista de paquetes
instalados con el cliente de R, incluidos RevoScaleR, MicrosoftML y otros.

3. Inicio de RGUI
Al instalar R con SQL Server, obtendrá las mismas herramientas de R habituales de cualquier instalación base de
R, como RGui, Rterm, etc. Estas herramientas son ligeras, útiles para comprobar la información de la biblioteca y
el paquete, ejecutar scripts o comandos ad hoc o recorrer los tutoriales. Puede usar estas herramientas para
obtener información de versión de R y confirmar la conectividad.
1. Abra C:\Archivos de programa\Microsoft\R Client\R_SERVER\bin\x64 y haga doble clic en RGui para
iniciar una sesión de R con un símbolo del sistema de R.
Al iniciar una sesión de R desde una carpeta de programas de Microsoft, se cargan automáticamente
varios paquetes, incluido RevoScaleR.
2. Escriba print(Revo.version) en el símbolo del sistema para obtener la información de versión del
paquete RevoScaleR. Debe tener la versión 9.2.1 o 9.3.0 para RevoScaleR.
3. Escriba search() en el símbolo del sistema de R para obtener una lista de los paquetes instalados.

4 - Obtener permisos SQL


En R Client, el procesamiento de R se limita a dos subprocesos y datos en memoria. Para el procesamiento
escalable con varios núcleos y conjuntos de datos grandes, puede desplazar la ejecución (denominada contexto
de proceso) a los conjuntos de datos y la potencia de proceso de una instancia de SQL Server remota. Este es el
enfoque recomendado para la integración de clientes con una instancia de SQL Server de producción y
necesitará permisos e información de conexión para que funcione.
Para conectarse a una instancia de SQL Server a fin de ejecutar scripts y cargar datos, debe tener un inicio de
sesión válido en el servidor de base de datos. Puede usar un inicio de sesión de SQL o la autenticación integrada
de Windows. Por lo general, se recomienda usar la autenticación integrada de Windows, pero el inicio de sesión
de SQL es más sencillo en algunos escenarios, especialmente si el script contiene cadenas de conexión a datos
externos.
Como mínimo, la cuenta usada para ejecutar código debe tener permiso para leer en las bases de datos con las
que se está trabajando, además del permiso especial EXECUTE ANY EXTERNAL SCRIPT. La mayoría de los
desarrolladores también necesitan permisos para crear procedimientos almacenados y para escribir datos en
tablas que contienen datos de entrenamiento o datos puntuados.
Pida al administrador de bases de datos que configure los siguientes permisos para la cuenta en la base de
datos donde usa R:
EXECUTE ANY EXTERNAL SCRIPT para ejecutar el script de R en el servidor.
Privilegios db_datareader para ejecutar las consultas usadas para entrenar el modelo.
db_datawriter para escribir datos de entrenamiento o datos puntuados.
db_owner para crear objetos como procedimientos almacenados, tablas y funciones. También necesita
db_owner para crear bases de datos de prueba y ejemplo.
Si el código requiere paquetes que no se instalan de forma predeterminada con SQL Server, hable con el
administrador de bases de datos para que los paquetes se instalen con la instancia. SQL Server es un entorno
protegido y hay restricciones sobre la ubicación donde se pueden instalar los paquetes. Para más información,
vea Instalación de nuevos paquetes en SQL Server.

5. Prueba de las conexiones


Como paso de comprobación, use RGUI y RevoScaleR para confirmar la conectividad con el servidor remoto.
SQL Server debe estar habilitado para conexiones remotas y debe tener permisos, incluido un inicio de sesión
de usuario y una base de datos a la que conectarse.
En los pasos siguientes se presupone que se usa la base de datos de demo NYCTaxi_Sample y la autenticación
de Windows.
1. Abra RGUI en la estación de trabajo del cliente. Por ejemplo, vaya a
~\Program Files\Microsoft SQL Server\140\R_SERVER\bin\x64 y haga doble clic en RGui. exe para iniciarlo.

2. RevoScaleR se carga automáticamente. Confirme que RevoScaleR está operativo mediante la ejecución
de este comando: print(Revo.version)
3. Escriba el script de demo que se ejecuta en el servidor remoto. Debe modificar el siguiente script de
ejemplo para que incluya un nombre válido para una instancia de SQL Server remota. Esta sesión se
inicia como una sesión local, pero la función r xSummar y se ejecuta en la instancia de SQL Server
remota.

# Define a connection. Replace server with a valid server name.


connStr <- "Driver=SQL Server;Server=<your-server-
name>;Database=NYCTaxi_Sample;Trusted_Connection=true"

# Specify the input data in a SQL query.


sampleQuery <-"SELECT DISTINCT TOP(100) tip_amount FROM [dbo].nyctaxi_sample ORDER BY tip_amount
DESC;"

# Define a remote compute context based on the remote server.


cc <-RxInSqlServer(connectionString=connStr)

# Execute the function using the remote compute context.


rxSummary(formula = ~ ., data = RxSqlServerData(sqlQuery=sampleQuery, connectionString=connStr),
computeContext=cc)

Resultados:
Este script se conecta a una base de datos del servidor remoto, proporciona una consulta, crea una
instrucción cc de contexto de proceso para la ejecución remota de código y, después, proporciona la
función r xSummar y de RevoScaleR para devolver un resumen estadístico de los resultados de la
consulta.
Call:
rxSummary(formula = ~., data = RxSqlServerData(sqlQuery = sampleQuery,
connectionString = connStr), computeContext = cc)

Summary Statistics Results for: ~.


Data: RxSqlServerData(sqlQuery = sampleQuery, connectionString = connStr) (RxSqlServerData Data
Source)
Number of valid observations: 100

Name Mean StdDev Min Max ValidObs MissingObs


tip_amount 63.245 31.61087 36 180 100 0

4. Obtenga y establezca el contexto de proceso. Una vez que establece un contexto de proceso, este
permanece activo mientras dure la sesión. Si no está seguro de si el cálculo es local o remoto, ejecute el
comando siguiente para averiguarlo. Los resultados que especifican una cadena de conexión indican un
contexto de proceso remoto.

# Return the current compute context.


rxGetComputeContext()

# Revert to a local compute context.


rxSetComputeContext("local")
rxGetComputeContext()

# Switch back to remote.


connStr <- "Driver=SQL Server;Server=<your-server-
name>;Database=NYCTaxi_Sample;Trusted_Connection=true"
cc <-RxInSqlServer(connectionString=connStr)
rxSetComputeContext(cc)
rxGetComputeContext()

5. Devuelva información sobre las variables en el origen de datos, incluidos el nombre y el tipo.

rxGetVarInfo(data = inDataSource)

Los resultados incluyen 23 variables.


6. Genere un gráfico de dispersión para explorar si hay dependencias entre dos variables.

# Set the connection string. Substitute a valid server name for the placeholder.
connStr <- "Driver=SQL Server;Server=<your database
name>;Database=NYCTaxi_Sample;Trusted_Connection=true"

# Specify a query on the nyctaxi_sample table.


# For variables on each axis, remove nulls. Use a WHERE clause and <> to do this.
sampleQuery <-"SELECT DISTINCT TOP 100 * from [dbo].[nyctaxi_sample] WHERE fare_amount <> '' AND
tip_amount <> ''"
cc <-RxInSqlServer(connectionString=connStr)

# Generate a scatter plot.


rxLinePlot(fare_amount ~ tip_amount, data = RxSqlServerData(sqlQuery=sampleQuery,
connectionString=connStr, computeContext=cc), type="p")

En la captura de pantalla siguiente se muestra la entrada y la salida del gráfico de dispersión.


6. Vinculación de las herramientas a R.exe
En el caso de los proyectos de desarrollo continuos y graves, debe instalar un entorno de desarrollo integrado
(IDE). Las herramientas de SQL Server y las herramientas de R integradas no están equipadas para un desarrollo
intensivo de R. Una vez que tenga código de trabajo, puede implementarlo como un procedimiento almacenado
para su ejecución en SQL Server.
Haga que el IDE apunte a las bibliotecas locales de R: R base, RevoScaleR, etc. La ejecución de cargas de trabajo
en un servidor SQL Server remoto se produce durante la ejecución del script, cuando el script invoca un
contexto de proceso remoto en SQL Server y accede a los datos y las operaciones de ese servidor.
RStudio
Al usar RStudio, puede configurar el entorno para que use las bibliotecas de R y los archivos ejecutables que se
corresponden con los de un servidor SQL Server remoto.
1. Compruebe las versiones del paquete de R instaladas en SQL Server. Para más información, vea Obtener
información sobre paquetes de R.
2. Instale Microsoft R Client o una de las opciones de servidor independiente para agregar RevoScaleR y
otros paquetes de R, incluida la distribución de R base usada por la instancia de SQL Server. Elija una
versión en el mismo nivel o inferior (los paquetes son compatibles con versiones anteriores) que
proporcione las mismas versiones de paquete que las del servidor. Para ver las versiones de paquete
instaladas en el servidor, vea Visualización de todos los paquetes de R instalados.
3. En RStudio, actualice la ruta de acceso de R para que apunte al entorno de R que proporciona
RevoScaleR, Microsoft R Open y otros paquetes de Microsoft.
Para una instalación de cliente de R, busque C:\Archivos de programa\Microsoft\R
Client\R_SERVER\bin\x64
Para un servidor independiente, busque C:\Archivos de
programa\Microsoft SQL Server\140\R_SERVER\Library o C:\Archivos de
programa\Microsoft SQL Server\130\R_SERVER\Library.
4. Cierre RStudio y vuelva a abrirlo.
Al volver a abrir RStudio, el motor de R predeterminado es el archivo ejecutable de R desde el cliente de R (o el
servidor independiente).
Herramientas de R para Visual Studio (RTVS )
Si aún no tiene un IDE preferido para R, se recomienda Herramientas de R para Visual Studio .
Descarga de Herramientas de R para Visual Studio (RTVS)
Instrucciones de instalación: RTVS está disponible en varias versiones de Visual Studio.
Introducción a Herramientas de R para Visual Studio
Conexión a SQL Server desde RTVS
En este ejemplo se usa Visual Studio 2017 Community Edition, con la carga de trabajo de ciencia de datos
instalada.
1. En el menú Archivo , seleccione Nuevo y haga clic en Proyecto .
2. El panel izquierdo contiene una lista de plantillas preinstaladas. Haga clic en R y seleccione Proyecto de
R . En el cuadro Nombre , escriba dbtest y haga clic en Aceptar .
Visual Studio crea una nueva carpeta de proyecto y un archivo de script predeterminado, Script.R .
3. Escriba .libPaths() en la primera línea del archivo de script y, después, presione CTRL + Entrar.
La ruta de acceso de la biblioteca de R actual debe aparecer en la ventana R interactivo .
4. Haga clic en el menú Herramientas de R y seleccione Ventanas para ver una lista de otras ventanas
específicas de R que se pueden mostrar en el área de trabajo.
Para ver la ayuda sobre los paquetes de la biblioteca actual, presione CTRL + 3.
Para ver las variables de R en el Explorador de variables , presione CTRL + 8.

Pasos siguientes
Dos tutoriales diferentes con ejercicios para que pueda practicar el cambio del contexto de proceso de una
instancia SQL Server local a una remota.
Tutorial: Uso de funciones RevoScaleR R con datos de SQL Server
Tutorial integral de ciencia de datos
Instalación de SQL Server Machine Learning
Services con Python y R en una máquina virtual de
Azure
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores


Aprenda a instalar Python y R con SQL Server Machine Learning Services en una máquina virtual de Azure. Esto
elimina las tareas de instalación y configuración de Machine Learning Services.
Siga estos pasos:
1. Aprovisionamiento de una máquina virtual de SQL Server en Azure
2. Desbloqueo del firewall
3. Habilitar devoluciones de llamada ODBC para clientes remotos
4. Agregar protocolos de red

Aprovisionamiento de una máquina virtual de SQL Server en Azure


Para obtener instrucciones paso a paso, consulte Aprovisionamiento de una máquina virtual Windows con
SQL Server en Azure Portal.
El paso Configuración de SQL Server es donde se agrega Machine Learning Services a la instancia.

Desbloqueo del firewall


El firewall de la máquina virtual de Azure incluye de forma predeterminada una regla que bloquea el acceso a la
red de las cuentas de usuario locales de R.
Debe deshabilitar esta regla para asegurarse de que puede tener acceso a la instancia de SQL Server desde un
cliente de ciencia de datos remoto. De lo contrario, el código de aprendizaje automático no se puede ejecutar en
contextos de cálculo que usen el área de trabajo de la máquina virtual.
Para permitir el acceso desde clientes de ciencia de datos remotos:
1. En la máquina virtual, abra Firewall de Windows con seguridad avanzada.
2. Seleccione Reglas de salida .
3. Deshabilite la siguiente regla:
Block network access for R local user accounts in SQL Server instance MSSQLSERVER

Habilitar devoluciones de llamada ODBC para clientes remotos


Si tiene previsto que los clientes llamen al servidor deban generar consultas de ODBC como parte de sus
soluciones, deberá asegurarse de que el Launchpad puede realizar llamadas a ODBC en nombre del cliente
remoto.
Para ello, debe permitir que las cuentas de trabajo SQL que usan Launchpad puedan iniciar sesión en la
instancia. Para obtener más información, vea Agregar SQLRUserGroup como usuario de base de datos.
Agregar protocolos de red
Habilitar las canalizaciones con nombre
R Services (en bases de datos) usa el protocolo Canalizaciones con nombre en las conexiones entre los
equipos cliente y servidor, así como en algunas conexiones de naturaleza interna. Si Canalizaciones con
nombre no está habilitado, debe instalarlo y habilitarlo tanto en la máquina virtual de Azure como en
cualquier cliente de ciencia de datos que se conecte al servidor.
Habilitar TCP/IP
Se necesita TCP/IP en las conexiones de bucle invertido. Si aparece el error "SQL Server no existe o se ha
denegado el acceso", habilite TCP/IP en la máquina virtual compatible con la instancia.
Instalación de Machine Learning Server
(independiente) o R Server (independiente) con el
programa de instalación de SQL Server
14/07/2021 • 10 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores

IMPORTANT
La compatibilidad con Machine Learning Server (anteriormente conocido como R Server) finalizará el 1 de julio de 2022.
Para obtener más información, consulte ¿Qué sucederá con Machine Learning Server?

El programa de instalación de SQL Server incluye una opción de características compar tidas para instalar un
servidor aprendizaje automático independiente que se ejecuta fuera de SQL Server. Se denomina Machine
Learning Ser ver (independiente) e incluye Python y R.
El programa de instalación de SQL Server incluye una opción de características compar tidas para instalar un
servidor aprendizaje automático independiente que se ejecuta fuera de SQL Server. En SQL Server 2016, esta
característica se denomina R Ser ver (independiente) .
Un servidor independiente instalado por el programa de instalación de SQL Server admite casos de uso y
escenarios como los siguientes:
Ejecución remota, alternancia entre sesión local y sesión remota en la misma consola
Operacionalización con nodos web y nodos de proceso
Implementación de servicio web: posibilidad de empaquetar scripts de R y Python en servicios web
Recopilación completa de bibliotecas de funciones de R y Python
En tanto que servidor independiente desacoplado de SQL Server, la configuración, la protección y el acceso del
entorno de R y Python se realizan a través del sistema operativo subyacente y las herramientas proporcionadas
en el servidor independiente, y no a través de SQL Server.
Como elemento accesorio de SQL Server, un servidor independiente es útil si es necesario desarrollar
soluciones de Machine Learning de alto rendimiento que pueden usar contextos de proceso remotos de toda la
gama de plataformas de datos admitidas. La ejecución se puede alternar entre el servidor local y un servidor de
Machine Learning Server remoto en un clúster de Spark o en otra instancia de SQL Server.

Lista de comprobación previa a la instalación


Si tiene instalada una versión anterior, como SQL Server 2016 R Server (independiente) o Microsoft R Server,
desinstálela antes de continuar.
Como norma general, se recomienda tratar las instalaciones independientes de servidor y de motor de base de
datos compatibles con instancias como mutuamente excluyentes, ya que así se evita la contención de recursos;
pero si tiene recursos suficientes, no hay ninguna prohibición que impida tener ambos instalados en el mismo
equipo físico.
Solo puede haber un servidor independiente en el equipo: o SQL Server Machine Learning Server
(independiente), o SQL Server R Server (independiente). Asegúrese de desinstalar una versión antes de agregar
una nueva.

Requisito de instalación de revisión


Solo en SQL Server 2016: Microsoft ha identificado un problema con la versión concreta de los archivos
binarios en tiempo de ejecución de Microsoft VC++ 2013 que instala como requisito previo SQL Server. Si esta
actualización de los archivos binarios en tiempo de ejecución de VC++ no se instala, puede que SQL Server
experimente problemas de estabilidad en determinados escenarios. Antes de instalar SQL Server, siga las
instrucciones de Notas de la versión de SQL Server para ver si el equipo necesita una revisión para los archivos
binarios en tiempo de ejecución de VC.

Obtener los medios de instalación


La ubicación de descarga de SQL Server depende de la edición:
Las ediciones Enterprise, Standard y Express de SQL Ser ver tienen licencia para su uso en
producción. En el caso de las ediciones Enterprise y Standard, póngase en contacto con su proveedor de
software para obtener los soportes de instalación. Encontrará información sobre la adquisición y un
directorio de asociados de Microsoft en el sitio web de adquisición de Microsoft.
Edición gratuita más reciente.

Ejecución del programa de instalación


En instalaciones locales, debe ejecutar el programa de instalación como administrador. Si instala SQL Server
desde un recurso compartido remoto, deberá usar una cuenta de dominio que tenga permisos de lectura y
ejecución para dicho recurso.
1. Inicie el Asistente para instalación.
2. Haga clic en la pestaña Instalación y seleccione Nueva instalación de Machine Learning Ser ver
(independiente) .
3. Cuando finalice la comprobación de reglas, acepte los términos de licencia de SQL Server y seleccione
una nueva instalación.
4. En la página Selección de características , las siguientes opciones ya deberían estar seleccionadas:
Microsoft Machine Learning Ser ver (independiente)
R y Python están seleccionados de forma predeterminada. Puede anular la selección de
cualquiera de estos lenguajes admitidos, pero se recomienda instalar al menos uno de ellos.
El resto de opciones se deben omitir.

NOTE
No instale las características compar tidas si el equipo ya tiene instalado Machine Learning Services para los análisis en
base de datos de SQL Server, ya que ello generaría bibliotecas duplicadas.
Aparte de eso, los scripts de R o de Python que se ejecutan en SQL Server se administran por medio de SQL Server para
que no entren en conflicto con la memoria que usan otros servicios de motor de base de datos, pero la instalación
independiente de Machine Learning Server no presenta estas restricciones y podría interferir con otras operaciones de
base de datos. Por último, los administradores de bases de datos suelen bloquear el acceso remoto a través de sesiones
RDP, que a menudo se usa para la operacionalización.
Por estos motivos, generalmente se recomienda instalar Machine Learning Server (independiente) en un equipo aparte de
SQL Server Machine Learning Services.

5. Acepte los términos de licencia para descargar e instalar las distribuciones de lenguaje base. Si el botón
Aceptar no está disponible, puede hacer clic en Siguiente .
6. En la página Listo para instalar , compruebe las opciones seleccionadas y haga clic en Instalar .
Ejecución del programa de instalación
En instalaciones locales, debe ejecutar el programa de instalación como administrador. Si instala SQL Server
desde un recurso compartido remoto, deberá usar una cuenta de dominio que tenga permisos de lectura y
ejecución para dicho recurso.
1. Inicie el Asistente para instalación.
2. En la pestaña Instalación , haga clic en Nueva instalación de R Ser ver (independiente) .

3. Cuando finalice la comprobación de reglas, acepte los términos de licencia de SQL Server y seleccione
una nueva instalación.
4. En la página Selección de características , la siguiente opción ya debería estar seleccionada:
R Ser ver (Standalone)
El resto de opciones se deben omitir.

NOTE
No instale las características compar tidas si está ejecutando el programa de instalación en un equipo en el
que R Services ya está instalado para los análisis en base de datos de SQL Server, ya que ello generaría bibliotecas
duplicadas.
Los scripts de R que se ejecutan en SQL Server se administran por medio de SQL Server para que no entren en
conflicto con la memoria que usan otros servicios de motor de base de datos, pero la instalación independiente de
R Server no presenta estas restricciones y podría interferir con otras operaciones de base de datos.
Por lo general, se recomienda instalar R Server (independiente) en un equipo aparte de SQL Server R Services (en
base de datos).

5. Acepte los términos de licencia para descargar e instalar las distribuciones de lenguaje base. Si el botón
Aceptar no está disponible, puede hacer clic en Siguiente .
6. En la página Listo para instalar , compruebe las opciones seleccionadas y haga clic en Instalar .

Establecimiento de variables de entorno


Solo de cara a la integración de características de R, conviene establecer la variable de entorno MKL_CBWR
para garantizar una salida coherente de los cálculos de la biblioteca Math Kernel Library (MKL) de Intel.
1. En el panel de control, haga clic en Sistema y seguridad > Sistema > Configuración avanzada del
sistema > Variables de entorno .
2. Cree un usuario o una variable del sistema.
Establezca el nombre de la variable en MKL_CBWR .
Establezca el valor de la variable en AUTO .

3. Reinicie el servidor.
Carpetas de instalación predeterminadas
En el desarrollo de R y Python es habitual tener varias versiones en el mismo equipo. Como la instalación se
realiza a través del programa de instalación de SQL Server, la distribución base se instala en una carpeta
asociada a la versión de SQL Server usada para la instalación.
En la siguiente tabla se muestran las rutas de acceso de las distribuciones de R y Python creadas por
instaladores de Microsoft. La tabla muestra información completa, como las rutas de acceso generadas por el
programa de instalación de SQL Server, así como el instalador independiente de Microsoft Machine Learning
Server.

VERSIÓ N M ÉTO DO DE IN STA L A C IÓ N C A RP ETA P REDET ERM IN A DA

SQL Server 2019 Machine Learning Asistente para la instalación de C:\Program Files\Microsoft SQL
Server (independiente) SQL Server 2019 Server\150\R_SERVER
C:\Program Files\Microsoft SQL
Server\150\PYTHON_SERVER

SQL Server 2017 Machine Learning Asistente para la instalación de C:\Program Files\Microsoft SQL
Server (independiente) SQL Server 2017 Server\140\R_SERVER
C:\Program Files\Microsoft SQL
Server\140\PYTHON_SERVER

Microsoft Machine Learning Server Instalador independiente de Windows C:\Program Files\Microsoft\ML


(independiente) Server\R_SERVER
C:\Program Files\Microsoft\ML
Server\PYTHON_SERVER

SQL Server Machine Learning Services Asistente para la instalación de C:\Program Files\Microsoft SQL
(en base de datos) SQL Server 2019, con la opción de Server\MSSQL15.
<instance_name>\R_SERVICES
lenguaje R
C:\Program Files\Microsoft SQL
Server\MSSQL15.
<instance_name>\PYTHON_SERVICES

SQL Server Machine Learning Services Asistente para la instalación de C:\Program Files\Microsoft SQL
(en base de datos) SQL Server 2017, con la opción de Server\MSSQL14.
<instance_name>\R_SERVICES
lenguaje R
C:\Program Files\Microsoft SQL
Server\MSSQL14.
<instance_name>\PYTHON_SERVICES

SQL Server 2016 R Server Asistente para la instalación de C:\Program Files\Microsoft SQL
(independiente) SQL Server 2016 Server\130\R_SERVER

SQL Server 2016 R Services (en base Asistente para la instalación de C:\Program Files\Microsoft SQL
de datos) SQL Server 2016 Server\MSSQL13.
<instance_name>\R_SERVICES

Aplicación de actualizaciones
Se recomienda aplicar la última actualización acumulativa tanto en el motor de base de datos como en los
componentes de Machine Learning. Las actualizaciones acumulativas se instalan a través del programa de
instalación.
En los dispositivos conectados a Internet, se puede descargar un archivo ejecutable autoextraíble. Al aplicar una
actualización del motor de base de datos, se incluyen automáticamente actualizaciones acumulativas de las
características existentes de R y Python.
En los servidores desconectados, se requieren pasos extra. Hay que obtener la actualización acumulativa del
motor de base de datos, así como los archivos .CAB de las características de Machine Learning. Todos los
archivos deben transferirse al servidor aislado y aplicarse manualmente.
1. Comience con una instancia de línea base. Solo se pueden aplicar actualizaciones acumulativas en las
instalaciones existentes:
Machine Learning Server (independiente) de la versión inicial de SQL Server 2019
Machine Learning Server (independiente) de la versión inicial de SQL Server 2017
R Server (independiente) de la versión inicial de SQL Server 2016, SQL Server 2016 SP1 o
SQL Server 2016 SP2
2. Cierre todas las sesiones de R o de Python abiertas y detenga todos los procesos que aún se estén
ejecutando en el sistema.
3. Si ha habilitado la ejecución de la operacionalización como nodos web y nodos de proceso en
implementaciones de servicio web, haga una copia de seguridad del archivo AppSettings.json como
medida de precaución. Este archivo se revisa al aplicar SQL Server 2017 CU13 o posterior, por lo que
probablemente quiera conservar una copia de seguridad de la versión original.
4. En una máquina conectada a Internet, descargue la actualización acumulativa más reciente para su
versión desde Actualizaciones más recientes de Microsoft SQL Server.
5. Descargue la actualización acumulativa más reciente. Es un archivo ejecutable.
6. En un dispositivo conectado a Internet, haga doble clic en el archivo .exe para ejecutar el programa de
instalación y realice todo el asistente para aceptar los términos de licencia, revisar las características
afectadas y supervisar el progreso hasta su término.
7. En un servidor sin conectividad a Internet:
Obtenga los archivos .CAB correspondientes a R y Python. Para obtener los vínculos de descarga,
vea Descargas de CAB de actualizaciones acumulativas en instancias de análisis en base de datos
de SQL Server.
Transfiera todos los archivos, el archivo ejecutable principal y los archivos .CAB a una carpeta del
equipo sin conexión.
Haga doble clic en el archivo .exe para ejecutar el programa de instalación. Cuando se instala una
actualización acumulativa en un servidor sin conectividad a Internet, se le pide que seleccione la
ubicación de los archivos .CAB de R y Python.
8. Después de la instalación, en un servidor donde se haya habilitado la implementación con nodos web y
nodos de ejecución, edite AppSettings.json y agregue una entrada "MMLResourcePath" directamente
en "MMLNativePath". Por ejemplo:

"ScorerParameters": {
"MMLNativePath": "C:\Program Files\Microsoft SQL
Server\140\R_SERVER\library\MicrosoftML\mxLibs\x64\",
"MMLResourcePath": "C:\Program Files\Microsoft SQL
Server\140\R_SERVER\library\MicrosoftML\mxLibs\x64\"
}

9. Ejecute la utilidad de CLI de administración para reiniciar los nodos web y de proceso. Para conocer los
pasos y la sintaxis, vea Supervisión, inicio y detención de nodos web y de proceso.

Herramientas de desarrollo
No se instala un IDE de desarrollo como parte de la instalación. Para más información sobre cómo configurar un
entorno de desarrollo, vea Configuración de herramientas de R y Configuración de herramientas de Python.
Pasos siguientes
Los desarrolladores de R pueden empezar con algunos ejemplos sencillos y conocer los aspectos básicos del
funcionamiento de R con SQL Server. Para conocer el siguiente paso, vea los vínculos siguientes:
Inicio rápido: Ejecutar R en T-SQL
Tutorial: Análisis en base de datos para desarrolladores de R
Los desarrolladores de Python pueden aprender a usar Python con SQL Server con estos tutoriales:
Tutorial de Python: Predicción de alquileres de esquíes con regresión lineal en
SQL Server Machine Learning Services
Tutorial de Python: Clasificación de clientes por categorías mediante la agrupación en clústeres k-means con
SQL Server Machine Learning Services
Inicio rápido: Ejecución de scripts de Python
sencillos con aprendizaje automático de SQL
14/07/2021 • 6 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En este inicio rápido, ejecutará un conjunto de scripts de Python sencillos mediante SQL Server Machine
Learning Services, Machine Learning Services en Azure SQL Managed Instance o Clústeres de macrodatos de
SQL Server. Aprenderá a usar el procedimiento almacenado sp_execute_external_script para ejecutar el script en
una instancia de SQL Server.

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.

Ejecución de un script sencillo


Para ejecutar un script de Python, necesita pasarlo como argumento al procedimiento almacenado del sistema,
sp_execute_external_script. Este procedimiento almacenado del sistema inicia el entorno de ejecución de Python
en el contexto de aprendizaje automático de SQL, pasa datos a Python, administra de forma segura las sesiones
de usuario de Python y devuelve los resultados al cliente.
En los pasos siguientes, deberá ejecutar este script de Python de ejemplo en la base de datos:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)

1. Abra una nueva ventana de consulta en Azure Data Studio conectada a su instancia de SQL.
2. Pase todo el script de Python al procedimiento almacenado sp_execute_external_script .
El script se pasa mediante el argumento @script . Todo lo que contenga el argumento @script tiene que
ser código de 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. Se calcula el resultado correcto y la función print de Python devuelve el resultado a la ventana


Mensajes .
Necesita tener el siguiente aspecto.
Resultados

STDOUT message(s) from external script:


0.5 2

Ejecución de un script Hola mundo


Un script de ejemplo típico es uno que simplemente muestra la cadena "Hola mundo". Ejecute el siguiente
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

Entre las entradas para el procedimiento almacenado sp_execute_external_script , se incluyen las siguientes:

EN T RA DA DESC RIP C IÓ N

@language define la extensión del lenguaje de la llamada (en este caso,


Python).

@script define los comandos que se pasarán al entorno de ejecución


de Python. Es necesario incluir todo el script de Python en
este argumento como texto Unicode. También puede
agregar texto a una variable del tipo nvarchar y, después,
llamar a la variable.

@input_data_1 Los datos devueltos por la consulta se pasan al entorno de


ejecución de Python, que los devuelve a su vez como una
trama de datos.

WITH RESULT SETS cláusula que define el esquema de la tabla de datos devuelta
a aprendizaje automático de SQL (se agrega "Hola mundo"
como el nombre de columna e int para el tipo de datos).

El comando muestra el texto siguiente:


H O L A M UN DO

Uso de entradas y salidas


De forma predeterminada, sp_execute_external_script acepta un único conjunto de datos como entrada, que se
suele proporcionar como una consulta SQL válida. Después, devuelve una única trama de datos de Python como
salida.
Por ahora, usaremos las variables de entrada y salida predeterminadas de sp_execute_external_script :
InputDataSet y OutputDataSet .
1. Cree una tabla pequeña con datos de prueba.

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 la instrucción SELECT para consultar la tabla.

SELECT *
FROM PythonTestData

Resultados

3. Ejecute el siguiente script de Python. Recupera los datos de la tabla mediante la instrucción SELECT , los
pasa mediante el entorno de ejecución de Python y devuelve los datos como una trama de datos. La
cláusula WITH RESULT SETS define el esquema de la tabla de datos devuelta para SQL y agrega el nombre
de columna 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));

Resultados

4. Ahora, cambie los nombres de las variables de entrada y salida. Los nombres predeterminados de las
variables de entrada y salida son InputDataSet y OutputDataSet ; el script siguiente cambia los
nombres a SQL_in y 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));

Tenga en cuenta que Python distingue mayúsculas de minúsculas. Las variables de entrada y salida
usadas en el script de Python (SQL_out y SQL_in ) tienen que coincidir con los nombres definidos con
@input_data_1_name y @output_data_1_name , incluido el uso de mayúsculas.

TIP
Solo se puede pasar un conjunto de datos de entrada como parámetro, y solo se puede devolver un conjunto de
datos. Pero puede llamar a otros conjuntos de datos desde dentro del código de Python y devolver salidas de
otros tipos, además del conjunto de datos. También puede agregar la palabra clave OUTPUT a cualquier
parámetro para que se devuelva con los resultados.

5. También puede generar valores con el script de Python sin datos de entrada ( @input_data_1 se establece
en blanco).
El script siguiente genera el texto "hola" y "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));

Resultados

NOTE
Python usa espacios iniciales para agrupar instrucciones. Por lo tanto, cuando el script de Python insertado abarca varias
líneas, como en el script anterior, no intente agregar sangría a los comandos de Python para que estén alineados con los
comandos de SQL. Por ejemplo, este script produciría un error:

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));
Comprobación de la versión de Python
Si quiere ver qué versión de Python está instalada en el servidor, ejecute el script siguiente.

EXECUTE sp_execute_external_script @language = N'Python'


, @script = N'
import sys
print(sys.version)
'
GO

La función print de Python devuelve la versión en la ventana Mensajes . En la salida de ejemplo siguiente,
puede ver que, en este caso, la versión de Python instalada es 3.5.2.
Resultados

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

Lista de paquetes de Python


Microsoft proporciona varios paquetes de Python preinstalados con Machine Learning Services.
Para ver una lista de los paquetes de Python instalados, incluida la versión, ejecute el script siguiente.

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

La lista es de pkg_resources.working_set en Python y se devuelve a SQL como una trama de datos.


Resultados

Pasos siguientes
Para obtener información sobre cómo usar estructuras de datos al usar Python en aprendizaje automático de
SQL, siga este inicio rápido:
Inicio rápido: Objetos y estructuras de datos con Python
Inicio rápido: Estructuras de datos y objetos
mediante Python con aprendizaje automático de
SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En este inicio rápido, aprenderá a usar estructuras de datos y tipos de datos al utilizar Python en SQL Server
Machine Learning Services, Machine Learning Services en Azure SQL Managed Instance o Clústeres de
macrodatos de SQL Server. Aprenderá a mover datos entre Python y SQL Server, así como los problemas
comunes que pueden producirse.
Aprendizaje automático de SQL se basa en el paquete pandas de Python, que es excelente para trabajar con
datos tabulares. Sin embargo, no puede pasar un valor escalar desde Python a la base de datos y esperar que
funcione. En esta guía de inicio rápido, revisará algunas definiciones de estructura de datos básicas a fin de
prepararle para incidencias adicionales que podrían ocurrir al pasar datos tabulares entre Python y la base de
datos.
Los conceptos más comunes son:
Una trama de datos es una tabla con varias columnas.
Una sola columna de una trama de datos es un objeto de tipo lista denominado serie.
Un valor único de una trama de datos se denomina celda y se obtiene acceso a ella mediante el índice.
¿Cómo se expondría el resultado único de un cálculo como una trama de datos, si una data.frame requiere una
estructura tabular? Una respuesta es representar el valor escalar único como una serie, que se convierte
fácilmente en una trama de datos.

NOTE
Cuando se devuelven fechas, Python en SQL usa DATETIME, que tiene un intervalo de fechas restringido de 1753-01-
01(-53690) a 9999-12-31(2958463).

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.
Valor escalar como una serie
Este ejemplo realiza algunas operaciones matemáticas simples y convierte un valor escalar en una serie.
1. Una serie requiere un índice, que puede asignarlo manualmente, como se muestra aquí, o mediante
programación.

EXECUTE sp_execute_external_script @language = N'Python'


, @script = N'
a = 1
b = 2
c = a/b
print(c)
s = pandas.Series(c, index =["simple math example 1"])
print(s)
'

Dado que la serie no se ha convertido a data.frame, los valores se devuelven en la ventana mensajes,
pero puede ver que los resultados se encuentran en un formato más tabular.
Resultados

STDOUT message(s) from external script:


0.5
simple math example 1 0.5
dtype: float64

2. Para aumentar la longitud de la serie, puede agregar nuevos valores mediante una matriz.

EXECUTE sp_execute_external_script @language = N'Python'


, @script = N'
a = 1
b = 2
c = a/b
d = a*b
s = pandas.Series([c,d])
print(s)
'

Si no especifica un índice, se genera un índice con valores que empiezan por 0 y terminan con la longitud
de la matriz.
Resultados

STDOUT message(s) from external script:


0 0.5
1 2.0
dtype: float64

3. Si aumenta el número de valores del índice , pero no agrega nuevos valores de datos , los valores de
datos se repiten para rellenar la serie.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
a = 1
b = 2
c = a/b
s = pandas.Series(c, index =["simple math example 1", "simple math example 2"])
print(s)
'

Resultados

STDOUT message(s) from external script:


0.5
simple math example 1 0.5
simple math example 2 0.5
dtype: float64

Conversión de series en tramas de datos


Después de convertir los resultados matemáticos escalares en una estructura tabular, debe convertirlos a un
formato que aprendizaje automático de SQL pueda controlar.
1. Para convertir una serie en data.frame, llame al método DataFrame de pandas.

EXECUTE sp_execute_external_script @language = N'Python'


, @script = N'
import pandas as pd
a = 1
b = 2
c = a/b
d = a*b
s = pandas.Series([c,d])
print(s)
df = pd.DataFrame(s)
OutputDataSet = df
'
WITH RESULT SETS((ResultValue FLOAT))

A continuación se muestra el resultado. Incluso si usa el índice para obtener valores específicos de
data.Frame, los valores del índice no forman parte de la salida.
Resultados

RESULT VA L UE

0.5

Los valores de salida en data.frame


Ahora se mostrarán los valores específicos de dos series de resultados matemáticos en data.frame. El primero
tiene un índice de valores secuenciales generados por Python. El segundo usa un índice arbitrario de valores de
cadena.
1. En el ejemplo siguiente se obtiene un valor de la serie utilizando un índice de entero.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pandas as pd
a = 1
b = 2
c = a/b
d = a*b
s = pandas.Series([c,d])
print(s)
df = pd.DataFrame(s, index=[1])
OutputDataSet = df
'
WITH RESULT SETS((ResultValue FLOAT))

Resultados

RESULT VA L UE

2.0

Recuerde que el índice generado automáticamente comienza en 0. Pruebe a usar un valor de índice fuera
de intervalo y vea lo que sucede.
2. Ahora obtenga un valor único de la otra trama de datos mediante un índice de cadena.

EXECUTE sp_execute_external_script @language = N'Python'


, @script = N'
import pandas as pd
a = 1
b = 2
c = a/b
s = pandas.Series(c, index =["simple math example 1", "simple math example 2"])
print(s)
df = pd.DataFrame(s, index=["simple math example 1"])
OutputDataSet = df
'
WITH RESULT SETS((ResultValue FLOAT))

Resultados

RESULT VA L UE

0.5

Si intenta usar un índice numérico para obtener un valor de esta serie, obtendrá un error.

Pasos siguientes
Para obtener información sobre cómo escribir funciones avanzadas de Python con aprendizaje automático de
SQL, siga este inicio rápido:
Escritura de funciones de Python avanzadas.
Inicio rápido: Funciones de Python con aprendizaje
automático de SQL
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
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:
Inicio rápido: Creación y puntuación de un modelo predictivo en Python
Inicio rápido: Creación y puntuación de un modelo
predictivo en Python con el aprendizaje automático
de SQL
14/07/2021 • 7 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En este inicio rápido, creará y entrenará un modelo predictivo con Python. Guardará el modelo en una tabla en
la instancia de SQL Server y, a continuación, lo usará para predecir los valores de los nuevos datos con
SQL Server Machine Learning Services, Machine Learning Services en Azure SQL Managed Instance o Clústeres
de macrodatos de SQL Server.
Creará y ejecutará dos procedimientos almacenados que se ejecutan en SQL. En el primero, se usa el conjunto
de datos de flores Iris clásico y se genera un modelo de Bayes naive para predecir una especie de Iris basándose
en las características florales. El segundo procedimiento es para puntuación: realiza una llamada al modelo
generado en el primer procedimiento para generar un conjunto de predicciones basadas en datos nuevos. Al
colocar código de Python en un procedimiento almacenado en SQL, las operaciones se incluyen en SQL, son
reutilizables y pueden recibir llamadas de otros procedimientos almacenados y aplicaciones cliente.
Después de completar este inicio rápido, aprenderá a:
Insertar código de Python en un procedimiento almacenado
Pasar entradas en el código mediante entradas en el procedimiento almacenado
Usar procedimientos almacenados para hacer operativos los modelos

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.
Los datos de ejemplo usados en este ejercicio son los datos de ejemplo de Iris. Siga las instrucciones en
Datos de demo de Iris para crear la base de datos de ejemplo irissql .

Creación de un procedimiento almacenado que genera modelos


En este paso, creará un procedimiento almacenado que genera un modelo para la predicción de resultados.
1. Abra Azure Data Studio, conéctese a su instancia de SQL y abra una nueva ventana de consulta.
2. Conéctese a la base de datos irissql.
USE irissql
GO

3. Copie el código siguiente para crear un procedimiento almacenado.


Cuando se ejecute, el procedimiento llama a sp_execute_external_script para iniciar una sesión de Python.
Las entradas que necesita el código de Python se pasan como parámetros de entrada en este
procedimiento almacenado. La salida será un modelo entrenado basado en la biblioteca de Python
scikit-learn para el algoritmo de aprendizaje automático.
Este código usa pickle para serializar el modelo. El modelo se entrenará con los datos de las columnas 0
a 4 de la tabla iris_data .
Los parámetros que verá en la segunda parte del procedimiento articulan entradas de datos y salidas del
modelo. Siempre que sea posible, intente que el código de Python que se ejecute en un procedimiento
almacenado tenga entradas y salidas bien definidas asignadas a las entradas y salidas del procedimiento
almacenado pasado en tiempo de ejecución.

CREATE PROCEDURE generate_iris_model (@trained_model VARBINARY(max) OUTPUT)


AS
BEGIN
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pickle
from sklearn.naive_bayes import GaussianNB
GNB = GaussianNB()
trained_model = pickle.dumps(GNB.fit(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width"]], iris_data[["SpeciesId"]].values.ravel()))
'
, @input_data_1 = N'select "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width",
"SpeciesId" from iris_data'
, @input_data_1_name = N'iris_data'
, @params = N'@trained_model varbinary(max) OUTPUT'
, @trained_model = @trained_model OUTPUT;
END;
GO

4. Asegúrese de que el procedimiento almacenado exista.


Si el script de T-SQL del paso anterior se ha ejecutado sin errores, se creará un procedimiento
almacenado denominado generate_iris_model y se agregará a la base de datos irissql . Encontrará los
procedimientos almacenados en el Explorador de objetos de Azure Data Studio, en Programación .

Ejecución del procedimiento para crear y entrenar modelos


En este paso, ejecutará el procedimiento del código insertado para crear un modelo entrenado y serializado
como resultado.
Los modelos almacenados para reutilizarlos en la base de datos se serializan como un flujo de bytes y se
almacenan en una columna VARBINARY(MAX) de una tabla de base de datos. Después de crear, entrenar,
serializar y guardar el modelo en una base de datos, otros procedimientos pueden llamarlo, o bien puede usarse
la función PREDICT de T-SQL en cargas de trabajo de puntuación.
1. Ejecute el script siguiente para realizar el procedimiento. La instrucción específica para ejecutar un
procedimiento almacenado es EXECUTE en la cuarta línea.
Este script específico elimina un modelo existente del mismo nombre (“Bayes naive”) para liberar espacio
para los nuevos modelos que se crearán al volver a ejecutar el mismo procedimiento. Si no se elimina el
modelo, se producirá un error que indica que el objeto ya existe. El modelo se almacena en una tabla
llamada iris_models , que se aprovisiona al crear la base de datos irissql .

DECLARE @model varbinary(max);


DECLARE @new_model_name varchar(50)
SET @new_model_name = 'Naive Bayes'
EXECUTE generate_iris_model @model OUTPUT;
DELETE iris_models WHERE model_name = @new_model_name;
INSERT INTO iris_models (model_name, model) values(@new_model_name, @model);
GO

2. Asegúrese de que se haya insertado el modelo.

SELECT * FROM dbo.iris_models

Resultados

M O DEL _N A M E M O DEL

Bayes naive 0x800363736B6C6561726E2E6E616976655F62617965


730A…

Creación y ejecución de un procedimiento almacenado para generar


predicciones
Después de crear, entrenar y guardar un modelo, continúe con el paso siguiente: crear un procedimiento
almacenado que genere predicciones. Para hacerlo, realice una llamada a sp_execute_external_script para que
ejecute un script de Python que cargue el modelo serializado y proporcione entradas de datos nuevos para
puntuarlos.
1. Ejecute el código siguiente para crear el procedimiento almacenado que realiza la puntuación. En tiempo
de ejecución, este procedimiento cargará un modelo binario que usará las columnas [1,2,3,4] como
entradas y especificará las columnas [0,5,6] como salida.
CREATE PROCEDURE predict_species (@model VARCHAR(100))
AS
BEGIN
DECLARE @nb_model VARBINARY(max) = (
SELECT model
FROM iris_models
WHERE model_name = @model
);

EXECUTE sp_execute_external_script @language = N'Python'


, @script = N'
import pickle
irismodel = pickle.loads(nb_model)
species_pred = irismodel.predict(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width"]])
iris_data["PredictedSpecies"] = species_pred
OutputDataSet = iris_data[["id","SpeciesId","PredictedSpecies"]]
print(OutputDataSet)
'
, @input_data_1 = N'select id, "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width",
"SpeciesId" from iris_data'
, @input_data_1_name = N'iris_data'
, @params = N'@nb_model varbinary(max)'
, @nb_model = @nb_model
WITH RESULT SETS((
"id" INT
, "SpeciesId" INT
, "SpeciesId.Predicted" INT
));
END;
GO

2. Ejecute el procedimiento almacenado y asigne al modelo el nombre "Bayes naive" para que el
procedimiento pueda identificar el modelo que tiene que usar.

EXECUTE predict_species 'Naive Bayes';


GO

Al ejecutar el procedimiento almacenado, se devuelve un elemento data.frame de Python. Esta línea de T-


SQL especifica el esquema de los resultados devueltos:
WITH RESULT SETS ( ("id" int, "SpeciesId" int, "SpeciesId.Predicted" int)); . Inserte los resultados en
una tabla nueva, o bien devuélvalos a una aplicación.

Los resultados son 150 predicciones sobre especies para los que se han usado características florales
como entradas. Para la mayoría de las observaciones, las especies predichas coinciden con las especies
reales.
Este ejemplo se ha simplificado mediante el conjunto de datos Iris de Python, tanto para entrenamiento
como para puntuación. Una forma más habitual es ejecutar una consulta SQL para obtener datos nuevos
y pasarlos a Python como InputDataSet .

Conclusión
En este ejercicio, ha aprendido a crear procedimientos almacenados dedicados a tareas distintas, donde cada
procedimiento almacenado ha usado el procedimiento almacenado del sistema sp_execute_external_script
para iniciar un proceso de Python. Las entradas en el proceso de Python se pasan a sp_execute_external como
parámetros. Tanto el script de Python en sí como las variables de datos de una base de datos se pasan como
entradas.
Normalmente, solo se usará Azure Data Studio con código de Python correcto, o bien código de Python que
devuelve resultados basados en filas. Como herramienta, Azure Data Studio admite lenguajes de consulta como
T-SQL y devuelve conjuntos de filas planos. Si el código genera un resultado visual como un diagrama de
dispersión o un histograma, necesita una herramienta o una aplicación de usuario final independiente que
pueda representar la imagen fuera del procedimiento almacenado.
Puede que a algunos desarrolladores de Python, acostumbrados a escribir scripts con todo incluido y que
procesan una amplia variedad de operaciones, les parezca innecesario organizar las tareas en procedimientos
separados. Pero el entrenamiento y la puntuación tienen distintos casos de uso. Al separarlos, puede colocar
cada tarea en una programación distinta y asignar permisos de ámbito distintos a cada operación.
La ventaja final es que los procesos pueden modificarse mediante parámetros. En este ejercicio, el código de
Python que ha creado el modelo (denominado "Bayes naive" en este ejemplo) se ha pasado como una entrada a
un segundo procedimiento almacenado que llama al modelo en un proceso de puntuación. Aunque en este
ejercicio solo se usa un modelo, puede imaginarse que, si parametriza el modelo en una tarea de puntuación, el
script resultaría más útil.

Pasos siguientes
Para obtener más información sobre los tutoriales de Python con el aprendizaje automático de SQL, consulte:
Tutoriales de Python
Inicio rápido: Ejecución de scripts de R sencillos con
aprendizaje automático de SQL
14/07/2021 • 6 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En este inicio rápido, ejecutará un conjunto de scripts de R sencillos mediante SQL Server Machine Learning
Services o clústeres de macrodatos. Aprenderá a usar el procedimiento almacenado sp_execute_external_script
para ejecutar el script en una instancia de SQL Server.
En este inicio rápido, ejecutará un conjunto de scripts de R sencillos mediante
SQL Server Machine Learning Services. Aprenderá a usar el procedimiento almacenado
sp_execute_external_script para ejecutar el script en una instancia de SQL Server.
En este inicio rápido, ejecutará un conjunto de scripts de R sencillos mediante SQL Server R Services. Aprenderá
a usar el procedimiento almacenado sp_execute_external_script para ejecutar el script en una instancia de
SQL Server.
En este inicio rápido, ejecutará un conjunto de scripts de R sencillos mediante Machine Learning Services en
Azure SQL Managed Instance. Descubrirá cómo usar el procedimiento almacenado sp_execute_external_script
para ejecutar el script en la base de datos.

Prerrequisitos
Para ejecutar este inicio rápido, debe cumplir los siguientes requisitos previos.
SQL Server Machine Learning Services. Para instalar Machine Learning Services, vea la Guía de instalación
para Windows o la Guía de instalación para Linux. También puede habilitar Machine Learning Services en
clústeres de macrodatos de SQL Server.
SQL Server Machine Learning Services. Para instalar Machine Learning Services, vea la Guía de instalación
para Windows.
SQL Server 2016 R Services. Para instalar R Services, consulte la Guía de instalación de Windows.
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 R. En este inicio rápido se utiliza
Azure Data Studio.

Ejecución de un script sencillo


Para ejecutar un script de R, necesita pasarlo como un argumento al procedimiento almacenado del sistema,
sp_execute_external_script. Este procedimiento almacenado del sistema inicia el entorno de ejecución de R, pasa
datos a R, administra de forma segura las sesiones de usuario de R y devuelve los resultados al cliente.
En los pasos siguientes, deberá ejecutar este script de R de ejemplo:
a <- 1
b <- 2
c <- a/b
d <- a*b
print(c(c, d))

1. Abra Azure Data Studio y conéctese al servidor.


2. Pase todo el script de R al procedimiento almacenado sp_execute_external_script .
El script se pasa mediante el argumento @script . Todo lo que contenga el argumento @script tiene que
ser código de R válido.

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'
a <- 1
b <- 2
c <- a/b
d <- a*b
print(c(c, d))
'

3. Se calcula el resultado correcto y la función de R print devuelve el resultado a la ventana Mensajes .


Necesita tener el siguiente aspecto.
Resultados

STDOUT message(s) from external script:


0.5 2

Ejecución de un script Hola mundo


Un script de ejemplo típico es uno que simplemente muestra la cadena "Hola mundo". Ejecute el siguiente
comando:

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'OutputDataSet<-InputDataSet'
, @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([Hello World] INT));
GO

Entre las entradas para el procedimiento almacenado sp_execute_external_script , se incluyen las siguientes:

EN T RA DA DESC RIP C IÓ N

@language define la extensión del lenguaje a la que se llamará (en este


caso, R).

@script define los comandos que se pasarán al entorno de ejecución


de R. Su script de R completo debe estar incluido en este
argumento, como texto Unicode. También puede agregar
texto a una variable del tipo nvarchar y, después, llamar a la
variable.
EN T RA DA DESC RIP C IÓ N

@input_data_1 Los datos devueltos por la consulta se pasan al entorno de


ejecución de R, que los devuelve a su vez como una trama
de datos.

WITH RESULT SETS Cláusula que define el esquema de la tabla de datos devuelta
(se agrega "Hola mundo" como el nombre de columna e int
para el tipo de datos).

El comando muestra el texto siguiente:

H O L A M UN DO

Uso de entradas y salidas


De forma predeterminada, sp_execute_external_script acepta un único conjunto de datos como entrada, que se
suele proporcionar como una consulta SQL válida. Después, devuelve una única trama de datos de R como
salida.
Por ahora, usaremos las variables de entrada y salida predeterminadas de sp_execute_external_script :
InputDataSet y OutputDataSet .
1. Cree una tabla pequeña con datos de prueba.

CREATE TABLE RTestData (col1 INT NOT NULL)

INSERT INTO RTestData


VALUES (1);

INSERT INTO RTestData


VALUES (10);

INSERT INTO RTestData


VALUES (100);
GO

2. Use la instrucción SELECT para consultar la tabla.

SELECT *
FROM RTestData

Resultados

3. Ejecute el siguiente script de R. Recupera los datos de la tabla mediante la instrucción SELECT , los pasa
mediante el entorno de ejecución de R y devuelve los datos como una trama de datos. La cláusula
WITH RESULT SETS define el esquema de la tabla de datos devuelta para SQL y agrega el nombre de
columna NewColName.
EXECUTE sp_execute_external_script @language = N'R'
, @script = N'OutputDataSet <- InputDataSet;'
, @input_data_1 = N'SELECT * FROM RTestData;'
WITH RESULT SETS(([NewColName] INT NOT NULL));

Resultados

4. Ahora, cambie los nombres de las variables de entrada y salida. Los nombres predeterminados de las
variables de entrada y salida son InputDataSet y OutputDataSet ; este script cambia los nombres a
SQL_in y SQL_out :

EXECUTE sp_execute_external_script @language = N'R'


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

Tenga en cuenta que R distingue mayúsculas de minúsculas. Las variables de entrada y salida usadas en
el script de R (SQL_out y SQL_in ) tienen que coincidir con los nombres definidos con
@input_data_1_name y @output_data_1_name , incluido el uso de mayúsculas.

TIP
Solo se puede pasar un conjunto de datos de entrada como parámetro, y solo se puede devolver un conjunto de
datos. Sin embargo, puede llamar a otros conjuntos de datos desde el interior del código R y puede devolver
salidas de otros tipos además del conjunto de datos. También puede agregar la palabra clave OUTPUT a cualquier
parámetro para que se devuelva con los resultados.

5. También puede generar valores con el script de R sin datos de entrada ( @input_data_1 se establece en
blanco).
El script siguiente genera el texto "hola" y "mundo".

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'
mytextvariable <- c("hello", " ", "world");
OutputDataSet <- as.data.frame(mytextvariable);
'
, @input_data_1 = N''
WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));

Resultados

Comprobación de la versión de R
Si quiere ver qué versión de R está instalada, ejecute el script siguiente.
EXECUTE sp_execute_external_script @language = N'R'
, @script = N'print(version)';
GO

La función print de R devuelve la versión en la ventana Mensajes . En la salida de ejemplo siguiente, puede
ver que, en este caso, la versión de R instalada es 3.4.4.
Resultados

STDOUT message(s) from external script:


_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 4.4
year 2018
month 03
day 15
svn rev 74408
language R
version.string R version 3.4.4 (2018-03-15)
nickname Someone to Lean On

Lista de paquetes de R
Microsoft proporciona varios paquetes de R preinstalados con Machine Learning Services.
Microsoft proporciona varios paquetes de R preinstalados con R Services.
Para ver una lista de los paquetes de R instalados (además de la versión, las dependencias, la licencia y la
información de la ruta de la biblioteca), ejecute el script siguiente.

EXEC sp_execute_external_script @language = N'R'


, @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", "Version", "Depends", "License",
"LibPath")]);'
WITH result sets((
Package NVARCHAR(255)
, Version NVARCHAR(100)
, Depends NVARCHAR(4000)
, License NVARCHAR(1000)
, LibPath NVARCHAR(2000)
));

El resultado es installed.packages() de R y se devuelve como un conjunto de resultados.


Resultados
Pasos siguientes
Para obtener información sobre cómo usar estructuras de datos al usar R en aprendizaje automático de SQL,
siga este inicio rápido:
Administración de tipos de datos y objetos mediante R en aprendizaje automático de SQL
Inicio rápido: Estructuras de datos, tipos de datos y
objetos mediante R con aprendizaje automático de
SQL
14/07/2021 • 10 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En este inicio rápido, aprenderá a usar estructuras de datos y tipos de datos cuando use R en SQL Server
Machine Learning Services o en clústeres de macrodatos. Aprenderá a mover datos entre R y SQL Server, así
como los problemas comunes que pueden producirse.
En este inicio rápido, aprenderá a usar estructuras de datos y tipos de datos cuando use R en SQL Server
Machine Learning Services. Aprenderá a mover datos entre R y SQL Server, así como los problemas comunes
que pueden producirse.
En este inicio rápido, aprenderá a usar estructuras de datos y tipos de datos cuando use R en SQL Server R
Services. Aprenderá a mover datos entre R y SQL Server, así como los problemas comunes que pueden
producirse.
En este inicio rápido, obtendrá información sobre cómo usar estructuras de datos y tipos de datos cuando use R
en Machine Learning Services en Azure SQL Managed Instance. Obtendrá información sobre cómo mover datos
entre R y SQL Managed Instance, así como las incidencias comunes que pueden producirse.
Algunos de los problemas más comunes son:
A veces, los tipos de datos no coinciden
Pueden producirse conversiones implícitas
En ocasiones se requieren operaciones de conversión
En R y SQL se usan objetos de datos distintos

Prerrequisitos
Para ejecutar este inicio rápido, debe cumplir los siguientes requisitos previos.
SQL Server Machine Learning Services. Para instalar Machine Learning Services, vea la Guía de instalación
para Windows o la Guía de instalación para Linux. También puede habilitar Machine Learning Services en
clústeres de macrodatos de SQL Server.
SQL Server Machine Learning Services. Para instalar Machine Learning Services, vea la Guía de instalación
para Windows.
SQL Server 2016 R Services. Para instalar R Services, consulte la Guía de instalación de Windows.
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 R. En este inicio rápido se utiliza
Azure Data Studio.

Devolver siempre una trama de datos


Cuando el script devuelve resultados de R a SQL Server, debe devolverlos como una trama de datos
(data.frame ). Cualquier otro tipo de objeto que se genere en el script (sea una lista, un factor, un vector o datos
binarios) debe convertirse en una trama de datos si se quiere incluir en los resultados del procedimiento
almacenado. Afortunadamente, hay varias funciones de R que permiten convertir otros objetos en una trama de
datos. Se puede incluso serializar un modelo binario y devolverlo en una trama de datos, algo que haremos más
adelante en esta guía de inicio rápido.
En primer lugar, experimentaremos con algunos objetos básicos de R (vectores, matrices y listas) y
comprobaremos cómo al convertirlos en una trama de datos, el resultado pasado a SQL Server cambia.
Compararemos estos dos scripts "Hola mundo" en R. Los scripts son casi idénticos, pero el primero devuelve
una única columna de tres valores, mientras que el segundo devuelve tres columnas con un valor único cada
una.
Ejemplo 1

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N' mytextvariable <- c("hello", " ", "world");
OutputDataSet <- as.data.frame(mytextvariable);'
, @input_data_1 = N' ';

Ejemplo 2

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N' OutputDataSet<- data.frame(c("hello"), " ", c("world"));'
, @input_data_1 = N' ';

Identificación de tipos de datos y esquemas


¿Por qué son tan diferentes los resultados?
Normalmente la respuesta se puede encontrar mediante el comando str() de R. Agregue la función
str(object_name) en cualquier lugar del script de R para que el esquema de datos del objeto de R especificado
se devuelva como un mensaje informativo.
Para averiguar por qué en los ejemplos 1 y 2 los resultados son tan diferentes, inserte la línea
str(OutputDataSet) al final de la definición de variable @script de cada instrucción, de esta forma:

Ejemplo 1 con la función str agregada

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N' mytextvariable <- c("hello", " ", "world");
OutputDataSet <- as.data.frame(mytextvariable);
str(OutputDataSet);'
, @input_data_1 = N' '
;

Ejemplo 2 con la función str agregada


EXECUTE sp_execute_external_script
@language = N'R',
@script = N' OutputDataSet <- data.frame(c("hello"), " ", c("world"));
str(OutputDataSet);' ,
@input_data_1 = N' ';

Ahora, revise el texto de Mensajes para ver por qué el resultado es diferente.
Resultados: Ejemplo 1

STDOUT message(s) from external script:


'data.frame': 3 obs. of 1 variable:
$ mytextvariable: Factor w/ 3 levels " ","hello","world": 2 1 3

Resultados: Ejemplo 2

STDOUT message(s) from external script:


'data.frame': 1 obs. of 3 variables:
$ c..hello..: Factor w/ 1 level "hello": 1
$ X... : Factor w/ 1 level " ": 1
$ c..world..: Factor w/ 1 level "world": 1

Como puede ver, un pequeño cambio en la sintaxis de R ha tenido un gran efecto en el esquema de los
resultados. No entraremos en los motivos, pero las diferencias en los tipos de datos de R se explican en los
detalles de la sección Estructuras de datos en "R avanzada" de Hadley Wickham.
Por ahora, simplemente tenga presente que deberá comprobar los resultados esperados al convertir objetos de
R en tramas de datos.

TIP
También puede usar funciones de identidad de R, como is.matrix , is.vector , para devolver información sobre la
estructura de datos interna.

Conversión implícita de objetos de datos


Cada objeto de datos de R tiene sus propias reglas sobre cómo controlar los valores cuando se combinan con
otros objetos de datos si los dos objetos de datos tienen el mismo número de dimensiones, o bien si un objeto
de datos contiene tipos de datos heterogéneos.
En primer lugar, cree una tabla pequeña de datos de prueba.

CREATE TABLE RTestData (col1 INT NOT NULL)

INSERT INTO RTestData


VALUES (1);

INSERT INTO RTestData


VALUES (10);

INSERT INTO RTestData


VALUES (100);
GO

Por ejemplo, supongamos que ejecutamos la siguiente instrucción para multiplicar matrices mediante R. Una
matriz de una sola columna con tres valores se multiplica por una matriz con cuatro valores, de lo que se espera
como resultado una matriz 4x3.

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
x <- as.matrix(InputDataSet);
y <- array(12:15);
OutputDataSet <- as.data.frame(x %*% y);'
, @input_data_1 = N' SELECT [Col1] from RTestData;'
WITH RESULT SETS (([Col1] int, [Col2] int, [Col3] int, Col4 int));

En segundo plano, la columna de tres valores se convierte en una matriz de una sola columna. Como una matriz
es simplemente un caso especial de una matriz de R, la matriz y se convierte de forma implícita en una matriz
de una sola columna para que los dos argumentos coincidan.
Resultados

C OL1 C OL2 C OL3 C OL4

12 13 14 15

120 130 140 150

1200 1300 1400 1.500

Con todo, observe lo que ocurre cuando se cambia el tamaño de la matriz y .

execute sp_execute_external_script
@language = N'R'
, @script = N'
x <- as.matrix(InputDataSet);
y <- array(12:14);
OutputDataSet <- as.data.frame(y %*% x);'
, @input_data_1 = N' SELECT [Col1] from RTestData;'
WITH RESULT SETS (([Col1] int ));

Ahora R devuelve un valor único como resultado.


Resultados

C OL1

1542

¿Por qué? En este caso, dado que los dos argumentos se pueden tratar como vectores de la misma longitud, R
devuelve el producto interior como una matriz. Este es el comportamiento esperado según las reglas de álgebra
lineal, pero podría causar problemas si la aplicación auxiliar espera que el esquema de salida no cambie nunca.

TIP
¿Obtiene errores? Asegúrese de que está ejecutando el procedimiento almacenado en el contexto de la base de datos que
contiene la tabla y no en maestro u otra base de datos.
Además, se recomienda evitar el uso de tablas temporales en estos ejemplos. Algunos clientes de R finalizarán una
conexión entre lotes y eliminarán tablas temporales.
Combinación o multiplicación de columnas de longitud diferente
R proporciona una gran flexibilidad a la hora de trabajar con vectores de diferentes tamaños y de combinar
estas estructuras (similares a las columnas) en tramas de datos. Las listas de vectores pueden ser similares a una
tabla, pero no siguen todas las reglas que rigen las tablas de base de datos.
Por ejemplo, en el script siguiente se define una matriz numérica de longitud 6 y se almacena en la variable de R
df1 . Después, la matriz numérica se combina con los enteros de la tabla RTestData, que contiene tres (3)
valores para crear una nueva trama de datos, df2 .

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
df1 <- as.data.frame( array(1:6) );
df2 <- as.data.frame( c( InputDataSet , df1 ));
OutputDataSet <- df2'
, @input_data_1 = N' SELECT [Col1] from RTestData;'
WITH RESULT SETS (( [Col2] int not null, [Col3] int not null ));

Para rellenar la trama de datos, R repite los elementos recuperados de RTestData tantas veces como sea
necesario para que coincidan con el número de elementos de la matriz df1 .
Resultados

C OL2 C OL3

1 1

10 2

100 3

1 4

10 5

100 6

Recuerde que una trama de datos solo es similar a una tabla en cuanto al aspecto. En realidad es una lista de
vectores.

Conversión de datos
R y SQL Server no usan los mismos tipos de datos, de modo que cuando se ejecuta una consulta en SQL Server
para obtener datos y luego se pasa al tiempo de ejecución de R, suele producirse algún tipo de conversión
implícita. Otra serie de conversiones ocurre cuando se devuelven datos de R a SQL Server.
SQL Server inserta los datos de la consulta en el proceso de R administrado por el servicio Launchpad y los
convierte en una representación interna para una mayor eficacia.
El runtime de R carga los datos en una variable data.frame y realiza sus propias operaciones en los datos.
El motor de base de datos devuelve los datos a SQL Server por medio de una conexión segura interna y los
presenta como tipos de datos de SQL Server.
Los datos se obtienen estableciendo una conexión a SQL Server con una biblioteca de red o de cliente capaz
de emitir consultas SQL y tratar conjuntos de datos tabulares. Esta aplicación cliente puede afectar a los
datos de otras maneras.
Para ver cómo funciona esto, ejecute una consulta como esta en el almacén de datos AdventureWorksDW. Esta
vista devuelve datos de ventas que se usan en la creación de previsiones.

USE AdventureWorksDW
GO

SELECT ReportingDate
, CAST(ModelRegion as varchar(50)) as ProductSeries
, Amount
FROM [AdventureWorksDW].[dbo].[vTimeSeries]
WHERE [ModelRegion] = 'M200 Europe'
ORDER BY ReportingDate ASC

NOTE
Puede usar cualquier versión de AdventureWorks o crear una consulta diferente con una base de datos propia. Lo
importante es intentar controlar algunos datos que contienen valores numéricos, de texto y de fecha y hora.

Ahora, intente pegar esta consulta como entrada para el procedimiento almacenado.

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N' str(InputDataSet);
OutputDataSet <- InputDataSet;'
, @input_data_1 = N'
SELECT ReportingDate
, CAST(ModelRegion as varchar(50)) as ProductSeries
, Amount
FROM [AdventureWorksDW].[dbo].[vTimeSeries]
WHERE [ModelRegion] = ''M200 Europe''
ORDER BY ReportingDate ASC ;'
WITH RESULT SETS undefined;

Si se produce un error, probablemente tendrá que realizar algunas modificaciones en el texto de consulta. Por
ejemplo, el predicado de cadena en la cláusula WHERE se debe incluir entre dos conjuntos de comillas simples.
Después de conseguir que la consulta funcione, revise los resultados de la función str para ver cómo R
procesa los datos de entrada.
Resultados

STDOUT message(s) from external script: 'data.frame': 37 obs. of 3 variables:


STDOUT message(s) from external script: $ ReportingDate: POSIXct, format: "2010-12-24 23:00:00" "2010-12-24
23:00:00"
STDOUT message(s) from external script: $ ProductSeries: Factor w/ 1 levels "M200 Europe",..: 1 1 1 1 1 1 1
1 1 1
STDOUT message(s) from external script: $ Amount : num 3400 16925 20350 16950 16950

La columna de fecha y hora se ha procesado con el tipo de datos de R, POSIXct .


La columna de texto "ProductSeries" se ha identificado como un factor esto es, como una variable
categórica. Los valores de cadena se procesan como factores de forma predeterminada. Si pasa una cadena a
R, se convierte en un entero para uso interno y después se vuelve a asignar a la cadena de salida.
Resumen
Incluso en estos pequeños ejemplos, puede ver la necesidad de comprobar los efectos de la conversión de datos
al pasar consultas SQL como entrada. Dado que R no admite algunos tipos de datos de SQL Server, tenga en
cuenta estas formas de evitar cualquier tipo de error:
Compruebe los datos de antemano y discierna qué columnas o valores del esquema pueden ser
problemáticos cuando se pasen al código de R.
En el origen de datos de entrada, especifique las columnas de forma individual, en lugar de usar SELECT * , y
sepa cómo se va a procesar cada columna.
Para evitar sorpresas, realice las conversiones explícitas necesarias al preparar los datos de entrada.
Evite pasar columnas de datos (como GUID o ROWGUID) que causan errores y no son útiles para el
modelado.
Para obtener más información sobre los tipos de datos admitidos y no admitidos, vea Bibliotecas de R y tipos de
datos.

Pasos siguientes
Para obtener información sobre cómo escribir funciones avanzadas de R con aprendizaje automático de SQL,
siga este inicio rápido:
Escritura de funciones de R avanzadas con aprendizaje automático de SQL
Inicio rápido: Funciones de R con aprendizaje
automático de SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En este inicio rápido, aprenderá a usar las funciones matemáticas y de utilidad de R con SQL Server Machine
Learning Services o en clústeres de macrodatos. Las funciones estadísticas suelen ser complicadas de
implementar en T-SQL, pero esto se puede hacer en R con solo unas pocas líneas de código.
En este inicio rápido, aprenderá a usar las funciones matemáticas y de utilidad de R con SQL Server Machine
Learning Services. Las funciones estadísticas suelen ser complicadas de implementar en T-SQL, pero esto se
puede hacer en R con solo unas pocas líneas de código.
En este inicio rápido, aprenderá a usar las funciones matemáticas y de utilidad de R con SQL Server R Services.
Las funciones estadísticas suelen ser complicadas de implementar en T-SQL, pero esto se puede hacer en R con
solo unas pocas líneas de código.
En este inicio rápido, obtendrá información sobre cómo usar estructuras de datos y tipos de datos cuando use R
en Machine Learning Services en Azure SQL Managed Instance. Obtendrá in sobre cómo mover datos entre R y
SQL Managed Instance, así como las incidencias comunes que pueden producirse.

Prerrequisitos
Para ejecutar este inicio rápido, debe cumplir los siguientes requisitos previos.
SQL Server Machine Learning Services. Para instalar Machine Learning Services, vea la Guía de instalación
para Windows o la Guía de instalación para Linux. También puede habilitar Machine Learning Services en
clústeres de macrodatos de SQL Server.
SQL Server Machine Learning Services. Para instalar Machine Learning Services, vea la Guía de instalación
para Windows.
SQL Server 2016 R Services. Para instalar R Services, consulte la Guía de instalación de Windows.
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 R. 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 stats de R, que se instala y carga de forma predeterminada. El
paquete contiene cientos de funciones para tareas estadísticas comunes, entre otras, la función rnorm , 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 R devuelve 100 números en una media de 50, lo cual da una desviación
estándar de 3.
as.data.frame(rnorm(100, mean = 50, sd = 3));

Para llamar a esta línea de R desde T-SQL, agregue la función de R del parámetro de script de
sp_execute_external_script , de la manera siguiente:

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
OutputDataSet <- as.data.frame(rnorm(100, mean = 50, sd =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?


Puede hacerlo con facilidad en combinación con T-SQL. Defina un procedimiento almacenado que obtenga los
argumentos del usuario y, a continuación, pase los argumentos al script de R como variables.

CREATE PROCEDURE MyRNorm (


@param1 INT
, @param2 INT
, @param3 INT
)
AS
EXECUTE sp_execute_external_script @language = N'R'
, @script = N'
OutputDataSet <- as.data.frame(rnorm(mynumbers, mymean, 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 comienza con @params define todas las variables usadas por el código de R y los
correspondientes tipos de datos de SQL.
Las líneas inmediatamente a continuación asignan los nombres de parámetro de SQL a los nombres de
variable de R correspondientes.
Ahora que ha ajustado la función de R en un procedimiento almacenado, puede llamar a la función fácilmente y
pasar distintos valores, como a continuación:

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

Uso de funciones de utilidad de R para solucionar problemas


El paquete utils , instalado de forma predeterminada, ofrece diversas funciones de utilidad para investigar el
entorno actual de R. Estas funciones pueden ser útiles si encuentra discrepancias en la forma en que el código
de R se ejecuta en SQL Server y en entornos externos.
Por ejemplo, puede usar las funciones de control de tiempo del sistema de R, como system.time y proc.time ,
para capturar el tiempo que tardan los procesos de R y analizar incidencias de rendimiento. Para obtener un
ejemplo, vea el tutorial Creación de características de datos donde las funciones de control de tiempo de R se
incrustan en la solución.

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
library(utils);
start.time <- proc.time();

# Run R processes

elapsed_time <- proc.time() - start.time;'

Para otras funciones útiles, consulte Uso de funciones de generación de perfiles de código de R para mejorar el
rendimiento.

Pasos siguientes
Para crear un modelo de aprendizaje automático usando R con aprendizaje automático de SQL, siga este inicio
rápido:
Creación y puntuación de un modelo predictivo en R con el aprendizaje automático de SQL
Inicio rápido: Creación y puntuación de un modelo
predictivo en R con el aprendizaje automático de
SQL
14/07/2021 • 7 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En este inicio rápido, creará y entrenará un modelo predictivo con T. Guardará el modelo en una tabla de su
instancia de SQL Server y, después, usará el modelo para predecir valores a partir de datos nuevos mediante
SQL Server Machine Learning Services o en clústeres de macrodatos.
En este inicio rápido, creará y entrenará un modelo predictivo con T. Guardará el modelo en una tabla de su
instancia de SQL Server y, después, usará el modelo para predecir valores a partir de datos nuevos mediante
SQL Server Machine Learning Services.
En este inicio rápido, creará y entrenará un modelo predictivo con T. Guardará el modelo en una tabla de su
instancia de SQL Server y, después, usará el modelo para predecir valores a partir de datos nuevos mediante
SQL Server R Services.
En este inicio rápido, creará y entrenará un modelo predictivo con T. Guardará el modelo en una tabla de su
instancia de SQL Server y, después, usará el modelo para predecir valores a partir de datos nuevos mediante
Machine Learning Services en Azure SQL Managed Instance.
Creará y ejecutará dos procedimientos almacenados que se ejecutan en SQL. El primero usa el conjunto de
datos mtcars incluido con R y genera un sencillo modelo lineal generalizado (GLM) que predice la probabilidad
de que un vehículo tenga transmisión manual. El segundo procedimiento es para puntuación: realiza una
llamada al modelo generado en el primer procedimiento para generar un conjunto de predicciones basadas en
datos nuevos. Al colocar código de R en un procedimiento almacenado en SQL, las operaciones se incluyen en
SQL, son reutilizables y pueden recibir llamadas de otros procedimientos almacenados y aplicaciones cliente.

TIP
Para más información sobre los modelos lineales, pruebe este tutorial, donde se describe el proceso para adaptar un
modelo mediante rxLinMod: Ajuste de modelos lineales

Después de completar este inicio rápido, aprenderá a:


Insertar código de R en un procedimiento almacenado
Pasar entradas en el código mediante entradas en el procedimiento almacenado
Usar procedimientos almacenados para hacer operativos los modelos

Prerrequisitos
Para ejecutar este inicio rápido, debe cumplir los siguientes requisitos previos.
SQL Server Machine Learning Services. Para instalar Machine Learning Services, vea la Guía de instalación
para Windows o la Guía de instalación para Linux. También puede habilitar Machine Learning Services en
clústeres de macrodatos de SQL Server.
SQL Server Machine Learning Services. Para instalar Machine Learning Services, vea la Guía de instalación
para Windows.
SQL Server 2016 R Services. Para instalar R Services, consulte la Guía de instalación de Windows.
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 R. En este inicio rápido se utiliza
Azure Data Studio.

Creación del modelo


Para crear el modelo, creará los datos de origen para el entrenamiento, creará el modelo y lo entrenará con los
datos; después, guardará el modelo en una base de datos, donde podrá usarse para generar predicciones con
datos nuevos.
Crear el origen de datos
1. Abra Azure Data Studio, conéctese a su instancia y abra una nueva ventana de consulta.
2. En primer lugar, cree una tabla para guardar los datos de entrenamiento.

CREATE TABLE dbo.MTCars(


mpg decimal(10, 1) NOT NULL,
cyl int NOT NULL,
disp decimal(10, 1) NOT NULL,
hp int NOT NULL,
drat decimal(10, 2) NOT NULL,
wt decimal(10, 3) NOT NULL,
qsec decimal(10, 2) NOT NULL,
vs int NOT NULL,
am int NOT NULL,
gear int NOT NULL,
carb int NOT NULL
);

3. Inserte los datos desde el conjunto de datos integrado mtcars .

INSERT INTO dbo.MTCars


EXEC sp_execute_external_script @language = N'R'
, @script = N'MTCars <- mtcars;'
, @input_data_1 = N''
, @output_data_1_name = N'MTCars';

TIP
Muchos conjuntos de datos, pequeños y grandes, se incluyen con el entorno en tiempo de ejecución de R. Para
obtener una lista de los conjuntos de datos instalados en R, escriba library(help="datasets") desde un
símbolo del sistema de R.

Creación y entrenamiento del modelo


Los datos de velocidad de coches contienen dos columnas, ambas numéricas: caballos de vapor ( hp ) y peso (
wt ). Con estos datos, creará un modelo lineal generalizado (GLM) que calcula la probabilidad de que un
vehículo tenga transmisión manual.
Para crear el modelo, defina la fórmula contenida en el código de R y pase los datos como un parámetro de
entrada.
DROP PROCEDURE IF EXISTS generate_GLM;
GO
CREATE PROCEDURE generate_GLM
AS
BEGIN
EXEC sp_execute_external_script
@language = N'R'
, @script = N'carsModel <- glm(formula = am ~ hp + wt, data = MTCarsData, family = binomial);
trained_model <- data.frame(payload = as.raw(serialize(carsModel, connection=NULL)));'
, @input_data_1 = N'SELECT hp, wt, am FROM MTCars'
, @input_data_1_name = N'MTCarsData'
, @output_data_1_name = N'trained_model'
WITH RESULT SETS ((model VARBINARY(max)));
END;
GO

El primer argumento de glm es el parámetro formula, que define am como dependiente de hp + wt .


Los datos de entrada se almacenan en la variable MTCarsData , que se rellena con la consulta SQL. Si no
asigna un nombre específico a los datos de entrada, el nombre predeterminado de la variable será
InputDataSet.
Almacenamiento del modelo en la base de datos
A continuación, almacene el modelo en una base de datos para que pueda usarlo con fines de predicción o para
volver a entrenarlo.
1. Cree una tabla para almacenar el modelo.
El resultado de un paquete de R que crea un modelo suele ser un objeto binario. Por tanto, la tabla donde
se almacena el modelo necesita tener una columna del tipo varbinar y(max) .

CREATE TABLE GLM_models (


model_name varchar(30) not null default('default model') primary key,
model varbinary(max) not null
);

2. Ejecute la siguiente instrucción Transact-SQL para llamar al procedimiento almacenado, genere el modelo
y guárdelo en la tabla que ha creado.

INSERT INTO GLM_models(model)


EXEC generate_GLM;

TIP
Si ejecuta este código una segunda vez, se mostrará el error siguiente: "Infracción de restricción de CLAVE
PRINCIPAL… No se puede insertar una clave duplicada en el objeto dbo.stopping_distance_models". Una opción
para evitar este error consiste en actualizar el nombre de cada nuevo modelo. Por ejemplo, podría cambiar el
nombre a algo más descriptivo e incluir el tipo de modelo, el día en que lo creó, etc.

UPDATE GLM_models
SET model_name = 'GLM_' + format(getdate(), 'yyyy.MM.HH.mm', 'en-gb')
WHERE model_name = 'default model'

Puntuación de datos nuevos con el modelo entrenado


Puntuación es un término usado en ciencia de datos que equivale a generar predicciones, probabilidades y otros
valores basándose en datos nuevos proporcionados a un modelo entrenado. Usará el modelo que ha creado en
la sección anterior para puntuar predicciones en relación con datos nuevos.
Creación de una tabla de datos nuevos
Primero, cree una tabla con datos nuevos.

CREATE TABLE dbo.NewMTCars(


hp INT NOT NULL
, wt DECIMAL(10,3) NOT NULL
, am INT NULL
)
GO

INSERT INTO dbo.NewMTCars(hp, wt)


VALUES (110, 2.634)

INSERT INTO dbo.NewMTCars(hp, wt)


VALUES (72, 3.435)

INSERT INTO dbo.NewMTCars(hp, wt)


VALUES (220, 5.220)

INSERT INTO dbo.NewMTCars(hp, wt)


VALUES (120, 2.800)
GO

Predicción de transmisión manual


Para obtener predicciones basándose en su modelo, escriba un script de SQL que realice lo siguiente:
1. Obtener el modelo que quiere
2. Obtener los nuevos datos de entrada
3. Llamar a una función de predicción de R que sea compatible con ese modelo
Con el tiempo, la tabla puede contener varios modelos de R, todos creados con parámetros o algoritmos
diferentes o entrenados a partir de distintos subconjuntos de datos. En este ejemplo, usaremos el modelo
denominado default model .

DECLARE @glmmodel varbinary(max) =


(SELECT model FROM dbo.GLM_models WHERE model_name = 'default model');

EXEC sp_execute_external_script
@language = N'R'
, @script = N'
current_model <- unserialize(as.raw(glmmodel));
new <- data.frame(NewMTCars);
predicted.am <- predict(current_model, new, type = "response");
str(predicted.am);
OutputDataSet <- cbind(new, predicted.am);
'
, @input_data_1 = N'SELECT hp, wt FROM dbo.NewMTCars'
, @input_data_1_name = N'NewMTCars'
, @params = N'@glmmodel varbinary(max)'
, @glmmodel = @glmmodel
WITH RESULT SETS ((new_hp INT, new_wt DECIMAL(10,3), predicted_am DECIMAL(10,3)));

El script anterior realiza los pasos siguientes:


Utilice una instrucción SELECT para obtener un modelo único de la tabla y pasarlo como parámetro de
entrada.
Después de recuperar el modelo de la tabla, llame a la función unserialize en el modelo.
Aplique la función predict con los argumentos apropiados al modelo y proporcione los nuevos datos de
entrada.

NOTE
En el ejemplo, la función str se agrega durante la fase de pruebas para comprobar el esquema de los datos que se
devuelven desde R. Puede quitar la instrucción más tarde.
Los nombres de columna usados en el script de R no tienen que pasarse necesariamente al resultado del procedimiento
almacenado. Esta es la cláusula WITH RESULTS usada para definir nuevos nombres de columna.

Resultados

También puede usar la instrucción PREDICT (Transact-SQL) para generar una puntuación o un valor predicho
basándose en un modelo almacenado.

Pasos siguientes
Para obtener más información sobre los tutoriales de R con el aprendizaje automático de SQL, consulte:
Tutoriales de R
Tutoriales de Python para aprendizaje automático
de SQL
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En este artículo se describen los tutoriales e inicios rápidos de Python para Machine Learning Services en
SQL Server y en clústeres de macrodatos.
En este artículo se describen los tutoriales e inicios rápidos de Python para SQL Server Machine Learning
Services.
En este artículo se describen los tutoriales e inicios rápidos de Python para Machine Learning Services en Azure
SQL Managed Instance.

Tutoriales de Python
T UTO RIA L DESC RIP C IÓ N

Predicción de alquiler de esquís con regresión lineal Utilice Python con regresión lineal para predecir el número
de alquileres de esquí. Use cuadernos en Azure Data Studio
para preparar los datos y entrenar el modelo y T-SQL para la
implementación de modelo.

Categorización de clientes con agrupación en clústeres k- Utilice Python para desarrollar e implementar un modelo de
means agrupación en clústeres K-means para clasificar a los clientes.
Use cuadernos en Azure Data Studio para preparar los datos
y entrenar el modelo y T-SQL para la implementación de
modelo.

Creación de un modelo mediante revoscalepy Muestra cómo ejecutar código desde un cliente de Python
remoto mediante SQL Server como contexto de proceso. En
el tutorial se crea un modelo con la función r xLinMod de la
biblioteca revoscalepy .

Análisis de datos de Python para desarrolladores de SQL En este tutorial integral se muestra el proceso de
compilación de una solución completa de Python mediante
T-SQL.

T UTO RIA L DESC RIP C IÓ N

Predicción de alquiler de esquís con regresión lineal Utilice Python con regresión lineal para predecir el número
de alquileres de esquí. Use cuadernos en Azure Data Studio
para preparar los datos y entrenar el modelo y T-SQL para la
implementación de modelo.

Categorización de clientes con agrupación en clústeres k- Utilice Python para desarrollar e implementar un modelo de
means agrupación en clústeres K-means para clasificar a los clientes.
Use cuadernos en Azure Data Studio para preparar los datos
y entrenar el modelo y T-SQL para la implementación de
modelo.
Inicios rápidos de Python
Si no está familiarizado con el aprendizaje automático de SQL, puede probar también los inicios rápidos de
Python.

GUÍA DE IN IC IO RÁ P IDO DESC RIP C IÓ N

Ejecución de scripts de Python simples Conozca los conceptos básicos sobre cómo llamar a Python
en T-SQL con sp_execute_external_script.

Objetos y estructuras de datos con Python Muestra cómo SQL usa el paquete Pandas de Python para
administrar estructuras de datos.

Creación y puntuación de un modelo predictivo en Python Explica cómo crear, entrenar y usar un modelo de Python
para hacer predicciones a partir de nuevos datos.

Pasos siguientes
Extensión de Python en SQL Server
Tutorial de Python: Predicción de alquileres de
esquíes con regresión lineal con aprendizaje
automático de SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En esta serie de tutoriales de cuatro partes, usará Python y una regresión lineal en SQL Server Machine
Learning Services o en clústeres de macrodatos para predecir el número de alquileres de esquíes. En este
tutorial, se usa un cuaderno de Python en Azure Data Studio.
En esta serie de tutoriales de cuatro partes, usará Python y una regresión lineal en
SQL Server Machine Learning Services para predecir el número de alquileres de esquíes. En este tutorial, se usa
un cuaderno de Python en Azure Data Studio.
En esta serie de tutoriales de cuatro partes, usará Python y una regresión lineal en Machine Learning Services
en Azure SQL Managed Instance para predecir el número de alquileres de esquíes. En este tutorial, se usa un
cuaderno de Python en Azure Data Studio.
Imagine que es el propietario de una empresa de alquiler de esquíes y quiere predecir el número de alquileres
que tendrá en una fecha futura. Esta información le ayudará a preparar las existencias, el personal y las
instalaciones.
En la primera parte de esta serie, configurará los requisitos previos. En las partes dos y tres, desarrollará scripts
de Python en un cuaderno para preparar sus datos y entrenar un modelo de aprendizaje automático. Después,
en la parte tres, ejecutará esos scripts de Python en la base de datos con procedimientos almacenados en T-SQL.
En este artículo, aprenderá a:
Importar una base de datos de ejemplo
En la parte dos, aprenderá a cargar los datos desde una base de datos en una trama de datos de Python y a
preparar los datos en Python.
En la parte tres, aprenderá a entrenar un modelo de regresión lineal en Python.
En la parte cuatro, aprenderá a almacenar el modelo en una base de datos y, luego, a crear procedimientos
almacenados a partir de los scripts de Python desarrollados en las partes dos y tres. Los procedimientos
almacenados se ejecutarán en el servidor para realizar predicciones basándose en datos nuevos.

Prerrequisitos
SQL Server Machine Learning Services: para instalar Machine Learning Services, vea la Guía de instalación
para Windows o la Guía de instalación para Linux. También puede habilitar Machine Learning Services en
clústeres de macrodatos de SQL Server.
SQL Server Machine Learning Services: para instalar Machine Learning Services, vea la Guía de instalación
para Windows.
Machine Learning Services en Azure SQL Managed Instance: para obtener más información, vea Machine
Learning Services de Instancia administrada de Azure SQL (versión preliminar).
SQL Server Management Studio para restaurar la base de datos de ejemplo en Azure SQL Managed
Instance.
IDE de Python: en este tutorial, se usa un cuaderno de Python en Azure Data Studio. Para más
información, vea Uso de cuadernos en Azure Data Studio.
Herramienta de consultas SQL: en este tutorial, se da por hecho que usa Azure Data Studio.
Paquetes de Python adicionales: en los ejemplos de esta serie de tutoriales, se usan los paquetes de
Python siguiente que puede que no estén instalados de manera predeterminada:
Pandas
pyodbc
sklearn
Para instalar estos paquetes:
1. En el cuaderno de Azure Data Studio, seleccione Administrar paquetes .
2. En el panel Administrar paquetes , seleccione la pestaña Agregar nuevo .
3. Para cada uno de los paquetes siguientes, escriba el nombre del paquete, haga clic en Buscar y, a
continuación, haga clic en instalar .
Como alternativa, puede abrir un símbolo del sistema , cambiar a la ruta de instalación de la versión de
Python que usa en Azure Data Studio (por ejemplo, cd %LocalAppData%\Programs\Python\Python37-32 ) y, a
continuación, ejecutar pip install para cada paquete.

Restauración de la base de datos de ejemplo


La base de datos de ejemplo usada en este tutorial se ha guardado en un archivo de copia de seguridad de base
de datos .bak para que pueda descargarlo y usarlo.

NOTE
Si usa Machine Learning Services en clústeres de macrodatos, consulte Restauración de una base de datos en la instancia
maestra del clúster de macrodatos de SQL Server.

1. Descargue el archivo TutorialDB.bak.


2. Siga las indicaciones de Restauración de una base de datos a partir de un archivo de copia de seguridad
en Azure Data Studio con estos datos:
Importación del archivo TutorialDB.bak que ha descargado
Asignación del nombre "TutorialDB" a la base de datos de destino
3. Para comprobar que la base de datos restaurada existe, consulte la tabla DBO.rental_data :

USE TutorialDB;
SELECT * FROM [dbo].[rental_data];

1. Descargue el archivo TutorialDB.bak.


2. Siga las instrucciones de Restauración de una base de datos en un Instancia administrada en SQL Server
Management Studio, con los detalles siguientes:
Importación del archivo TutorialDB.bak que ha descargado
Asignación del nombre "TutorialDB" a la base de datos de destino
3. Para comprobar que la base de datos restaurada existe, consulte la tabla DBO.rental_data :
USE TutorialDB;
SELECT * FROM [dbo].[rental_data];

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos TutorialDB.

Pasos siguientes
En la parte uno de esta serie de tutoriales, ha completado estos pasos:
Instalación de los requisitos previos
Importar una base de datos de ejemplo
Para preparar los datos de la base de datos TutorialDB, siga la parte dos de esta serie de tutoriales:
Tutorial de Python: Preparación de los datos para entrenar un modelo de regresión lineal
Tutorial de Python: Preparación de datos para
entrenar un modelo de regresión lineal con
aprendizaje automático de SQL
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos mediante
Python. Más adelante en esta serie, usará estos datos para entrenar e implementar un modelo de regresión
lineal en Python con SQL Server Machine Learning Services o en clústeres de macrodatos.
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos mediante
Python. Más adelante en esta serie, usará estos datos para entrenar e implementar un modelo de regresión
lineal en Python con SQL Server Machine Learning Services.
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos mediante
Python. Más adelante en esta serie, usará estos datos para entrenar e implementar un modelo de regresión
lineal en Python con Machine Learning Services en Azure SQL Managed Instance.
En este artículo, aprenderá a:
Cargar los datos desde la base de datos en una trama de datos de Pandas
Quitar columnas para preparar los datos en Python
En la parte uno, ha aprendido a restaurar la base de datos de ejemplo.
En la parte tres, aprenderá a entrenar un modelo de aprendizaje automático de regresión lineal en Python.
En la parte cuatro, aprenderá a almacenar el modelo en una base de datos y, luego, a crear procedimientos
almacenados a partir de los scripts de Python desarrollados en las partes dos y tres. Los procedimientos
almacenados se ejecutarán en el servidor para realizar predicciones basándose en datos nuevos.

Prerrequisitos
En la parte dos de este tutorial, se da por hecho que ha completado la parte uno y los requisitos previos.

Exploración y preparación de los datos


Para usar los datos en Python, cargará los datos de la base de datos en una trama de datos de Pandas.
Cree un cuaderno de Python en Azure Data Studio y ejecute el script siguiente.
El script de Python siguiente importa el conjunto de datos de la tabla dbo.rental_data de la base de datos en
una trama de datos de pandas df .
En la cadena de conexión, reemplace los detalles de conexión según corresponda.
import pyodbc
import pandas
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Connection string to your SQL Server instance


conn_str = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server}; SERVER=<server>; DATABASE=TutorialDB;UID=
<username>;PWD=<password>')

query_str = 'SELECT Year, Month, Day, Rentalcount, Weekday, Holiday, Snow FROM dbo.rental_data'

df = pandas.read_sql(sql=query_str, con=conn_str)

print("Data frame:", df)

# Get all the columns from the dataframe.


columns = df.columns.tolist()

# Filter the columns to remove ones we don't want to use in the training
columns = [c for c in columns if c not in ["Year"]]

Se mostrarán resultados similares a los siguientes.

Data frame: Year Month Day RentalCount WeekDay Holiday Snow


0 2014 1 20 445 2 1 0
1 2014 2 13 40 5 0 0
2 2013 3 10 456 1 0 0
3 2014 3 31 38 2 0 0
4 2014 4 24 23 5 0 0
.. ... ... ... ... ... ... ...
448 2013 2 19 57 3 0 1
449 2015 3 18 26 4 0 0
450 2015 3 24 29 3 0 1
451 2014 3 26 50 4 0 1
452 2015 12 6 377 1 0 1

[453 rows x 7 columns]

Pasos siguientes
En la parte dos de esta serie de tutoriales, ha completado estos pasos:
Cargar los datos desde la base de datos en una trama de datos de Pandas
Quitar columnas para preparar los datos en Python
Para entrenar un modelo de aprendizaje automático que use datos de la base de datos TutorialDB, siga la parte
tres de esta serie de tutoriales:
Tutorial de Python: Entrenamiento de un modelo de regresión lineal
Tutorial de Python: Entrenamiento de un modelo de
regresión lineal con aprendizaje automático de SQL
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte tres de esta serie de tutoriales de cuatro partes, entrenará un modelo de regresión lineal en Python.
En la siguiente parte de esta serie, implementará este modelo en una base de datos de SQL Server con Machine
Learning Services o en clústeres de macrodatos.
En la parte tres de esta serie de tutoriales de cuatro partes, entrenará un modelo de regresión lineal en Python.
En la siguiente parte de esta serie, implementará el modelo en una base de datos de SQL Server con
Machine Learning Services.
En la parte tres de esta serie de tutoriales de cuatro partes, entrenará un modelo de regresión lineal en Python.
En la siguiente parte de esta serie, implementará este modelo en una base de datos de Azure SQL Managed
Instance con Machine Learning Services.
En este artículo, aprenderá a:
Entrenamiento de un modelo de regresión lineal
Predicciones mediante el modelo de regresión lineal
En la parte uno, ha aprendido a restaurar la base de datos de ejemplo.
En la parte dos, ha aprendido a cargar los datos desde una base de datos en una trama de datos de Python y a
preparar los datos en Python.
En la parte cuatro, aprenderá a almacenar el modelo en una base de datos y, luego, a crear procedimientos
almacenados a partir de los scripts de Python desarrollados en las partes dos y tres. Los procedimientos
almacenados se ejecutarán en el servidor para realizar predicciones basándose en datos nuevos.

Prerrequisitos
En la parte tres de este tutorial, se da por hecho que ha completado la parte uno y los requisitos previos.

Entrenamiento del modelo


Para realizar predicciones, necesita identificar una función (modelo) que describa mejor la dependencia entre las
variables del conjunto de datos. Este proceso se denomina entrenar el modelo. El conjunto de datos de
entrenamiento será un subconjunto de todo el conjunto de datos de la trama de datos de pandas df que ha
creado en la parte dos de esta serie.
Entrenará el modelo lin_model mediante un algoritmo de regresión lineal.
# Store the variable we'll be predicting on.
target = "Rentalcount"

# Generate the training set. Set random_state to be able to replicate results.


train = df.sample(frac=0.8, random_state=1)

# Select anything not in the training set and put it in the testing set.
test = df.loc[~df.index.isin(train.index)]

# Print the shapes of both sets.


print("Training set shape:", train.shape)
print("Testing set shape:", test.shape)

# Initialize the model class.


lin_model = LinearRegression()

# Fit the model to the training data.


lin_model.fit(train[columns], train[target])

Se mostrarán resultados similares a los siguientes.

Training set shape: (362, 7)


Testing set shape: (91, 7)

Realización de predicciones
Use una función de predicción para predecir el número de alquileres mediante el modelo lin_model .

# Generate our predictions for the test set.


lin_predictions = lin_model.predict(test[columns])
print("Predictions:", lin_predictions)
# Compute error between our test predictions and the actual values.
lin_mse = mean_squared_error(lin_predictions, test[target])
print("Computed error:", lin_mse)

Se mostrarán resultados similares a los siguientes.

Predictions: [ 40. 38. 240. 39. 514. 48. 297. 25. 507. 24. 30. 54. 40. 26.
30. 34. 42. 390. 336. 37. 22. 35. 55. 350. 252. 370. 499. 48.
37. 494. 46. 25. 312. 390. 35. 35. 421. 39. 176. 21. 33. 452.
34. 28. 37. 260. 49. 577. 312. 24. 24. 390. 34. 64. 26. 32.
33. 358. 348. 25. 35. 48. 39. 44. 58. 24. 350. 651. 38. 468.
26. 42. 310. 709. 155. 26. 648. 617. 26. 846. 729. 44. 432. 25.
39. 28. 325. 46. 36. 50. 63.]
Computed error: 2.9960763804270902e-27

Pasos siguientes
En la parte tres de esta serie de tutoriales, ha completado estos pasos:
Entrenamiento de un modelo de regresión lineal
Predicciones mediante el modelo de regresión lineal
Para implementar el modelo de aprendizaje automático que ha creado, siga la parte cuatro de esta serie de
tutoriales:
Tutorial de Python: Implementación de un modelo de aprendizaje automático
Tutorial de Python: Implementación de un modelo
de regresión lineal con aprendizaje automático de
SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de regresión lineal
desarrollado en Python en una base de datos de SQL Server mediante Machine Learning Services o clústeres de
macrodatos.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de regresión lineal
desarrollado en Python en una base de datos de SQL Server mediante Machine Learning Services.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de regresión lineal
desarrollado en Python en una base de datos de Azure SQL Managed Instance mediante Machine Learning
Services.
En este artículo, aprenderá a:
Crear un procedimiento almacenado que genere el modelo de aprendizaje automático
Almacenar el modelo en una tabla de base de datos
Crear un procedimiento almacenado que realice predicciones mediante el modelo
Ejecutar el modelo con datos nuevos
En la parte uno, ha aprendido a restaurar la base de datos de ejemplo.
En la parte dos, ha aprendido a cargar los datos desde una base de datos en una trama de datos de Python y a
preparar los datos en Python.
En la parte tres, ha aprendido a entrenar un modelo de aprendizaje automático de regresión lineal en Python.

Prerrequisitos
En la parte cuatro de este tutorial, se da por hecho que ha completado la parte uno y los requisitos previos.

Crear un procedimiento almacenado que genere el modelo


Ahora, use los scripts de Python que ha desarrollado para crear un procedimiento almacenado llamado
generate_rental_py_model que entrene y genere el modelo de regresión lineal mediante LinearRegression
de scikit-learn.
Ejecute la siguiente instrucción T-SQL en Azure Data Studio para crear el procedimiento almacenado con el fin
de entrenar el modelo.
-- Stored procedure that trains and generates a Python model using the rental_data and a linear regression
algorithm
DROP PROCEDURE IF EXISTS generate_rental_py_model;
go
CREATE PROCEDURE generate_rental_py_model (@trained_model varbinary(max) OUTPUT)
AS
BEGIN
EXECUTE sp_execute_external_script
@language = N'Python'
, @script = N'
from sklearn.linear_model import LinearRegression
import pickle

df = rental_train_data

# Get all the columns from the dataframe.


columns = df.columns.tolist()

# Store the variable well be predicting on.


target = "RentalCount"

# Initialize the model class.


lin_model = LinearRegression()

# Fit the model to the training data.


lin_model.fit(df[columns], df[target])

# Before saving the model to the DB table, convert it to a binary object


trained_model = pickle.dumps(lin_model)'

, @input_data_1 = N'select "RentalCount", "Year", "Month", "Day", "WeekDay", "Snow", "Holiday" from
dbo.rental_data where Year < 2015'
, @input_data_1_name = N'rental_train_data'
, @params = N'@trained_model varbinary(max) OUTPUT'
, @trained_model = @trained_model OUTPUT;
END;
GO

Almacenar el modelo en una tabla de base de datos


Cree una tabla en la base de datos TutorialDB y, después, guarde el modelo en la tabla.
1. Ejecute la siguiente instrucción T-SQL en Azure Data Studio para crear una tabla denominada
dbo.rental_py_models , que se usará para almacenar el modelo.

USE TutorialDB;
DROP TABLE IF EXISTS dbo.rental_py_models;
GO
CREATE TABLE dbo.rental_py_models (
model_name VARCHAR(30) NOT NULL DEFAULT('default model') PRIMARY KEY,
model VARBINARY(MAX) NOT NULL
);
GO

2. Guarde el modelo en la tabla como un objeto binario, con el nombre de modelo linear_model .

DECLARE @model VARBINARY(MAX);


EXECUTE generate_rental_py_model @model OUTPUT;

INSERT INTO rental_py_models (model_name, model) VALUES('linear_model', @model);


Creación de un procedimiento almacenado que realiza predicciones
1. Cree un procedimiento almacenado llamado py_predict_rentalcount que realice predicciones
mediante el modelo entrenado y un conjunto de datos nuevos. Ejecute la consulta T-SQL siguiente en
Azure Data Studio.

DROP PROCEDURE IF EXISTS py_predict_rentalcount;


GO
CREATE PROCEDURE py_predict_rentalcount (@model varchar(100))
AS
BEGIN
DECLARE @py_model varbinary(max) = (select model from rental_py_models where model_name =
@model);

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'

# Import the scikit-learn function to compute error.


from sklearn.metrics import mean_squared_error
import pickle
import pandas

rental_model = pickle.loads(py_model)

df = rental_score_data

# Get all the columns from the dataframe.


columns = df.columns.tolist()

# Variable you will be predicting on.


target = "RentalCount"

# Generate the predictions for the test set.


lin_predictions = rental_model.predict(df[columns])
print(lin_predictions)

# Compute error between the test predictions and the actual values.
lin_mse = mean_squared_error(lin_predictions, df[target])
#print(lin_mse)

predictions_df = pandas.DataFrame(lin_predictions)

OutputDataSet = pandas.concat([predictions_df, df["RentalCount"], df["Month"], df["Day"],


df["WeekDay"], df["Snow"], df["Holiday"], df["Year"]], axis=1)
'
, @input_data_1 = N'Select "RentalCount", "Year" ,"Month", "Day", "WeekDay", "Snow", "Holiday" from
rental_data where Year = 2015'
, @input_data_1_name = N'rental_score_data'
, @params = N'@py_model varbinary(max)'
, @py_model = @py_model
with result sets (("RentalCount_Predicted" float, "RentalCount" float, "Month" float,"Day"
float,"WeekDay" float,"Snow" float,"Holiday" float, "Year" float));

END;
GO

2. Cree una tabla para almacenar las predicciones.


DROP TABLE IF EXISTS [dbo].[py_rental_predictions];
GO

CREATE TABLE [dbo].[py_rental_predictions](


[RentalCount_Predicted] [int] NULL,
[RentalCount_Actual] [int] NULL,
[Month] [int] NULL,
[Day] [int] NULL,
[WeekDay] [int] NULL,
[Snow] [int] NULL,
[Holiday] [int] NULL,
[Year] [int] NULL
) ON [PRIMARY]
GO

3. Ejecución del procedimiento almacenado para predecir el número de alquileres

--Insert the results of the predictions for test set into a table
INSERT INTO py_rental_predictions
EXEC py_predict_rentalcount 'linear_model';

-- Select contents of the table


SELECT * FROM py_rental_predictions;

Se mostrarán resultados similares a los siguientes.

Ha creado, entrenado e implementado correctamente un modelo. Después, ha usado el modelo en un


procedimiento almacenado para predecir valores basándose en datos nuevos.

Pasos siguientes
En la parte cuatro de esta serie de tutoriales, ha aprendido a:
Crear un procedimiento almacenado que genere el modelo de aprendizaje automático
Almacenar el modelo en una tabla de base de datos
Crear un procedimiento almacenado que realice predicciones mediante el modelo
Ejecutar el modelo con datos nuevos
Para más información sobre cómo usar Python en el aprendizaje automático de SQL, consulte:
Tutoriales de Python
Tutorial de Python: Clasificación de clientes por
categorías mediante la agrupación en clústeres k-
means con aprendizaje automático de SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En esta serie de tutoriales de cuatro partes, usará Python para desarrollar e implementar un modelo de
agrupación en clústeres k-means en SQL Server Machine Learning Services o clústeres de macrodatos para
categorizar datos de clientes.
En esta serie de tutoriales de cuatro partes, usará Python para desarrollar e implementar un modelo de
agrupación en clústeres k-means en SQL Server Machine Learning Services para agrupar en clústeres datos de
clientes.
En esta serie de tutoriales de cuatro partes, usará Python para desarrollar e implementar un modelo de
agrupación en clústeres k-means en Machine Learning Services en Azure SQL Managed Instance para agrupar
en clústeres datos de clientes.
En la primera parte de esta serie, configurará los requisitos previos para el tutorial y, después, restaurará un
conjunto de datos de ejemplo en una base de datos. Más adelante en esta serie, usará estos datos para entrenar
e implementar un modelo de agrupación en clústeres en Python con aprendizaje automático de SQL.
En las partes dos y tres de esta serie, desarrollará scripts de Python en un cuaderno de Azure Data Studio para
analizar y preparar los datos y entrenar un modelo de aprendizaje automático. Después, en la parte cuatro,
ejecutará esos scripts de Python dentro de una base de datos mediante los procedimientos almacenados.
Agrupar en clústeres es organizar datos en grupos, donde los miembros de un grupo son de alguna forma
similares. Para esta serie de tutoriales, imagine que es el propietario de un negocio de venta al por menor. Usará
el algoritmo k-means para realizar la agrupación de clientes en clústeres en un conjunto de datos de compras y
devoluciones de productos. Al agrupar los clientes en clústeres, puede centrar sus actividades de marketing de
forma más eficaz al dirigirse a grupos específicos. La agrupación en clústeres k-means es un algoritmo de
aprendizaje no supervisado que analiza patrones en datos basándose en similitudes.
En este artículo, aprenderá a:
Restauración de una base de datos de ejemplo
En la parte dos, aprenderá a preparar los datos de una base de datos para realizar la agrupación en clústeres.
En la parte tres, aprenderá a crear y entrenar un modelo de agrupación en clústeres k-means en Python.
En la parte cuatro, aprenderá a crear un procedimiento almacenado en una base de datos que pueda realizar la
agrupación en clústeres en Python basándose en datos nuevos.

Prerrequisitos
SQL Server Machine Learning Services con la opción de lenguaje de Python: siga las instrucciones de
instalación en la Guía de instalación para Windows o la Guía de instalación para Linux. También puede
habilitar Machine Learning Services en clústeres de macrodatos de SQL Server.
SQL Server Machine Learning Services con la opción de lenguaje de Python: siga las instrucciones de
instalación en la Guía de instalación para Windows.
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).
SQL Server Management Studio para restaurar la base de datos de ejemplo en Azure SQL Managed
Instance.
Azure Data Studio Usará un cuaderno en Azure Data Studio para Python y SQL. Para obtener más
información sobre los cuadernos, vea Uso de los cuadernos en Azure Data Studio.
Paquetes de Python adicionales: en los ejemplos de esta serie de tutoriales, se usan paquetes de Python
que puede que no estén instalados.
Abra un símbolo del sistema y cambie a la ruta de instalación de la versión de Python que use en
Azure Data Studio. Por ejemplo, cd %LocalAppData%\Programs\Python\Python37-32 . A continuación, ejecute
los siguientes comandos para instalar cualquiera de estos paquetes que no están ya instalados.

pip install matplotlib


pip install pandas
pip install pyodbc
pip install scipy
pip install sklearn

Restauración de la base de datos de ejemplo


El conjunto de datos de ejemplo usado en este tutorial se ha guardado en un archivo de copia de seguridad de
base de datos .bak para que pueda descargarlo y usarlo. Este conjunto de datos se basa en el conjunto de datos
tpcx-bb proporcionado por Transaction Processing Performance Council (TPC).

NOTE
Si usa Machine Learning Services en clústeres de macrodatos, consulte Restauración de una base de datos en la instancia
maestra del clúster de macrodatos de SQL Server.

1. Descargue el archivo tpcxbb_1gb.bak.


2. Siga las indicaciones de Restauración de una base de datos a partir de un archivo de copia de seguridad
en Azure Data Studio con estos datos:
Importe el archivo tpcxbb_1gb.bak que ha descargado.
Asigne a la base de datos de destino el nombre "tpcxbb_1gb".
3. Para asegurarse de que el conjunto de datos exista después de restaurar la base de datos, ejecute la
siguiente consulta en la tabla dbo.customer :

USE tpcxbb_1gb;
SELECT * FROM [dbo].[customer];

1. Descargue el archivo tpcxbb_1gb.bak.


2. Siga las instrucciones de Restauración de una base de datos en un Instancia administrada en SQL Server
Management Studio, con los detalles siguientes:
Importe el archivo tpcxbb_1gb.bak que ha descargado.
Asigne a la base de datos de destino el nombre "tpcxbb_1gb".
3. Para asegurarse de que el conjunto de datos exista después de restaurar la base de datos, ejecute la
siguiente consulta en la tabla dbo.customer :

USE tpcxbb_1gb;
SELECT * FROM [dbo].[customer];

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos tpcxbb_1gb.

Pasos siguientes
En la parte uno de esta serie de tutoriales, ha completado estos pasos:
Restauración de una base de datos de ejemplo
Para preparar los datos para el modelo de aprendizaje automático, siga la parte dos de esta serie de tutoriales:
Tutorial de Python: Preparación de datos para realizar la agrupación en clústeres
Tutorial de Python: Preparación de datos para
clasificar clientes por categorías con aprendizaje
automático de SQL
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte dos de esta serie de tutoriales de cuatro partes, restaurará y preparará los datos de una base de
datos mediante Python. Más adelante en esta serie, usará estos datos para entrenar e implementar un modelo
de agrupación en clústeres en Python con SQL Server Machine Learning Services o en clústeres de macrodatos.
En la parte dos de esta serie de tutoriales de cuatro partes, restaurará y preparará los datos de una base de
datos mediante Python. Más adelante en esta serie, usará estos datos para entrenar e implementar un modelo
de agrupación en clústeres en Python con SQL Server Machine Learning Services.
En la parte dos de esta serie de tutoriales de cuatro partes, restaurará y preparará los datos de una base de
datos mediante Python. Más adelante en esta serie, usará estos datos para entrenar e implementar un modelo
de agrupación en clústeres en Python con Machine Learning Services en Azure SQL Managed Instance.
En este artículo, aprenderá a:
Separación de los clientes en distintas dimensiones mediante Python
Carga de datos de la base de datos en una trama de datos de Python
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte tres, aprenderá a crear y entrenar un modelo de agrupación en clústeres k-means en Python.
En la parte cuatro, aprenderá a crear un procedimiento almacenado en una base de datos que pueda realizar la
agrupación en clústeres en Python basándose en datos nuevos.

Prerrequisitos
En la parte dos de este tutorial, se da por hecho que ha completado los requisitos previos de la par te uno .

Separación de clientes
Para preparar la agrupación en clústeres de los clientes, primero separe los clientes en las dimensiones
siguientes:
orderRatio = índice de devolución de pedidos (número total de pedidos con una devolución total o parcial
comparado con el número total de pedidos)
itemsRatio = índice de artículos devueltos (número total de artículos devueltos comparado con el número
de artículos comprados)
monetar yRatio = índice de importes de devoluciones (total de importes monetarios de los artículos
devueltos comparado con el importe de las compras)
frequency = frecuencia de devolución
Abra un nuevo cuaderno en Azure Data Studio y escriba el script siguiente.
En la cadena de conexión, reemplace los detalles de conexión según corresponda.
# Load packages.
import pyodbc
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.spatial import distance as sci_distance
from sklearn import cluster as sk_cluster

################################################################################################

## Connect to DB and select data

################################################################################################

# Connection string to connect to SQL Server named instance.


conn_str = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server}; SERVER=<server>; DATABASE=tpcxbb_1gb;
UID=<username>; PWD=<password>')

input_query = '''SELECT
ss_customer_sk AS customer,
ROUND(COALESCE(returns_count / NULLIF(1.0*orders_count, 0), 0), 7) AS orderRatio,
ROUND(COALESCE(returns_items / NULLIF(1.0*orders_items, 0), 0), 7) AS itemsRatio,
ROUND(COALESCE(returns_money / NULLIF(1.0*orders_money, 0), 0), 7) AS monetaryRatio,
COALESCE(returns_count, 0) AS frequency
FROM
(
SELECT
ss_customer_sk,
-- return order ratio
COUNT(distinct(ss_ticket_number)) AS orders_count,
-- return ss_item_sk ratio
COUNT(ss_item_sk) AS orders_items,
-- return monetary amount ratio
SUM( ss_net_paid ) AS orders_money
FROM store_sales s
GROUP BY ss_customer_sk
) orders
LEFT OUTER JOIN
(
SELECT
sr_customer_sk,
-- return order ratio
count(distinct(sr_ticket_number)) as returns_count,
-- return ss_item_sk ratio
COUNT(sr_item_sk) as returns_items,
-- return monetary amount ratio
SUM( sr_return_amt ) AS returns_money
FROM store_returns
GROUP BY sr_customer_sk ) returned ON ss_customer_sk=sr_customer_sk'''

# Define the columns we wish to import.


column_info = {
"customer": {"type": "integer"},
"orderRatio": {"type": "integer"},
"itemsRatio": {"type": "integer"},
"frequency": {"type": "integer"}
}

Carga de los datos en una trama de datos


Los resultados de la consulta se devuelven a Python mediante la función read_sql de Pandas. Como parte del
proceso, usará la información sobre columnas que ha definido en el script anterior.
customer_data = pandas.read_sql(input_query, conn_str)

Ahora, muestre el principio de la trama de datos para asegurarse de que sea correcta.

print("Data frame:", customer_data.head(n=5))

Rows Read: 37336, Total Rows Processed: 37336, Total Chunk Time: 0.172 seconds
Data frame: customer orderRatio itemsRatio monetaryRatio frequency
0 29727.0 0.000000 0.000000 0.000000 0
1 97643.0 0.068182 0.078176 0.037034 3
2 57247.0 0.000000 0.000000 0.000000 0
3 32549.0 0.086957 0.068657 0.031281 4
4 2040.0 0.000000 0.000000 0.000000 0

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos tpcxbb_1gb.

Pasos siguientes
En la parte dos de esta serie de tutoriales, ha completado estos pasos:
Separación de los clientes en distintas dimensiones mediante Python
Carga de datos de la base de datos en una trama de datos de Python
Para crear un modelo de aprendizaje automático que use estos datos de clientes, siga la parte tres de esta serie
de tutoriales:
Tutorial de Python: Creación de un modelo predictivo
Tutorial de Python: Creación de un modelo para
clasificar clientes con aprendizaje automático de
SQL
14/07/2021 • 5 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte tres de esta serie de tutoriales de cuatro partes, creará un modelo de k-means en Python para
realizar la agrupación en clústeres. En la siguiente parte de esta serie, implementará este modelo en una base de
datos con SQL Server Machine Learning Services o en clústeres de macrodatos.
En la parte tres de esta serie de tutoriales de cuatro partes, creará un modelo de k-means en Python para
realizar la agrupación en clústeres. En la siguiente parte de esta serie, implementará este modelo en una base de
datos con SQL Server Machine Learning Services.
En la parte tres de esta serie de tutoriales de cuatro partes, creará un modelo de k-means en Python para
realizar la agrupación en clústeres. En la siguiente parte de esta serie, implementará este modelo en una base de
datos con Machine Learning Services en Azure SQL Managed Instance.
En este artículo, aprenderá a:
Definición del número de clústeres para un algoritmo de k-means
Agrupación en clústeres
Análisis de los resultados
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, ha aprendido a preparar los datos de una base de datos para realizar la agrupación en clústeres.
En la parte cuatro, aprenderá a crear un procedimiento almacenado en una base de datos que pueda realizar la
agrupación en clústeres en Python basándose en datos nuevos.

Prerrequisitos
En la parte tres de este tutorial, se da por hecho que ha completado los requisitos previos de la par te uno y
que ha realizado los pasos de la par te dos .

Definición del número de clústeres


Para agrupar en clústeres los datos de clientes, usará el algoritmo de agrupación en clústeres k-means , una de
las formas más sencillas y conocidas de agrupar datos. Para más información sobre k-means, vea Guía completa
sobre el algoritmo de agrupación en clústeres k-means.
El algoritmo acepta dos entradas: los datos en sí y un número predefinido "k", que representa el número de
clústeres que se generarán. El resultado es k clústeres con los datos de entrada repartidos entre los clústeres.
El objetivo de k-means es agrupar los elementos en k clústeres, de forma que todos los elementos del mismo
clúster sean similares entre sí y, en la medida de lo posible, que sean distintos de los elementos de otros
clústeres.
Para determinar el número de clústeres que usará el algoritmo, use una representación de la suma de
cuadrados dentro de los grupos por el número de clústeres extraídos. El número adecuado de clústeres que se
usará se encuentra en la curva o "codo" de la representación.

################################################################################################
## Determine number of clusters using the Elbow method
################################################################################################

cdata = customer_data
K = range(1, 20)
KM = (sk_cluster.KMeans(n_clusters=k).fit(cdata) for k in K)
centroids = (k.cluster_centers_ for k in KM)

D_k = (sci_distance.cdist(cdata, cent, 'euclidean') for cent in centroids)


dist = (np.min(D, axis=1) for D in D_k)
avgWithinSS = [sum(d) / cdata.shape[0] for d in dist]
plt.plot(K, avgWithinSS, 'b*-')
plt.grid(True)
plt.xlabel('Number of clusters')
plt.ylabel('Average within-cluster sum of squares')
plt.title('Elbow for KMeans clustering')
plt.show()

Según el gráfico, parece que k = 4 sería un buen valor para probar. El valor k agrupará los clientes en cuatro
clústeres.

Agrupación en clústeres
En el siguiente script de Python, usará la función KMeans del paquete sklearn.
################################################################################################
## Perform clustering using Kmeans
################################################################################################

# It looks like k=4 is a good number to use based on the elbow graph.
n_clusters = 4

means_cluster = sk_cluster.KMeans(n_clusters=n_clusters, random_state=111)


columns = ["orderRatio", "itemsRatio", "monetaryRatio", "frequency"]
est = means_cluster.fit(customer_data[columns])
clusters = est.labels_
customer_data['cluster'] = clusters

# Print some data about the clusters:

# For each cluster, count the members.


for c in range(n_clusters):
cluster_members=customer_data[customer_data['cluster'] == c][:]
print('Cluster{}(n={}):'.format(c, len(cluster_members)))
print('-'* 17)
print(customer_data.groupby(['cluster']).mean())

Análisis de los resultados


Ahora que ha realizado la agrupación en clústeres mediante k-means, el paso siguiente es analizar el resultado y
ver si puede identificar información procesable.
Analice los valores medios de agrupación en clústeres y los tamaños de los clústeres obtenidos en el script
anterior.

Cluster0(n=31675):
-------------------
Cluster1(n=4989):
-------------------
Cluster2(n=1):
-------------------
Cluster3(n=671):
-------------------

customer orderRatio itemsRatio monetaryRatio frequency


cluster
0 50854.809882 0.000000 0.000000 0.000000 0.000000
1 51332.535779 0.721604 0.453365 0.307721 1.097815
2 57044.000000 1.000000 2.000000 108.719154 1.000000
3 48516.023845 0.136277 0.078346 0.044497 4.271237

Las cuatro medias de clústeres se proporcionan mediante las variables definidas en la parte uno:
orderRatio = índice de devolución de pedidos (número total de pedidos con una devolución total o parcial
comparado con el número total de pedidos)
itemsRatio = índice de artículos devueltos (número total de artículos devueltos comparado con el número de
artículos comprados)
monetaryRatio = índice de importes de devoluciones (total de importes monetarios de los artículos
devueltos comparado con el importe de las compras)
frequency = frecuencia de devolución
Con frecuencia, la minería de datos que usa k-means necesita un análisis más detallado de los resultados y
pasos adicionales para comprender mejor cada clúster, pero puede proporcionar pistas adecuadas. Estas son
dos formas en que se podrían interpretar estos resultados:
Parece que el clúster 0 es un grupo de clientes inactivos (todos los valores son de cero).
Parece que el clúster 3 es un grupo que destaca en términos de comportamiento de devoluciones.
El clúster 0 es claramente un conjunto de clientes inactivos. Puede que quiera dirigir sus actividades de
marketing hacia este grupo para generar interés por las compras. En el paso siguiente, consultará en la base de
datos las direcciones de correo electrónico de los clientes del clúster 0 para enviarles un correo electrónico
promocional.

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos tpcxbb_1gb.

Pasos siguientes
En la parte tres de esta serie de tutoriales, ha completado estos pasos:
Definición del número de clústeres para un algoritmo de k-means
Agrupación en clústeres
Análisis de los resultados
Para implementar el modelo de aprendizaje automático que ha creado, siga la parte cuatro de esta serie de
tutoriales:
Tutorial de Python: Implementación de un modelo de agrupación en clústeres
Tutorial de Python: Implementación de un modelo
para clasificar clientes por categorías con
aprendizaje automático de SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de agrupación en
clústeres, desarrollado en Python, en una base de datos con SQL Server Machine Learning Services o en
Clústeres de macrodatos.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de agrupación en
clústeres, desarrollado en Python, en una base de datos mediante SQL Server Machine Learning Services.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de agrupación en
clústeres, desarrollado en Python, en una base de datos mediante Machine Learning Services en Azure
SQL Managed Instance.
Para realizar la agrupación en clústeres de forma periódica cuando se registren nuevos clientes, necesita llamar
al script de Python desde cualquier aplicación. Para hacerlo, puede implementar el script de Python en una base
de datos si lo coloca dentro de un procedimiento almacenado de SQL. Como el modelo se ejecuta en la base de
datos, se puede entrenar fácilmente con los datos almacenados en la base de datos.
En esta sección, moverá el código de Python que acaba de escribir en el servidor e implementará la agrupación
en clústeres.
En este artículo, aprenderá a:
Crear un procedimiento almacenado que genere el modelo
Agrupación en clústeres en el servidor
Uso de la información de agrupación en clústeres
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, ha aprendido a preparar los datos de una base de datos para realizar la agrupación en clústeres.
En la parte tres, ha aprendido a crear y entrenar un modelo de agrupación en clústeres k-means en Python.

Prerrequisitos
En la parte cuatro de esta serie de tutoriales, se da por hecho que ha completado los requisitos previos de la
par te uno y que ha realizado los pasos de la par te dos y la par te tres .

Crear un procedimiento almacenado que genere el modelo


Ejecute el siguiente script de T-SQL para crear el procedimiento almacenado. El procedimiento recrea los pasos
que ha desarrollado en las partes uno y dos de esta serie de tutoriales:
clasificación de los clientes basándose en su historial de compras devoluciones
generación de cuatro clústeres de clientes mediante un algoritmo k-means

USE [tpcxbb_1gb]
USE [tpcxbb_1gb]
GO

CREATE procedure [dbo].[py_generate_customer_return_clusters]


AS

BEGIN
DECLARE

-- Input query to generate the purchase history & return metrics


@input_query NVARCHAR(MAX) = N'
SELECT
ss_customer_sk AS customer,
CAST( (ROUND(COALESCE(returns_count / NULLIF(1.0*orders_count, 0), 0), 7) ) AS FLOAT) AS orderRatio,
CAST( (ROUND(COALESCE(returns_items / NULLIF(1.0*orders_items, 0), 0), 7) ) AS FLOAT) AS itemsRatio,
CAST( (ROUND(COALESCE(returns_money / NULLIF(1.0*orders_money, 0), 0), 7) ) AS FLOAT) AS monetaryRatio,
CAST( (COALESCE(returns_count, 0)) AS FLOAT) AS frequency
FROM
(
SELECT
ss_customer_sk,
-- return order ratio
COUNT(distinct(ss_ticket_number)) AS orders_count,
-- return ss_item_sk ratio
COUNT(ss_item_sk) AS orders_items,
-- return monetary amount ratio
SUM( ss_net_paid ) AS orders_money
FROM store_sales s
GROUP BY ss_customer_sk
) orders
LEFT OUTER JOIN
(
SELECT
sr_customer_sk,
-- return order ratio
count(distinct(sr_ticket_number)) as returns_count,
-- return ss_item_sk ratio
COUNT(sr_item_sk) as returns_items,
-- return monetary amount ratio
SUM( sr_return_amt ) AS returns_money
FROM store_returns
GROUP BY sr_customer_sk
) returned ON ss_customer_sk=sr_customer_sk
'

EXEC sp_execute_external_script
@language = N'Python'
, @script = N'

import pandas as pd
from sklearn.cluster import KMeans

#get data from input query


customer_data = my_input_data

#We concluded in step 2 in the tutorial that 4 would be a good number of clusters
n_clusters = 4

#Perform clustering
est = KMeans(n_clusters=n_clusters,
random_state=111).fit(customer_data[["orderRatio","itemsRatio","monetaryRatio","frequency"]])
clusters = est.labels_
customer_data["cluster"] = clusters

OutputDataSet = customer_data
'
, @input_data_1 = @input_query
, @input_data_1_name = N'my_input_data'
with result sets (("Customer" int, "orderRatio" float,"itemsRatio" float,"monetaryRatio"
float,"frequency" float,"cluster" float));
float,"frequency" float,"cluster" float));
END;
GO

Agrupación en clústeres
Después de crear el procedimiento almacenado, ejecute el script siguiente para realizar la agrupación en
clústeres mediante el procedimiento.

--Create a table to store the predictions in

DROP TABLE IF EXISTS [dbo].[py_customer_clusters];


GO

CREATE TABLE [dbo].[py_customer_clusters] (


[Customer] [bigint] NULL
, [OrderRatio] [float] NULL
, [itemsRatio] [float] NULL
, [monetaryRatio] [float] NULL
, [frequency] [float] NULL
, [cluster] [int] NULL
,
) ON [PRIMARY]
GO

--Execute the clustering and insert results into table


INSERT INTO py_customer_clusters
EXEC [dbo].[py_generate_customer_return_clusters];

-- Select contents of the table to verify it works


SELECT * FROM py_customer_clusters;

Uso de la información de agrupación en clústeres


Como ha almacenado el procedimiento de agrupación en clústeres en la base de datos, puede realizar la
agrupación en clústeres de forma eficiente con los datos de cliente almacenados en la misma base de datos.
Puede ejecutar el procedimiento cada vez que se actualicen los datos de clientes y usar la información de
agrupación en clústeres actualizada.
Imagine que quiere enviar un correo electrónico promocional a los clientes del clúster 0, el grupo que estaba
inactivo (vea una descripción de los cuatro clústeres en la parte tres de este tutorial). El código siguiente
selecciona las direcciones de correo electrónico de los clientes en el clúster 0.

USE [tpcxbb_1gb]
--Get email addresses of customers in cluster 0 for a promotion campaign
SELECT customer.[c_email_address], customer.c_customer_sk
FROM dbo.customer
JOIN
[dbo].[py_customer_clusters] as c
ON c.Customer = customer.c_customer_sk
WHERE c.cluster = 0

Puede cambiar el valor de c.cluster a las direcciones de correo electrónico de retorno de los clientes en otros
clústeres.

Limpieza de recursos
Cuando termine este tutorial, puede eliminar la base de datos tpcxbb_1gb.
Pasos siguientes
En la parte cuatro de esta serie de tutoriales, ha aprendido a:
Crear un procedimiento almacenado que genere el modelo
Agrupación en clústeres en el servidor
Uso de la información de agrupación en clústeres
Para más información sobre cómo usar Python en el aprendizaje automático de SQL, consulte:
Inicio rápido: Creación y ejecución de scripts de Python
Otros tutoriales de Python para aprendizaje automático de SQL
Instalación de paquetes de Python con sqlmlutils
Tutorial de Python: Predicción de tarifas de taxi de
Nueva York con clasificación binaria
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En esta serie de tutoriales de cinco partes para programadores de SQL, obtendrá información sobre la
integración de Python en SQL Server Machine Learning Services o en Clústeres de macrodatos.
En esta serie de tutoriales de cinco partes para programadores de SQL, obtendrá información sobre la
integración de Python en SQL Server Machine Learning Services.
En esta serie de tutoriales de cinco partes para programadores de SQL, obtendrá información sobre la
integración de Python en Machine Learning Services en Azure SQL Managed Instance.
Creará e implementará una solución de aprendizaje automático basada en Python mediante una base de datos
de ejemplo en SQL Server. Se usará T-SQL, Azure Data Studio, o SQL Server Management Studio, y una
instancia del motor de base de datos con el aprendizaje automático de SQL y la compatibilidad con el lenguaje
Python.
En esta serie de tutoriales se presentan las funciones de Python usadas en un flujo de trabajo de modelado de
datos. Algunas de las partes son la exploración de datos, la creación y el entrenamiento de un modelo de
clasificación binaria, y la implementación del modelo. Usará datos de ejemplo de la Comisión de taxis y
limusinas de la Ciudad de Nueva York. El modelo que se va a compilar predice si es probable que un trayecto
acabe en propina en función de la hora del día, la distancia recorrida y la ubicación de origen.
En la primera parte de esta serie, instalará los requisitos previos y restaurará la base de datos de ejemplo. En las
partes dos y tres, desarrollará scripts de Python para preparar sus datos y entrenar un modelo de Machine
Learning. Después, en las partes cuatro y cinco, ejecutará esos scripts de Python en la base de datos con
procedimientos almacenados en T-SQL.
En este artículo, hará lo siguiente:
Requisitos previos de instalación
Restauración de la base de datos de ejemplo
En la parte dos, explorará los datos de ejemplo y generará algunos trazados.
En la tercera, aprenderá a crear características a partir de datos sin procesar mediante una función de Transact-
SQL. Después, llamaremos a esa función desde un procedimiento almacenado para crear una tabla que contiene
los valores de las características.
En la parte cuatro, cargará los módulos y llamará a las funciones necesarias para crear y entrenar el modelo
mediante un procedimiento almacenado de SQL Server.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

NOTE
Este tutorial está disponible tanto en R como en Python. Para la versión de R, consulte Tutorial de R: Predicción de tarifas
de taxi de Nueva York con clasificación binaria.
Requisitos previos
Instalar SQL Server Machine Learning Services con Python
Conceder permisos para la ejecución de scripts de Python y R
Restaurar la base de datos de demostración de taxis de Nueva York
Todas las tareas pueden realizarse mediante procedimientos almacenados de Transact-SQL de Azure Data Studio
o Management Studio.
En esta serie de tutoriales se supone que está familiarizado con las operaciones básicas de base de datos, como
la creación de bases de datos y tablas, la importación de datos y la escritura de consultas SQL. No da por
sentado que conoce Python; se proporciona todo el código de Python.

Información general para desarrolladores de SQL


El proceso de compilación de una solución de Machine Learning es una tarea compleja para la que se necesitan
varias herramientas y la coordinación de expertos en la materia en distintas fases:
Obtención y limpieza de datos
Exploración de los datos y compilación de características útiles para el modelado
Entrenamiento y ajuste del modelo
Implementación en producción
La mejor manera de desarrollar y probar el código actual es usar un entorno de desarrollo dedicado. Pero,
después de haber probado completamente el script, puede implementarlo fácilmente en SQL Server mediante
procedimientos almacenados de Transact-SQL en el entorno de Azure Data Studio o Management Studio que ya
conoce. El mecanismo principal para poner operativo el código en SQL Server consiste en ajustar el código
externo en procedimientos almacenados.
Después de guardar el modelo en la base de datos, llame al modelo de predicción desde Transact-SQL mediante
procedimientos almacenados.
Tanto si es un programador de SQL que no está familiarizado con Python como si es un desarrollador de Python
que no está familiarizado con SQL, esta serie de cinco tutoriales presenta un flujo de trabajo típico para realizar
análisis en base de datos con Python y SQL Server.

Pasos siguientes
En este artículo:
Instaló los requisitos previos
Restauró la base de datos de ejemplo
Tutorial de Python: Exploración y visualización de datos
Tutorial de Python: Explorar y visualizar datos
14/07/2021 • 5 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte dos de esta serie de tutoriales de cinco partes, explorará los datos de ejemplo y generará algunos
trazados. Más adelante, aprenderá a serializar objetos gráficos en Python y, después, a deserializarlos y a crear
trazados.
En este artículo, hará lo siguiente:
Revisar el código de ejemplo
Creación de trazados con Python en T-SQL
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la tercera, aprenderá a crear características a partir de datos sin procesar mediante una función de Transact-
SQL. Después, llamaremos a esa función desde un procedimiento almacenado para crear una tabla que contiene
los valores de las características.
En la parte cuatro, cargará los módulos y llamará a las funciones necesarias para crear y entrenar el modelo
mediante un procedimiento almacenado de SQL Server.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

Revisión de los datos


En primer lugar, dedique un minuto a examinar el esquema de datos, ya que hemos realizado algunos cambios
para que sea más fácil usar los datos de NYC Taxi.
En el conjunto de datos original, se usaban archivos independientes para los identificadores de taxis y los
registros de trayecto. Hemos combinado los dos conjuntos de datos originales en las columnas medallion,
hack_license y pickup_datetime.
El conjunto de datos original abarcaba muchos archivos y era bastante grande. Lo hemos reducido de
tamaño para obtener solo un 1 % del número de registros original. La tabla de datos actual tiene
1 703 957 filas y 23 columnas.
Identificadores de taxis
La columna medallion representa el número de identificador único del taxi.
La columna hack_license contiene el número de licencia del conductor del taxi (anónimo).
Registros de viajes y tarifas
Cada registro de viaje incluye la ubicación y hora de recogida y destino y la distancia del viaje.
Cada registro de tarifa incluye información de pago, como el tipo de pago, el importe total de pago y la cantidad
de propina.
Las últimas tres columnas se pueden usar para varias tareas de aprendizaje automático. La columna tip_amount
contiene valores numéricos continuos y se puede usar como la columna label para el análisis de regresión. La
columna tipped tiene solo valores sí/no y se usa para la clasificación binaria. La columna tip_class tiene varias
etiquetas de clase y, por tanto, se puede usar como etiqueta para tareas de clasificación de varias clases.
Todos los valores usados en las columnas de etiqueta se basan en la columna tip_amount , con estas reglas de
negocios:
La columna de etiqueta tipped tiene los valores posibles 0 y 1.
Si tip_amount > 0, tipped = 1; de lo contrario, tipped = 0.
La columna de etiqueta tip_class tiene los valores de clase posibles 0-4.
Clase 0: tip_amount =0$
Clase 1: tip_amount >0$y tip_amount <=5$
Clase 2: tip_amount >5$y tip_amount < = 10 $
Clase 3: tip_amount > 10 $ y tip_amount < = 20 $
Clase 4: tip_amount > 20 $

Creación de trazados con Python en T-SQL


Desarrollar una solución de ciencia de datos incluye normalmente la exploración de datos intensivos y la
visualización de datos. Dado que la visualización es una herramienta muy eficaz para comprender la distribución
de los datos y los valores atípicos, Python proporciona muchos paquetes para visualizar los datos. El módulo
matplotlib es una de las bibliotecas más populares de visualización, e incluye muchas funciones para crear
histogramas, gráficos de dispersión, diagramas de caja y otros gráficos de exploración de datos.
En esta sección, aprenderá a trabajar con trazados usando procedimientos almacenados. En lugar de abrir la
imagen en el servidor, almacenará el objeto de Python plot como datos varbinar y y, después, los escribirá en
un archivo que se puede compartir o ver en cualquier otro lugar.
Creación de un trazado como datos varbinary
El procedimiento almacenado devuelve un objeto de Python serializado figure como un flujo de datos
varbinar y . Los datos binarios no se pueden ver directamente, pero se puede usar código de Python en el
cliente para deserializar y ver las cifras y, luego, guardar el archivo de imagen en un equipo cliente.
1. Cree el procedimiento almacenado PyPlotMatplotlib (si el script de PowerShell no lo ha hecho todavía).
La variable @query define el texto de consulta ( SELECT tipped FROM nyctaxi_sample ), que se pasa al
bloque de código de Python como argumento de la variable de entrada de script @input_data_1 .
El script de Python es bastante sencillo: los objetos figure de matplotlib se usan para crear el
histograma y el gráfico de dispersión, y luego estos objetos se serializan utilizando la biblioteca
pickle .
El objeto de gráficos de Python se serializa en un DataFrame de pandas para la salida.
DROP PROCEDURE IF EXISTS PyPlotMatplotlib;
GO

CREATE PROCEDURE [dbo].[PyPlotMatplotlib]


AS
BEGIN
SET NOCOUNT ON;
DECLARE @query nvarchar(max) =
N'SELECT cast(tipped as int) as tipped, tip_amount, fare_amount FROM [dbo].[nyctaxi_sample]'
EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
import pickle

fig_handle = plt.figure()
plt.hist(InputDataSet.tipped)
plt.xlabel("Tipped")
plt.ylabel("Counts")
plt.title("Histogram, Tipped")
plot0 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
plt.clf()

plt.hist(InputDataSet.tip_amount)
plt.xlabel("Tip amount ($)")
plt.ylabel("Counts")
plt.title("Histogram, Tip amount")
plot1 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
plt.clf()

plt.hist(InputDataSet.fare_amount)
plt.xlabel("Fare amount ($)")
plt.ylabel("Counts")
plt.title("Histogram, Fare amount")
plot2 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
plt.clf()

plt.scatter( InputDataSet.fare_amount, InputDataSet.tip_amount)


plt.xlabel("Fare Amount ($)")
plt.ylabel("Tip Amount ($)")
plt.title("Tip amount by Fare amount")
plot3 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
plt.clf()

OutputDataSet = plot0.append(plot1, ignore_index=True).append(plot2, ignore_index=True).append(plot3,


ignore_index=True)
',
@input_data_1 = @query
WITH RESULT SETS ((plot varbinary(max)))
END
GO

2. Ahora, ejecute el procedimiento almacenado sin argumentos para generar un trazado a partir de los
datos codificados de forma rígida como la consulta de entrada.

EXEC [dbo].[PyPlotMatplotlib]

3. Los resultados deben tener un aspecto similar al siguiente:


plot
0xFFD8FFE000104A4649...
0xFFD8FFE000104A4649...
0xFFD8FFE000104A4649...
0xFFD8FFE000104A4649...

4. Desde un cliente de Python, ahora puede conectarse a la instancia de SQL Server que generó los objetos
de trazado binario y ver los trazados.
Para ello, ejecute el siguiente código de Python, reemplazando el nombre del servidor, el nombre de la
base de datos y las credenciales según corresponda (para la autenticación de Windows, reemplace los
parámetros UID y PWD por Trusted_Connection=True ). Asegúrese de que la versión de Python es la
misma en el cliente y en el servidor. Asegúrese también de que las bibliotecas de Python en el cliente (por
ejemplo, matplotlib) tienen la misma versión o una versión superior de las bibliotecas instaladas en el
servidor.

%matplotlib notebook
import pyodbc
import pickle
import os
cnxn = pyodbc.connect('DRIVER=SQL Server;SERVER={SERVER_NAME};DATABASE={DB_NAME};UID={USER_NAME};PWD=
{PASSWORD}')
cursor = cnxn.cursor()
cursor.execute("EXECUTE [dbo].[PyPlotMatplotlib]")
tables = cursor.fetchall()
for i in range(0, len(tables)):
fig = pickle.loads(tables[i][0])
fig.savefig(str(i)+'.png')
print("The plots are saved in directory: ",os.getcwd())

5. Si la conexión se realiza correctamente, debería ver un mensaje similar al siguiente:


Los trazados se guardan en el directorio: xxxx
6. El archivo de salida se crea en el directorio de trabajo de Python. Para ver el trazado, busque el directorio
de trabajo de Python y abra el archivo. En la siguiente imagen se muestra un trazado guardado en el
equipo cliente.
Pasos siguientes
En este artículo:
Revisó los datos de ejemplo.
Creó trazados con Python en T-SQL.
Tutorial de Python: Creación de características de datos mediante T-SQL
Tutorial de Python: Creación de características de
datos mediante T-SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte tres de esta serie de tutoriales de cinco partes, aprenderá a crear características a partir de datos sin
procesar mediante una función Transact-SQL. Después, llamará a esa función desde un procedimiento
almacenado de SQL para crear una tabla que contenga los valores de las características.
El proceso de caracterización, la creación de características a partir de los datos sin procesar, puede ser un paso
crítico en el modelado de análisis avanzados.
En este artículo, hará lo siguiente:
Modificará una función personalizada para calcular la distancia de la carrera
Guardará las características mediante otra función personalizada
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, ha explorado los datos de ejemplo y ha generado algunos trazados.
En la parte cuatro, cargará los módulos y llamará a las funciones necesarias para crear y entrenar el modelo
mediante un procedimiento almacenado de SQL Server.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

Definir la función
Los valores de distancia notificados en los datos originales se basan en la distancia notificada del taxímetro y no
representan necesariamente la distancia geográfica o la distancia recorrida. Por tanto, debe calcular la distancia
directa entre los puntos de origen y destino, usando las coordenadas disponibles en el conjunto de datos de
origen NYC Taxi. Puede hacerlo mediante la fórmula Haversine en un función personalizada de Transact-SQL .
Usará una función personalizada de T-SQL, fnCalculateDistance, para calcular la distancia usando la fórmula
Haversine, y una segunda función personalizada de T-SQL, fnEngineerFeatures, para crear una tabla que
contiene todas las características.
Cálculo de la distancia del trayecto con fnCalculateDistance
1. La función fnCalculateDistance se incluye en la base de datos de ejemplo. Tómese un minuto para revisar
el código.
2. En Management Studio, expanda Programación , expanda Funciones y, después, Funciones
escalares . Haga clic con el botón derecho en fnCalculateDistance y seleccione Modificar para abrir el
script de Transact-SQL en una nueva ventana de consulta.
CREATE FUNCTION [dbo].[fnCalculateDistance] (@Lat1 float, @Long1 float, @Lat2 float, @Long2 float)
-- User-defined function that calculates the direct distance between two geographical coordinates
RETURNS float
AS
BEGIN
DECLARE @distance decimal(28, 10)
-- Convert to radians
SET @Lat1 = @Lat1 / 57.2958
SET @Long1 = @Long1 / 57.2958
SET @Lat2 = @Lat2 / 57.2958
SET @Long2 = @Long2 / 57.2958
-- Calculate distance
SET @distance = (SIN(@Lat1) * SIN(@Lat2)) + (COS(@Lat1) * COS(@Lat2) * COS(@Long2 - @Long1))
--Convert to miles
IF @distance <> 0
BEGIN
SET @distance = 3958.75 * ATAN(SQRT(1 - POWER(@distance, 2)) / @distance);
END
RETURN @distance
END
GO

Notas:
La función es una función escalar y devuelve un único valor de datos de un tipo predefinido.
Toma los valores de latitud y longitud como entradas, obtenidos de las ubicaciones de origen y destino de los
viajes. La fórmula Haversine convierte ubicaciones en radianes y usa esos valores para calcular la distancia
directa en millas entre las dos ubicaciones.
Para agregar el valor calculado a una tabla y poder usarlo para entrenar el modelo, deberá usar otra función,
fnEngineerFeatures.
Guardado de las características mediante fnEngineerFeatures
1. Dedique un minuto a revisar el código de la función T-SQL personalizada, fnEngineerFeatures, que se
incluye en la base de datos de ejemplo.
Esta función es una función con valores de tabla que toma varias columnas como entradas y genera una
tabla con varias columnas de características. El propósito de esta función es crear un conjunto de
características para usar en la creación de un modelo. La función fnEngineerFeatures llama a la función
de T-SQL creada anteriormente, fnCalculateDistance, para obtener la distancia directa entre las
ubicaciones de origen y destino.
CREATE FUNCTION [dbo].[fnEngineerFeatures] (
@passenger_count int = 0,
@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0)
RETURNS TABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references here
SELECT
@passenger_count AS passenger_count,
@trip_distance AS trip_distance,
@trip_time_in_secs AS trip_time_in_secs,
[dbo].[fnCalculateDistance](@pickup_latitude, @pickup_longitude, @dropoff_latitude,
@dropoff_longitude) AS direct_distance
)
GO

2. Para comprobar que esta función funciona, puede usarla para calcular la distancia geográfica de los viajes
en los que la distancia medida era 0 pero las ubicaciones de origen y destino eran diferentes.

SELECT tipped, fare_amount, passenger_count,(trip_time_in_secs/60) as TripMinutes,


trip_distance, pickup_datetime, dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude)
AS direct_distance
FROM nyctaxi_sample
WHERE pickup_longitude != dropoff_longitude and pickup_latitude != dropoff_latitude and
trip_distance = 0
ORDER BY trip_time_in_secs DESC

Como puede ver, la distancia notificada por el taxímetro no siempre se corresponde con la distancia
geográfica. Por eso es importante la ingeniería de características.
En la parte siguiente, aprenderá a usar estas características de datos para crear y entrenar un modelo de
aprendizaje automático con Python.

Pasos siguientes
En este artículo:
Se modificó una función personalizada para calcular la distancia de la carrera
Se guardaron las características mediante otra función personalizada
Tutorial de Python: Entrenar y guardar un modelo de Python mediante T-SQL
Tutorial de Python: Entrenar y guardar un modelo
de Python mediante T-SQL
14/07/2021 • 6 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la cuarta parte de esta serie de tutoriales de cinco partes, aprenderá a entrenar un modelo de Machine
Learning usando los paquetes de Python scikit-learn y revoscalepy . Estas bibliotecas de Python ya están
instaladas con el aprendizaje automático de SQL Server.
Cargará los módulos y llamará a las funciones necesarias para crear y entrenar el modelo mediante un
procedimiento almacenado de SQL Server. El modelo requiere las características de datos que ha diseñado en
partes anteriores de esta serie de tutoriales. Por último, guardará el modelo entrenado en una tabla SQL Server.
En este artículo, hará lo siguiente:
Crear y entrenar un modelo mediante un procedimiento almacenado de SQL
Guardar el modelo entrenado en una tabla SQL
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, ha explorado los datos de ejemplo y ha generado algunos trazados.
En la tres, aprendió a crear características a partir de datos sin procesar mediante una función de Transact-SQL.
Después, llamó a esa función desde un procedimiento almacenado para crear una tabla que contiene los valores
de las características.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

Dividir los datos de muestra en conjuntos de entrenamiento y de


prueba
1. Cree un procedimiento almacenado denominado PyTrainTestSplit para dividir los datos de la tabla
nyctaxi_sample en dos partes: nyctaxi_sample_training y nyctaxi_sample_testing.
Aunque este procedimiento almacenado ya debería estar creado, puede ejecutar este código para crearlo:

DROP PROCEDURE IF EXISTS PyTrainTestSplit;


GO

CREATE PROCEDURE [dbo].[PyTrainTestSplit] (@pct int)


AS

DROP TABLE IF EXISTS dbo.nyctaxi_sample_training


SELECT * into nyctaxi_sample_training FROM nyctaxi_sample WHERE
(ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) < @pct

DROP TABLE IF EXISTS dbo.nyctaxi_sample_testing


SELECT * into nyctaxi_sample_testing FROM nyctaxi_sample
WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) > @pct
GO

2. Para dividir los datos mediante una división personalizada, ejecute el procedimiento almacenado y
escriba un entero que represente el porcentaje de datos asignados al conjunto de entrenamiento. Por
ejemplo, la siguiente instrucción asignaría el 60 % de los datos al conjunto de entrenamiento.

EXEC PyTrainTestSplit 60
GO

Crear un modelo de regresión logística


Una vez preparados los datos, ya puede usarlos para entrenar un modelo. Para ello, llame a un procedimiento
almacenado que ejecute código de Python, tomando como entrada la tabla de datos de entrenamiento. En este
tutorial, creará dos modelos, ambos modelos de clasificación binaria:
El procedimiento almacenado PyTrainScikit crea un modelo de predicción de propinas mediante el paquete
scikit-learn .
El procedimiento almacenado TrainTipPredictionModelRxPy crea un modelo de predicción de propinas
mediante el paquete revoscalepy .
Cada procedimiento almacenado usa los datos de entrada proporcionados para crear y entrenar un modelo de
regresión logística. Todo el código de Python se ajusta en el procedimiento almacenado del sistema,
sp_execute_external_script.
Para que sea más fácil volver a entrenar el modelo según los nuevos datos, ajuste la llamada a
sp_execute_external_script en otro procedimiento almacenado y pase los nuevos datos de entrenamiento como
un parámetro. Esta sección le guiará a través de ese proceso.
PyTrainScikit
1. En Management Studio, abra una nueva ventana Consulta y ejecute esta instrucción siguiente para crear
el procedimiento almacenado PyTrainScikit . El procedimiento almacenado contiene una definición de
los datos de entrada, por lo que no es necesario proporcionar una consulta de entrada.
DROP PROCEDURE IF EXISTS PyTrainScikit;
GO

CREATE PROCEDURE [dbo].[PyTrainScikit] (@trained_model varbinary(max) OUTPUT)


AS
BEGIN
EXEC sp_execute_external_script
@language = N'Python',
@script = N'
import numpy
import pickle
from sklearn.linear_model import LogisticRegression

##Create SciKit-Learn logistic regression model


X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel(InputDataSet[["tipped"]])

SKLalgo = LogisticRegression()
logitObj = SKLalgo.fit(X, y)

##Serialize model
trained_model = pickle.dumps(logitObj)
',
@input_data_1 = N'
select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as
direct_distance
from nyctaxi_sample_training
',
@input_data_1_name = N'InputDataSet',
@params = N'@trained_model varbinary(max) OUTPUT',
@trained_model = @trained_model OUTPUT;
;
END;
GO

2. Ejecute estas instrucciones SQL para insertar el modelo entrenado en la tabla nyc_taxi_models.

DECLARE @model VARBINARY(MAX);


EXEC PyTrainScikit @model OUTPUT;
INSERT INTO nyc_taxi_models (name, model) VALUES('SciKit_model', @model);

Es posible que el procesamiento de los datos y el ajuste del modelo tarde unos minutos. Los mensajes
que se canalicen al flujo stdout de Python se muestran en la ventana Mensajes de Management Studio.
Por ejemplo:

STDOUT message(s) from external script:


C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-
packages\revoscalepy

3. Abra la tabla nyc_taxi_models. Puede ver que se ha agregado una fila nueva, que contiene el modelo
serializado en la columna modelo.

SciKit_model
0x800363736B6C6561726E2E6C696E6561....

TrainTipPredictionModelRxPy
Este procedimiento almacenado usa el nuevo paquete revoscalepy , que es un nuevo paquete de Python.
Contiene objetos, transformaciones y algoritmos similares a los proporcionados para el paquete RevoScaleR
del lenguaje R.
Al usar revoscalepy , puede crear contextos de proceso remotos, trasladar datos entre contextos de proceso,
transformar datos y entrenar modelos predictivos mediante algoritmos populares, como regresión logística y
lineal, árboles de decisión, etc. Para más información, vea Módulo revoscalepy en SQL Server y Referencia de
funciones de revoscalepy.
1. En Management Studio, abra una nueva ventana Consulta y ejecute esta instrucción para crear el
procedimiento almacenado TrainTipPredictionModelRxPy. Como el procedimiento almacenado ya incluye
una definición de los datos de entrada, no es necesario proporcionar una consulta de entrada.

DROP PROCEDURE IF EXISTS TrainTipPredictionModelRxPy;


GO

CREATE PROCEDURE [dbo].[TrainTipPredictionModelRxPy] (@trained_model varbinary(max) OUTPUT)


AS
BEGIN
EXEC sp_execute_external_script
@language = N'Python',
@script = N'
import numpy
import pickle
from revoscalepy.functions.RxLogit import rx_logit

## Create a logistic regression model using rx_logit function from revoscalepy package
logitObj = rx_logit("tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance",
data = InputDataSet);

## Serialize model
trained_model = pickle.dumps(logitObj)
',
@input_data_1 = N'
select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as
direct_distance
from nyctaxi_sample_training
',
@input_data_1_name = N'InputDataSet',
@params = N'@trained_model varbinary(max) OUTPUT',
@trained_model = @trained_model OUTPUT;
;
END;
GO

Este procedimiento almacenado realiza estos pasos como parte del entrenamiento del modelo:
La consulta SELECT aplica la función escalar personalizada fnCalculateDistance para calcular la
distancia directa entre las ubicaciones de origen y de destino. Los resultados de la consulta se
almacenan en la variable de entrada predeterminada de Python, InputDataset .
La variable binaria tipped se usa como la etiqueta o la columna de resultados y el modelo se ajusta
mediante estas columnas específicas: passenger_count, trip_distance, trip_time_in_secs y
direct_distance.
El modelo entrenado se serializa y se almacena en la variable de Python logitObj . Al agregar la
palabra clave OUTPUT de T-SQL, puede agregar la variable como un resultado del procedimiento
almacenado. En el paso siguiente, esa variable se usa para insertar el código binario del modelo en
una tabla de base de datos nyc_taxi_models. Este mecanismo facilita el almacenamiento y la
reutilización de modelos.
2. Ejecute el procedimiento almacenado como se indica aquí para insertar el modelo entrenado
revoscalepy en la tabla nyc_taxi_models.
DECLARE @model VARBINARY(MAX);
EXEC TrainTipPredictionModelRxPy @model OUTPUT;
INSERT INTO nyc_taxi_models (name, model) VALUES('revoscalepy_model', @model);

Es posible que el procesamiento de los datos y el ajuste del modelo tarden un rato. Los mensajes que se
canalicen al flujo stdout de Python se muestran en la ventana Mensajes de Management Studio. Por
ejemplo:

STDOUT message(s) from external script:


C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-
packages\revoscalepy

3. Abra la tabla nyc_taxi_models. Puede ver que se ha agregado una fila nueva, que contiene el modelo
serializado en la columna modelo.

revoscalepy_model
0x8003637265766F7363616c....

En la siguiente parte de este tutorial, usará los modelos entrenados para crear predicciones.

Pasos siguientes
En este artículo:
Creó y entrenó un modelo mediante un procedimiento almacenado de SQL
Guardó el modelo entrenado en una tabla SQL
Tutorial de Python: Ejecución de predicciones con Python insertado en un procedimiento almacenado
Tutorial de Python: Ejecución de predicciones con
Python insertado en un procedimiento almacenado
14/07/2021 • 9 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte cinco de esta serie de tutoriales de cinco partes, aprenderá a poner en marcha los modelos
entrenados y guardados en la parte anterior.
En este escenario, por operacionalización se entiende implementar el modelo en producción para su puntuación.
La integración con SQL Server hace que esto sea bastante sencillo, ya que se puede insertar código de Python
en un procedimiento almacenado. Para obtener predicciones del modelo en función de nuevas entradas, basta
con llamar al procedimiento almacenado desde una aplicación y pasar los nuevos datos.
En esta parte del tutorial se muestran dos métodos para crear predicciones basadas en un modelo de Python:
puntuación por lotes y puntuación fila por fila.
Puntuación por lotes: para proporcionar varias filas de datos de entrada, pase una consulta SELECT como
argumento al procedimiento almacenado. El resultado es una tabla de observaciones correspondientes a los
casos de entrada.
Puntuación individual: Pase un conjunto de valores de parámetros individuales como entrada. El
procedimiento almacenado devuelve una sola fila o valor.
Todo el código de Python necesario para la puntuación se facilita como parte de los procedimientos
almacenados.
En este artículo, hará lo siguiente:
Crear y usar procedimientos almacenados para la puntuación por lotes
Crear y usar procedimientos almacenados para puntuar una sola fila
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, ha explorado los datos de ejemplo y ha generado algunos trazados.
En la tres, aprendió a crear características a partir de datos sin procesar mediante una función de Transact-SQL.
Después, llamó a esa función desde un procedimiento almacenado para crear una tabla que contiene los valores
de las características.
En la parte cuatro, cargó los módulos y llamó a las funciones necesarias para crear y entrenar el modelo
mediante un procedimiento almacenado de SQL Server.

Puntuación por lotes


Los dos primeros procedimientos almacenados ilustran la sintaxis básica para ajustar una llamada de predicción
de Python en un procedimiento almacenado. Ambos procedimientos almacenados requieren una tabla de datos
como entradas.
El nombre del modelo exacto que se debe usar se proporciona como un parámetro de entrada en el
procedimiento almacenado. El procedimiento almacenado carga el modelo serializado desde la tabla de
base de datos nyc_taxi_models mediante la instrucción SELECT del procedimiento almacenado.
El modelo serializado se almacena en la variable de Python mod para su posterior procesamiento
mediante Python.
Los nuevos casos que se deben puntuar se obtienen de la consulta Transact-SQL especificada en
@input_data_1 . Cuando se leen los datos de la consulta, las filas se guardan en la trama de datos
predeterminada, InputDataSet .
Ambos procedimientos almacenados usan funciones de sklearn para calcular una métrica de precisión,
AUC (correspondiente a área en curva). Las métricas de precisión, como AUC, solo se pueden generar si
se proporciona también la etiqueta de destino (la columna tipped). Las predicciones no necesitan la
etiqueta de destino (variable y ), pero sí el cálculo de la métrica de precisión.
En consecuencia, si no hay etiquetas de destino correspondientes a los datos que se van a puntuar, puede
modificar el procedimiento almacenado para quitar los cálculos de AUC y devolver solo las
probabilidades de propina de las características (variable X del procedimiento almacenado).
PredictTipSciKitPy
Ejecute las siguientes instrucciones T-SQL para crear los procedimientos almacenados. Este procedimiento
almacenado requiere un modelo basado en el paquete scikit-learn, ya que usa funciones específicas de ese
paquete.
La trama de datos que contiene entradas se pasa a la función predict_proba del modelo de regresión logística,
mod . La función predict_proba ( probArray = mod.predict_proba(X) ) devuelve un valor float que representa la
probabilidad de que conseguir propina (del importe que sea).

DROP PROCEDURE IF EXISTS PredictTipSciKitPy;


GO

CREATE PROCEDURE [dbo].[PredictTipSciKitPy] (@model varchar(50), @inquery nvarchar(max))


AS
BEGIN
DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);
EXEC sp_execute_external_script
@language = N'Python',
@script = N'
import pickle;
import numpy;
from sklearn import metrics

mod = pickle.loads(lmodel2)
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel(InputDataSet[["tipped"]])

probArray = mod.predict_proba(X)
probList = []
for i in range(len(probArray)):
probList.append((probArray[i])[1])

probArray = numpy.asarray(probList)
fpr, tpr, thresholds = metrics.roc_curve(y, probArray)
aucResult = metrics.auc(fpr, tpr)
print ("AUC on testing data is: " + str(aucResult))

OutputDataSet = pandas.DataFrame(data = probList, columns = ["predictions"])


',
@input_data_1 = @inquery,
@input_data_1_name = N'InputDataSet',
@params = N'@lmodel2 varbinary(max)',
@lmodel2 = @lmodel2
WITH RESULT SETS ((Score float));
END
GO
PredictTipRxPy
Este procedimiento almacenado usa las mismas entradas y crea el mismo tipo de puntuaciones que el
procedimiento almacenado anterior, pero usa las funciones del paquete revoscalepy proporcionado con
SQL Server Machine Learning.

DROP PROCEDURE IF EXISTS PredictTipRxPy;


GO

CREATE PROCEDURE [dbo].[PredictTipRxPy] (@model varchar(50), @inquery nvarchar(max))


AS
BEGIN
DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);
EXEC sp_execute_external_script
@language = N'Python',
@script = N'
import pickle;
import numpy;
from sklearn import metrics
from revoscalepy.functions.RxPredict import rx_predict;

mod = pickle.loads(lmodel2)
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
y = numpy.ravel(InputDataSet[["tipped"]])

probArray = rx_predict(mod, X)
probList = probArray["tipped_Pred"].values

probArray = numpy.asarray(probList)
fpr, tpr, thresholds = metrics.roc_curve(y, probArray)
aucResult = metrics.auc(fpr, tpr)
print ("AUC on testing data is: " + str(aucResult))

OutputDataSet = pandas.DataFrame(data = probList, columns = ["predictions"])


',
@input_data_1 = @inquery,
@input_data_1_name = N'InputDataSet',
@params = N'@lmodel2 varbinary(max)',
@lmodel2 = @lmodel2
WITH RESULT SETS ((Score float));
END
GO

Ejecución de una puntuación por lotes mediante una consulta SELECT


Los procedimientos almacenados PredictTipSciKitPy y PredictTipRxPy requieren dos parámetros de entrada:
La consulta que recupera los datos para la puntuación
El nombre de un modelo entrenado
Al pasar esos argumentos al procedimiento almacenado, puede seleccionar un modelo determinado o cambiar
los datos que se usan para la puntuación.
1. Para usar el modelo scikit-learn para la puntuación, llame al procedimiento almacenado
PredictTipSciKitPy , pasando como entradas el nombre del modelo y la cadena de consulta.
DECLARE @query_string nvarchar(max) -- Specify input query
SET @query_string='
select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as
direct_distance
from nyctaxi_sample_testing'
EXEC [dbo].[PredictTipSciKitPy] 'SciKit_model', @query_string;

El procedimiento almacenado devuelve las probabilidades previstas de cada trayecto que se pasaron
como parte de la consulta de entrada.
Si usa SSMS (SQL Server Management Studio) para ejecutar las consultas, las probabilidades aparecerán
como una tabla en el panel Resultados . El panel Mensajes muestra la métrica de precisión (AUC, o área
en curva) con un valor aproximado de 0,56.
2. Para usar el modelo revoscalepy para la puntuación, llame al procedimiento almacenado
PredictTipRxPy , pasando como entradas el nombre del modelo y la cadena de consulta.

DECLARE @query_string nvarchar(max) -- Specify input query


SET @query_string='
select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as
direct_distance
from nyctaxi_sample_testing'
EXEC [dbo].[PredictTipRxPy] 'revoscalepy_model', @query_string;

Puntuación de fila única


A veces, en lugar de la puntuación por lotes, puede que prefiera pasar un solo caso, para lo cual se obtienen los
valores de una aplicación y se devuelve un único resultado en función de esos valores. Por ejemplo, podría
configurar una hoja de cálculo de Excel, una aplicación web o un informe para llamar al procedimiento
almacenado y proporcionarle entradas escritas o seleccionadas por los usuarios.
En esta sección, aprenderá a crear predicciones únicas llamando a dos procedimientos almacenados:
PredictTipSingleModeSciKitPy está diseñado para la puntuación de fila única con el modelo scikit-learn.
PredictTipSingleModeRxPy está diseñado para la puntuación de fila única con el modelo revoscalepy.
Si aún no ha entrenado un modelo, vuelva a la parte cinco.
Ambos modelos toman como entrada una serie de valores únicos, como el número de pasajeros, la distancia del
trayecto, etc. Una función con valores de tabla, fnEngineerFeatures , se usa para convertir los valores de latitud y
longitud de las entradas en una nueva característica: distancia directa. La parte cuatro contiene una descripción
de esta función con valores de tabla.
Ambos procedimientos almacenados crean una puntuación basada en el modelo de Python.

NOTE
Si se llama al procedimiento almacenado desde una aplicación externa, es importante facilitar todas las características de
entrada que el modelo de Python requiere. Para no cometer errores, puede que tenga que convertir los datos de entrada
en un tipo de datos de Python, además de validar el tipo y la longitud de los datos.

PredictTipSingleModeSciKitPy
Dedique un minuto a revisar el código del procedimiento almacenado que realiza la puntuación con el modelo
scikit-learn .
DROP PROCEDURE IF EXISTS PredictTipSingleModeSciKitPy;
GO

CREATE PROCEDURE [dbo].[PredictTipSingleModeSciKitPy] (@model varchar(50), @passenger_count int = 0,


@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0)
AS
BEGIN
DECLARE @inquery nvarchar(max) = N'
SELECT * FROM [dbo].[fnEngineerFeatures](
@passenger_count,
@trip_distance,
@trip_time_in_secs,
@pickup_latitude,
@pickup_longitude,
@dropoff_latitude,
@dropoff_longitude)
'
DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);
EXEC sp_execute_external_script
@language = N'Python',
@script = N'
import pickle;
import numpy;

# Load model and unserialize


mod = pickle.loads(model)

# Get features for scoring from input data


X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]

# Score data to get tip prediction probability as a list (of float)


probList = []
probList.append((mod.predict_proba(X)[0])[1])

# Create output data frame


OutputDataSet = pandas.DataFrame(data = probList, columns = ["predictions"])
',
@input_data_1 = @inquery,
@params = N'@model varbinary(max),@passenger_count int,@trip_distance float,
@trip_time_in_secs int ,
@pickup_latitude float ,
@pickup_longitude float ,
@dropoff_latitude float ,
@dropoff_longitude float',
@model = @lmodel2,
@passenger_count =@passenger_count ,
@trip_distance=@trip_distance,
@trip_time_in_secs=@trip_time_in_secs,
@pickup_latitude=@pickup_latitude,
@pickup_longitude=@pickup_longitude,
@dropoff_latitude=@dropoff_latitude,
@dropoff_longitude=@dropoff_longitude
WITH RESULT SETS ((Score float));
END
GO

PredictTipSingleModeRxPy
El siguiente procedimiento almacenado realiza la puntuación mediante el modelo revoscalepy .
DROP PROCEDURE IF EXISTS PredictTipSingleModeRxPy;
GO

CREATE PROCEDURE [dbo].[PredictTipSingleModeRxPy] (@model varchar(50), @passenger_count int = 0,


@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0)
AS
BEGIN
DECLARE @inquery nvarchar(max) = N'
SELECT * FROM [dbo].[fnEngineerFeatures](
@passenger_count,
@trip_distance,
@trip_time_in_secs,
@pickup_latitude,
@pickup_longitude,
@dropoff_latitude,
@dropoff_longitude)
'
DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);
EXEC sp_execute_external_script
@language = N'Python',
@script = N'
import pickle;
import numpy;
from revoscalepy.functions.RxPredict import rx_predict;

# Load model and unserialize


mod = pickle.loads(model)

# Get features for scoring from input data


X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]

# Score data to get tip prediction probability as a list (of float)

probArray = rx_predict(mod, X)

probList = []
probList = probArray["tipped_Pred"].values

# Create output data frame


OutputDataSet = pandas.DataFrame(data = probList, columns = ["predictions"])
',
@input_data_1 = @inquery,
@params = N'@model varbinary(max),@passenger_count int,@trip_distance float,
@trip_time_in_secs int ,
@pickup_latitude float ,
@pickup_longitude float ,
@dropoff_latitude float ,
@dropoff_longitude float',
@model = @lmodel2,
@passenger_count =@passenger_count ,
@trip_distance=@trip_distance,
@trip_time_in_secs=@trip_time_in_secs,
@pickup_latitude=@pickup_latitude,
@pickup_longitude=@pickup_longitude,
@dropoff_latitude=@dropoff_latitude,
@dropoff_longitude=@dropoff_longitude
WITH RESULT SETS ((Score float));
END
GO

Generación de puntuaciones a partir de modelos


Una vez creados los procedimientos almacenados, es fácil generar una puntuación basada en cualquiera de los
modelos. Solo tiene que abrir una nueva ventana Consulta y escribir o pegar los parámetros de cada una de las
columnas de característica. Los siete valores necesarios en estas columnas de característica son, en orden:
passenger_count
trip_distance
trip_time_in_secs
pickup_latitude
pickup_longitude
dropoff_latitude
dropoff_longitude
1. Ejecute esta instrucción para generar una predicción mediante el modelo revoscalepy :

EXEC [dbo].[PredictTipSingleModeRxPy] 'revoscalepy_model', 1, 2.5, 631, 40.763958,-73.973373,


40.782139,-73.977303

2. Ejecute esta instrucción para generar una puntuación mediante el modelo scikit-learn :

EXEC [dbo].[PredictTipSingleModeSciKitPy] 'SciKit_model', 1, 2.5, 631, 40.763958,-73.973373,


40.782139,-73.977303

La salida de ambos procedimientos es la probabilidad de que se abone una propina por el trayecto en taxi,
dados los parámetros o características especificados.

Conclusiones
En esta serie de tutoriales, ha aprendido a trabajar con código de Python insertado en procedimientos
almacenados. La integración con Transact-SQL hace mucho más fácil la implementación de modelos de Python
para la predicción y la incorporación del reciclaje de modelos como parte de un flujo de trabajo de datos
empresarial.

Pasos siguientes
En este artículo:
Creó y usó procedimientos almacenados para la puntuación por lotes
Creó y usó procedimientos almacenados para puntuar una sola fila
Para más información sobre Python, consulte Extensión de Python en SQL Server.
Usar Python con revoscalepy para crear un modelo
que se ejecute de forma remota en SQL Server
14/07/2021 • 7 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores


La biblioteca revoscalepy para Python de Microsoft proporciona algoritmos de ciencia de datos para la
exploración, la visualización, las transformaciones y el análisis de datos. Esta biblioteca tiene una importancia
estratégica en escenarios de integración de Python en SQL Server. En un servidor de varios núcleos, las
funciones de revoscalepy se pueden ejecutar en paralelo. En una arquitectura distribuida con un servidor
central y estaciones de trabajo cliente (equipos físicos independientes, todos ellos con la misma biblioteca de
revoscalepy ), se puede escribir código de Python que se inicie localmente, pero que después pase a ejecutarse
en una instancia de SQL Server remota en la que residen los datos.
revoscalepy se encuentra en los siguientes productos y distribuciones de Microsoft:
SQL Server Machine Learning Services (en base de datos)
Bibliotecas de Python del lado cliente (para estaciones de trabajo de desarrollo)
En este ejercicio se muestra cómo crear un modelo de regresión lineal basado en rx_lin_mod, uno de los
algoritmos de revoscalepy que acepta el contexto de proceso como una entrada. El código que ejecutará en
este ejercicio desplazará la ejecución del código de un entorno informático local a uno remoto, habilitado por las
funciones de revoscalepy que habilitan un contexto de proceso remoto.
En este tutorial, aprenderá a:
Usar revoscalepy para crear un modelo lineal
Desplazar operaciones desde un contexto de proceso local a uno remoto

Prerrequisitos
Como datos de ejemplo de este ejercicio, se usa la base de datos flightdata .
Necesita un IDE para ejecutar el código de ejemplo de este artículo y el IDE debe estar vinculado al archivo
ejecutable de Python.
Para practicar un cambio de contexto de proceso, necesita una estación de trabajo local y una instancia del
motor de base de datos de SQL Server con Machine Learning Services y Python habilitados.

TIP
Si no tiene dos equipos, puede instalar las aplicaciones pertinentes que le permitan simular un contexto de proceso
remoto en un equipo físico. En primer lugar, una instalación de SQL Server Machine Learning Services funciona como
instancia "remota". En segundo lugar, la instalación de las bibliotecas de cliente de Python funciona como cliente. En el
mismo equipo, tendrá dos copias de la misma distribución de Python y las bibliotecas de Python de Microsoft. Para
completar el ejercicio correctamente, tendrá que realizar un seguimiento de las rutas de acceso de archivo y de la copia de
Python.exe que se utiliza.

Contextos de proceso remotos y revoscalepy


En este ejemplo se muestra el proceso de creación de un modelo de Python en un contexto de proceso remoto
que le permite trabajar desde un cliente, pero elegir un entorno remoto en el que se realizan las operaciones,
como SQL Server o Spark. El objetivo del contexto de proceso remoto es llevar el proceso a donde residen los
datos.
Para ejecutar el código de Python en SQL Server, se necesita el paquete revoscalepy . Se trata de un paquete de
Python especial proporcionado por Microsoft, similar al paquete RevoScaleR para el lenguaje R. El paquete
revoscalepy admite la creación de contextos de proceso y proporciona la infraestructura para pasar datos y
modelos entre una estación de trabajo local y un servidor remoto. La función de revoscalepy que admite la
ejecución de código en la base de datos es RxInSqlServer.
En esta lección, se usarán los datos de SQL Server para entrenar un modelo lineal basado en rx_lin_mod, una
función de revoscalepy que admite la regresión en conjuntos de datos muy grandes.
En esta lección también se muestran los aspectos básicos de cómo configurar y usar un contexto de proceso
de SQL Ser ver en Python.

Ejecución del código de ejemplo


Una vez que haya preparado la base de datos y tenga los datos para el entrenamiento almacenados en una
tabla, abra un entorno de desarrollo de Python y ejecute el ejemplo de código.
Este código realiza los pasos siguientes:
1. Importa las bibliotecas y funciones necesarias.
2. Crea una conexión a SQL Server. Crea objetos de origen de datos para trabajar con los datos.
3. Modifica los datos mediante transformaciones de modo que el algoritmo de regresión logística pueda
usarlos.
4. Llama a rx_lin_mod y define la fórmula utilizada para ajustar el modelo.
5. Genera un conjunto de predicciones basadas en los datos originales.
6. Crea un resumen basado en la predicción de valores.
Todas las operaciones se realizan utilizando una instancia de SQL Server como contexto de proceso.

NOTE
Para ver una demostración de este ejemplo en ejecución desde la línea de comandos, consulte este vídeo: Análisis
avanzado de SQL Server 2017 con Python.

Código de ejemplo
from revoscalepy import RxComputeContext, RxInSqlServer, RxSqlServerData
from revoscalepy import rx_lin_mod, rx_predict, rx_summary
from revoscalepy import RxOptions, rx_import

import os

def test_linmod_sql():
sql_server = os.getenv('PYTEST_SQL_SERVER', '.')

sql_connection_string = 'Driver=SQL Server;Server=' + sqlServer +


';Database=sqlpy;Trusted_Connection=True;'
print("connectionString={0!s}".format(sql_connection_string))

data_source = RxSqlServerData(
sql_query = "select top 10 * from airlinedemosmall",
connection_string = sql_connection_string,

column_info = {
"ArrDelay" : { "type" : "integer" },
"DayOfWeek" : {
"type" : "factor",
"levels" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
}
})

sql_compute_context = RxInSqlServer(
connection_string = sql_connection_string,
num_tasks = 4,
auto_cleanup = False
)

#
# Run linmod locally
#
linmod_local = rx_lin_mod("ArrDelay ~ DayOfWeek", data = data_source)
#
# Run linmod remotely
#
linmod = rx_lin_mod("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

# Predict results
#
predict = rx_predict(linmod, data = rx_import(input_data = data_source))
summary = rx_summary("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

Definición de un origen de datos y definición de un contexto de proceso


Un origen de datos es diferente de un contexto de proceso. El origen de datos define los datos que se usan en el
código. El contexto de proceso define dónde se ejecutará el código. Pero se usa parte de la misma información:
Las variables de Python, como sql_query y sql_connection_string , definen el origen de los datos.
Pase estas variables al constructor RxSqlServerData para implementar el objeto de origen de datos
denominado data_source .
Se crea un objeto de contexto de proceso mediante el constructor RxInSqlServer. El objeto de
contexto de proceso resultante se denomina sql_cc .
En este ejemplo se vuelve a usar la misma cadena de conexión que se usó en el origen de datos,
suponiendo que los datos están en la misma instancia de SQL Server que va a usar como el contexto de
proceso.
No obstante, el origen de datos y el contexto de proceso pueden estar en servidores diferentes.
Cambio de los contextos de proceso
Después de definir un contexto de proceso, debe establecer el contexto de proceso activo .
De forma predeterminada, la mayoría de las operaciones se ejecutan localmente, lo que significa que si no se
especifica un contexto de proceso diferente, los datos se capturarán en el origen de datos y el código se
ejecutará en el entorno de Python actual.
Hay dos maneras de establecer el contexto de proceso activo:
Como argumento de un método o función
Mediante una llamada a rx_set_computecontext
Establecimiento del contexto de proceso como un argumento de un método o una función
En este ejemplo, se establece el contexto de proceso mediante un argumento de la función individual r x .
linmod = rx_lin_mod_ex("ArrDelay ~ DayOfWeek", data = data, compute_context = sql_compute_context)

Este contexto de proceso se reutiliza en la llamada a rxsummary:


summary = rx_summary("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

Establecimiento explícito de un contexto de proceso mediante rx_set_compute_context


La función rx_set_compute_context permite alternar entre los contextos de proceso que ya se han definido.
Después de establecer un contexto de proceso, este permanece activo hasta que se cambie.
Uso de streaming y procesamiento en paralelo
Al definir el contexto de proceso, también puede establecer parámetros que controlen la forma en que el
contexto de proceso administra los datos. Estos parámetros difieren en función del tipo de origen de datos.
Para contextos de proceso de SQL Server, puede establecer el tamaño del lote o proporcionar sugerencias sobre
el grado de paralelismo que se va a usar en las tareas en ejecución.
El ejemplo se ejecutó en un equipo con cuatro procesadores, por lo que el parámetro num_tasks está
establecido en 4 para permitir el uso máximo de recursos.
Si establece este valor en 0, SQL Server usa el valor predeterminado, que consiste en ejecutar tantas tareas
en paralelo como sea posible, según la configuración actual de MAXDOP para el servidor. Pero el número
exacto de tareas que se pueden asignar depende de muchos otros factores, como la configuración del
servidor y otros trabajos que se estén ejecutando.

Pasos siguientes
Estos tutoriales y ejemplos adicionales de Python muestran escenarios de un extremo a otro con orígenes de
datos más complejos, así como el uso de contextos de proceso remotos.
Python para desarrolladores de SQL en base de datos
Compilación de un modelo predictivo con Python y SQL Server
Tutoriales de R para aprendizaje automático de SQL
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En este artículo se describen los tutoriales e inicios rápidos de R para Machine Learning Services en SQL Server
y en clústeres de macrodatos.
En este artículo se describen los tutoriales e inicios rápidos de R para SQL Server Machine Learning Services.
En este artículo se describen los tutoriales e inicios rápidos de R para SQL Server 2016 R Services.
En este artículo se describen los tutoriales e inicios rápidos de Python para Machine Learning Services en Azure
SQL Managed Instance.

Tutoriales de R
T UTO RIA L DESC RIP C IÓ N

Predecir el alquiler de esquíes con el árbol de decisión Use R y un modelo de árbol de decisión para predecir el
número de alquileres de esquíes en el futuro. Use cuadernos
en Azure Data Studio para preparar los datos y entrenar el
modelo y T-SQL para la implementación de modelo.

Categorización de clientes con agrupación en clústeres k- Use R para desarrollar e implementar un modelo de
means agrupación en clústeres k-means para clasificar a los clientes
en categorías. Use cuadernos en Azure Data Studio para
preparar los datos y entrenar el modelo y T-SQL para la
implementación de modelo.

Análisis de R en base de datos para científicos de datos Los desarrolladores de R que no conozcan el aprendizaje
automático de SQL descubrirán en este tutorial cómo
realizar tareas comunes de ciencia de datos en SQL. Cargue
y visualice datos, entrene y guarde un modelo en una base
de datos y, luego, úselo para realizar análisis predictivos.

Análisis de R en base de datos para desarrolladores de SQL Compile e implemente una solución de R completa usando
únicamente herramientas de SQL. Este tutorial se centra en
el paso de una solución a producción. Obtendrá información
sobre cómo ajustar el código de R en un procedimiento
almacenado, guardar un modelo de R en una base de datos
y realizar llamadas con parámetros al modelo de R para la
predicción.

T UTO RIA L DESC RIP C IÓ N

Predecir el alquiler de esquíes con el árbol de decisión Use R y un modelo de árbol de decisión para predecir el
número de alquileres de esquíes en el futuro. Use cuadernos
en Azure Data Studio para preparar los datos y entrenar el
modelo y T-SQL para la implementación de modelo.
T UTO RIA L DESC RIP C IÓ N

Categorización de clientes con agrupación en clústeres k- Use R para desarrollar e implementar un modelo de
means agrupación en clústeres k-means para clasificar a los clientes
en categorías. Use cuadernos en Azure Data Studio para
preparar los datos y entrenar el modelo y T-SQL para la
implementación de modelo.

Inicios rápidos de R
Si no está familiarizado con el aprendizaje automático de SQL, puede probar también los inicios rápidos de R.

GUÍA DE IN IC IO RÁ P IDO DESC RIP C IÓ N

Ejecución de scripts de R simples Conozca los conceptos básicos sobre cómo llamar a R en T-
SQL con sp_execute_external_script.

Objetos y estructuras de datos con R Muestra cómo SQL utiliza R para administrar estructuras de
datos.

Creación y puntuación de un modelo predictivo en R Explica cómo crear, entrenar y usar un modelo de R para
hacer predicciones a partir de nuevos datos.

Pasos siguientes
Extensión de R en SQL Server
Tutorial: Desarrollo de un modelo predictivo en R
con el aprendizaje automático de SQL
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En esta serie de tutoriales de cuatro partes, usará R y un modelo de Machine Learning en SQL Server Machine
Learning Services o en clústeres de macrodatos para predecir el número de alquileres de esquíes.
En esta serie de tutoriales de cuatro partes, usará R y un modelo de Machine Learning en SQL Server Machine
Learning Services para predecir el número de alquileres de esquíes.
En esta serie de tutoriales de cuatro partes, usará R y un modelo de Machine Learning en SQL Server R Services
para predecir el número de alquileres de esquíes.
En esta serie de tutoriales de cuatro partes, usará R y un modelo de Machine Learning en Machine Learning
Services en Azure SQL Managed Instance para predecir el número de alquileres de esquíes.
Imagine que es el propietario de una empresa de alquiler de esquíes y quiere predecir el número de alquileres
que tendrá en una fecha futura. Esta información le ayudará a preparar las existencias, el personal y las
instalaciones.
En la primera parte de esta serie, configurará los requisitos previos. En las partes dos y tres, desarrollará scripts
de R en un cuaderno para preparar sus datos y entrenar un modelo de Machine Learning. Luego, en la tercera
parte, ejecutará esos scripts de R en una base de datos mediante procedimientos almacenados de T-SQL.
En este artículo, aprenderá a:
Restauración de una base de datos de ejemplo
En la parte dos, aprenderá a cargar los datos desde una base de datos en una trama de datos de Python y a
preparar los datos en R.
En la parte tres, aprenderá a entrenar un modelo de Machine Learning en R.
En la parte cuatro, aprenderá a almacenar el modelo en una base de datos y, luego, a crear procedimientos
almacenados a partir de los scripts de R desarrollados en las partes dos y tres. Los procedimientos almacenados
se ejecutarán en el servidor para realizar predicciones basándose en datos nuevos.

Prerrequisitos
SQL Server Machine Learning Services: para instalar Machine Learning Services, vea la Guía de instalación
para Windows o la Guía de instalación para Linux. También puede habilitar Machine Learning Services en
clústeres de macrodatos de SQL Server.
SQL Server Machine Learning Services: para instalar Machine Learning Services, vea la Guía de instalación
para Windows.
SQL Server 2016 R Services. Para instalar R Services, consulte la Guía de instalación de Windows.
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).
SQL Server Management Studio para restaurar la base de datos de ejemplo en Azure SQL Managed
Instance.
IDE de R: en este tutorial se usa RStudio Desktop.
RODBC: este controlador se usa en los scripts de R que va a desarrollar en este tutorial. Si aún no está
instalado, instálelo con el comando install.packages("RODBC") de R. Para obtener más información sobre
RODBC, vea CRAN: paquete RODBC.
Herramienta de consultas SQL: en este tutorial, se da por hecho que usa Azure Data Studio. Para más
información, vea Uso de cuadernos en Azure Data Studio.

Restauración de la base de datos de ejemplo


La base de datos de ejemplo usada en este tutorial se ha guardado en un archivo de copia de seguridad de base
de datos .bak para que pueda descargarlo y usarlo.

NOTE
Si usa Machine Learning Services en clústeres de macrodatos, consulte Restauración de una base de datos en la instancia
maestra del clúster de macrodatos de SQL Server.

1. Descargue el archivo TutorialDB.bak.


2. Siga las indicaciones de Restauración de una base de datos a partir de un archivo de copia de seguridad
en Azure Data Studio con estos datos:
Importación del archivo TutorialDB.bak que ha descargado
Asignación del nombre "TutorialDB" a la base de datos de destino
3. Para comprobar que la base de datos restaurada existe, consulte la tabla DBO.rental_data :

USE TutorialDB;
SELECT * FROM [dbo].[rental_data];

1. Descargue el archivo TutorialDB.bak.


2. Siga las instrucciones de Restauración de una base de datos en un Instancia administrada en SQL Server
Management Studio, con los detalles siguientes:
Importación del archivo TutorialDB.bak que ha descargado
Asignación del nombre "TutorialDB" a la base de datos de destino
3. Para comprobar que la base de datos restaurada existe, consulte la tabla DBO.rental_data :

USE TutorialDB;
SELECT * FROM [dbo].[rental_data];

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos TutorialDB.

Pasos siguientes
En la parte uno de esta serie de tutoriales, ha completado estos pasos:
Instalación de los requisitos previos
Restauración de una base de datos de ejemplo
Para preparar los datos para el modelo de aprendizaje automático, siga la parte dos de esta serie de tutoriales:
Preparación de los datos para entrenar un modelo predictivo en R
Tutorial: Preparación de los datos para entrenar un
modelo predictivo en R con el aprendizaje
automático de SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la segunda parte de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos
mediante R. Más adelante en la serie, usará estos datos para entrenar e implementar un modelo predictivo en R
con SQL Server Machine Learning Services o con clústeres de macrodatos.
En la parte uno de esta serie de tutoriales de tres partes, importará y preparará los datos de una base de datos
de Azure SQL mediante R. Más adelante en la serie, usará estos datos para entrenar e implementar un modelo
de Machine Learning predictivo en R con SQL Server Machine Learning Services.
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos mediante
R. Más adelante en la serie, usará estos datos para entrenar e implementar un modelo predictivo en R con
SQL Server R Services.
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos mediante
R. Más adelante en la serie, usará estos datos para entrenar e implementar un modelo predictivo en R con
Machine Learning Services en Azure SQL Managed Instance.
En este artículo, aprenderá a:
Restaurar una base de datos de ejemplo en una base de datos
Cargar los datos de la base de datos en una trama de datos de R
Preparar los datos en R mediante la identificación de algunas columnas como de categoría
En la parte uno, ha aprendido a restaurar la base de datos de ejemplo.
En la parte tres, aprenderá a entrenar un modelo de Machine Learning en R.
En la parte cuatro, aprenderá a almacenar el modelo en una base de datos y, luego, a crear procedimientos
almacenados a partir de los scripts de R desarrollados en las partes dos y tres. Los procedimientos almacenados
se ejecutarán en el servidor para realizar predicciones basándose en datos nuevos.

Prerrequisitos
En la segunda parte de este tutorial se da por hecho que ha realizado la primera par te y que satisface sus
requisitos previos.

Carga de los datos en una trama de datos


Para usar los datos en R, deberá cargarlos desde la base de datos hasta una trama de datos ( rentaldata ).
Cree un archivo de RScript en RStudio y ejecute el siguiente script. Reemplace Ser verName por su propia
información de conexión.
#Define the connection string to connect to the TutorialDB database
connStr <- "Driver=SQL Server;Server=ServerName;Database=TutorialDB;uid=Username;pwd=Password"

#Get the data from the table


library(RODBC)

ch <- odbcDriverConnect(connStr)

#Import the data from the table


rentaldata <- sqlFetch(ch, "dbo.rental_data")

#Take a look at the structure of the data and the top rows
head(rentaldata)
str(rentaldata)

Se mostrarán resultados similares a los siguientes.

Year Month Day RentalCount WeekDay Holiday Snow


1 2014 1 20 445 2 1 0
2 2014 2 13 40 5 0 0
3 2013 3 10 456 1 0 0
4 2014 3 31 38 2 0 0
5 2014 4 24 23 5 0 0
6 2015 2 11 42 4 0 0
'data.frame': 453 obs. of 7 variables:
$ Year : int 2014 2014 2013 2014 2014 2015 2013 2014 2013 2015 ...
$ Month : num 1 2 3 3 4 2 4 3 4 3 ...
$ Day : num 20 13 10 31 24 11 28 8 5 29 ...
$ RentalCount: num 445 40 456 38 23 42 310 240 22 360 ...
$ WeekDay : num 2 5 1 2 5 4 1 7 6 1 ...
$ Holiday : int 1 0 0 0 0 0 0 0 0 0 ...
$ Snow : num 0 0 0 0 0 0 0 0 0 0 ...

Preparación de los datos


En esta base de datos de ejemplo, ya se ha realizado la mayor parte de la preparación, pero aún tiene que hacer
una cosa más. Use el siguiente script de R para identificar tres columnas como categorías, para lo cual debe
cambiar los tipos de datos a factor.

#Changing the three factor columns to factor types


rentaldata$Holiday <- factor(rentaldata$Holiday);
rentaldata$Snow <- factor(rentaldata$Snow);
rentaldata$WeekDay <- factor(rentaldata$WeekDay);

#Visualize the dataset after the change


str(rentaldata);

Se mostrarán resultados similares a los siguientes.


data.frame': 453 obs. of 7 variables:
$ Year : int 2014 2014 2013 2014 2014 2015 2013 2014 2013 2015 ...
$ Month : num 1 2 3 3 4 2 4 3 4 3 ...
$ Day : num 20 13 10 31 24 11 28 8 5 29 ...
$ RentalCount: num 445 40 456 38 23 42 310 240 22 360 ...
$ WeekDay : Factor w/ 7 levels "1","2","3","4",..: 2 5 1 2 5 4 1 7 6 1 ...
$ Holiday : Factor w/ 2 levels "0","1": 2 1 1 1 1 1 1 1 1 1 ...
$ Snow : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...

Los datos están ya preparados para el entrenamiento.

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos TutorialDB.

Pasos siguientes
En la parte dos de la serie de tutoriales, ha aprendido a:
Carga de los datos de ejemplo en una trama de datos de R
Preparar los datos en R mediante la identificación de algunas columnas como de categoría
Para crear un modelo de aprendizaje automático que use datos de la base de datos TutorialDB, siga la parte tres
de esta serie de tutoriales:
Creación de un modelo predictivo en R con el aprendizaje automático de SQL
Tutorial: Creación de un modelo predictivo en R con
el aprendizaje automático de SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte tres de esta serie de tutoriales de cuatro partes, entrenará un modelo predictivo en R. En la siguiente
parte de esta serie, implementará este modelo en una base de datos de SQL Server con Machine Learning
Services o en clústeres de macrodatos.
En la parte tres de esta serie de tutoriales de cuatro partes, entrenará un modelo predictivo en R. En la siguiente
parte de esta serie, implementará este modelo en una base de datos de SQL Server con Machine Learning
Services.
En la parte tres de esta serie de tutoriales de cuatro partes, entrenará un modelo predictivo en R. En la siguiente
parte de esta serie, implementará este modelo en una base de datos con SQL Server R Services.
En la parte tres de esta serie de tutoriales de cuatro partes, entrenará un modelo predictivo en R. En la siguiente
parte de esta serie, implementará este modelo en una base de datos de Azure SQL Managed Instance con
Machine Learning Services.
En este artículo, aprenderá a:
Entrenar dos modelos de aprendizaje automático
Hacer predicciones a partir de ambos modelos
Comparar los resultados para elegir el modelo más preciso
En la parte uno, ha aprendido a restaurar la base de datos de ejemplo.
En la parte dos, ha obtenido información sobre cómo cargar los datos desde una base de datos en una trama de
datos de Python y a preparar los datos en R.
En la parte cuatro, aprenderá a almacenar el modelo en una base de datos y, luego, a crear procedimientos
almacenados a partir de los scripts de Python desarrollados en las partes dos y tres. Los procedimientos
almacenados se ejecutarán en el servidor para realizar predicciones basándose en datos nuevos.

Prerrequisitos
En la parte tres de esta serie de tutoriales, se da por hecho que ha completado los requisitos previos de la par te
uno y que ha realizado los pasos de la par te dos .

Entrenamiento de dos modelos


Para encontrar el mejor modelo para los datos de alquiler de esquís, cree dos modelos distintos (regresión lineal
y árbol de decisión) y vea cuál es más preciso en sus predicciones. Deberá usar la trama de datos rentaldata
que creó en la primera parte de esta serie.
#First, split the dataset into two different sets:
# one for training the model and the other for validating it
train_data = rentaldata[rentaldata$Year < 2015,];
test_data = rentaldata[rentaldata$Year == 2015,];

#Use the RentalCount column to check the quality of the prediction against actual values
actual_counts <- test_data$RentalCount;

#Model 1: Use lm to create a linear regression model, trained with the training data set
model_lm <- lm(RentalCount ~ Month + Day + WeekDay + Snow + Holiday, data = train_data);

#Model 2: Use rpart to create a decision tree model, trained with the training data set
library(rpart);
model_rpart <- rpart(RentalCount ~ Month + Day + WeekDay + Snow + Holiday, data = train_data);

Hacer predicciones a partir de ambos modelos


Use una función de predicción para predecir el número de alquileres con cada modelo entrenado.

#Use both models to make predictions using the test data set.
predict_lm <- predict(model_lm, test_data)
predict_lm <- data.frame(RentalCount_Pred = predict_lm, RentalCount = test_data$RentalCount,
Year = test_data$Year, Month = test_data$Month,
Day = test_data$Day, Weekday = test_data$WeekDay,
Snow = test_data$Snow, Holiday = test_data$Holiday)

predict_rpart <- predict(model_rpart, test_data)


predict_rpart <- data.frame(RentalCount_Pred = predict_rpart, RentalCount = test_data$RentalCount,
Year = test_data$Year, Month = test_data$Month,
Day = test_data$Day, Weekday = test_data$WeekDay,
Snow = test_data$Snow, Holiday = test_data$Holiday)

#To verify it worked, look at the top rows of the two prediction data sets.
head(predict_lm);
head(predict_rpart);

RentalCount_Pred RentalCount Month Day WeekDay Snow Holiday


1 27.45858 42 2 11 4 0 0
2 387.29344 360 3 29 1 0 0
3 16.37349 20 4 22 4 0 0
4 31.07058 42 3 6 6 0 0
5 463.97263 405 2 28 7 1 0
6 102.21695 38 1 12 2 1 0
RentalCount_Pred RentalCount Month Day WeekDay Snow Holiday
1 40.0000 42 2 11 4 0 0
2 332.5714 360 3 29 1 0 0
3 27.7500 20 4 22 4 0 0
4 34.2500 42 3 6 6 0 0
5 645.7059 405 2 28 7 1 0
6 40.0000 38 1 12 2 1 0

Comparación de los resultados


Ahora quiere ver cuál de los modelos ofrece las mejores predicciones. Una manera rápida y sencilla de hacerlo
es usar una función de trazado básica para ver la diferencia entre los valores reales de los datos de
entrenamiento y los valores previstos.
#Use the plotting functionality in R to visualize the results from the predictions
par(mfrow = c(1, 1));
plot(predict_lm$RentalCount_Pred - predict_lm$RentalCount, main = "Difference between actual and predicted.
lm")
plot(predict_rpart$RentalCount_Pred - predict_rpart$RentalCount, main = "Difference between actual and
predicted. rpart")

Parece que el modelo de árbol de decisión es el más preciso de los dos modelos.

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos TutorialDB.

Pasos siguientes
En la tercera parte de la serie de tutoriales, ha aprendido a:
Entrenar dos modelos de aprendizaje automático
Hacer predicciones a partir de ambos modelos
Comparar los resultados para elegir el modelo más preciso
Para implementar el modelo de aprendizaje automático que ha creado, siga la parte cuatro de esta serie de
tutoriales:
Implementación de un modelo predictivo en R con el aprendizaje automático de SQL
Tutorial: Implementación de un modelo predictivo
en R con el aprendizaje automático de SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de aprendizaje
automático desarrollado en R en SQL Server Machine Learning Services o en Clústeres de macrodatos.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de aprendizaje
automático desarrollado en R en SQL Server con Machine Learning Services.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de Machine Learning
desarrollado en R en SQL Server con SQL Server R Services.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de Machine Learning
desarrollado en R en Azure SQL Managed Instance con Machine Learning Services.
En este artículo, aprenderá a:
Crear un procedimiento almacenado que genere el modelo de aprendizaje automático
Almacenar el modelo en una tabla de base de datos
Crear un procedimiento almacenado que realice predicciones mediante el modelo
Ejecutar el modelo con datos nuevos
En la parte uno, ha aprendido a restaurar la base de datos de ejemplo.
En la parte dos, aprendió a importar una base de datos de ejemplo y, luego, a preparar los datos para su uso en
el entrenamiento de un modelo predictivo en R.
En la parte tres, aprendió a crear y entrenar varios modelos de Machine Learning en R y, luego, elegir el más
preciso.

Prerrequisitos
En la parte cuatro de este tutorial se da por hecho que ha completado los requisitos previos de la par te uno y
que ha realizado los pasos de la par te dos y la par te tres .

Crear un procedimiento almacenado que genere el modelo


En la parte tres de esta serie de tutoriales, decidió que un modelo de árbol de decisión (dtree) era el más preciso.
Ahora, con los scripts de R desarrollados, cree un procedimiento almacenado ( generate_rental_model ) que
entrene y genere el modelo dtree mediante rpart desde el paquete de R.
Ejecute los comandos siguientes en Azure Data Studio.
USE [TutorialDB]
DROP PROCEDURE IF EXISTS generate_rental_model;
GO
CREATE PROCEDURE generate_rental_model (@trained_model VARBINARY(max) OUTPUT)
AS
BEGIN
EXECUTE sp_execute_external_script @language = N'R'
, @script = N'
rental_train_data$Month <- factor(rental_train_data$Month);
rental_train_data$Day <- factor(rental_train_data$Day);
rental_train_data$Holiday <- factor(rental_train_data$Holiday);
rental_train_data$Snow <- factor(rental_train_data$Snow);
rental_train_data$WeekDay <- factor(rental_train_data$WeekDay);

#Create a dtree model and train it using the training data set
library(rpart);
model_dtree <- rpart(RentalCount ~ Month + Day + WeekDay + Snow + Holiday, data = rental_train_data);
#Serialize the model before saving it to the database table
trained_model <- as.raw(serialize(model_dtree, connection=NULL));
'
, @input_data_1 = N'
SELECT RentalCount
, Year
, Month
, Day
, WeekDay
, Snow
, Holiday
FROM dbo.rental_data
WHERE Year < 2015
'
, @input_data_1_name = N'rental_train_data'
, @params = N'@trained_model varbinary(max) OUTPUT'
, @trained_model = @trained_model OUTPUT;
END;
GO

Almacenar el modelo en una tabla de base de datos


Cree una tabla en la base de datos TutorialDB y, después, guarde el modelo en la tabla.
1. Cree una tabla ( rental_models ) para almacenar el modelo.

USE TutorialDB;
DROP TABLE IF EXISTS rental_models;
GO
CREATE TABLE rental_models (
model_name VARCHAR(30) NOT NULL DEFAULT('default model') PRIMARY KEY
, model VARBINARY(MAX) NOT NULL
);
GO

2. Guarde el modelo en la tabla como un objeto binario, con el nombre "DTree".


-- Save model to table
TRUNCATE TABLE rental_models;

DECLARE @model VARBINARY(MAX);

EXECUTE generate_rental_model @model OUTPUT;

INSERT INTO rental_models (


model_name
, model
)
VALUES (
'DTree'
, @model
);

SELECT *
FROM rental_models;

Creación de un procedimiento almacenado que realiza predicciones


Cree un procedimiento almacenado ( predict_rentalcount_new ) que hace predicciones mediante el modelo
entrenado y un conjunto de nuevos datos.
-- Stored procedure that takes model name and new data as input parameters and predicts the rental count for
the new data
USE [TutorialDB]
DROP PROCEDURE IF EXISTS predict_rentalcount_new;
GO
CREATE PROCEDURE predict_rentalcount_new (
@model_name VARCHAR(100)
, @input_query NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @model VARBINARY(MAX) = (
SELECT model
FROM rental_models
WHERE model_name = @model_name
);

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'
#Convert types to factors
rentals$Month <- factor(rentals$Month);
rentals$Day <- factor(rentals$Day);
rentals$Holiday <- factor(rentals$Holiday);
rentals$Snow <- factor(rentals$Snow);
rentals$WeekDay <- factor(rentals$WeekDay);

#Before using the model to predict, we need to unserialize it


rental_model <- unserialize(model);

#Call prediction function


rental_predictions <- predict(rental_model, rentals);
rental_predictions <- data.frame(rental_predictions);
'
, @input_data_1 = @input_query
, @input_data_1_name = N'rentals'
, @output_data_1_name = N'rental_predictions'
, @params = N'@model varbinary(max)'
, @model = @model
WITH RESULT SETS(("RentalCount_Predicted" FLOAT));
END;
GO

Ejecutar el modelo con datos nuevos


Ahora puede usar el procedimiento almacenado predict_rentalcount_new para predecir el número de alquileres
a partir de los nuevos datos.

-- Use the predict_rentalcount_new stored procedure with the model name and a set of features to predict the
rental count
EXECUTE dbo.predict_rentalcount_new @model_name = 'DTree'
, @input_query = '
SELECT CONVERT(INT, 3) AS Month
, CONVERT(INT, 24) AS Day
, CONVERT(INT, 4) AS WeekDay
, CONVERT(INT, 1) AS Snow
, CONVERT(INT, 1) AS Holiday
';
GO

Verá un resultado similar al siguiente:


RentalCount_Predicted
332.571428571429

Ha creado, entrenado e implementado correctamente un modelo en una base de datos. Después, ha usado el
modelo en un procedimiento almacenado para predecir valores basándose en datos nuevos.

Limpieza de recursos
Cuando termine de usar la base de datos TutorialDB, elimínela del servidor.

Pasos siguientes
En la cuarta parte de la serie de tutoriales, ha aprendido a:
Crear un procedimiento almacenado que genere el modelo de aprendizaje automático
Almacenar el modelo en una tabla de base de datos
Crear un procedimiento almacenado que realice predicciones mediante el modelo
Ejecutar el modelo con datos nuevos
Para más información sobre cómo usar R en Machine Learning Services, vea:
Ejecución de scripts de R simples
Estructuras de datos, tipos y objetos de R
Funciones de R
Tutorial: Desarrollo de un modelo de agrupación en
clústeres en R con el aprendizaje automático de
SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En esta serie de tutoriales de cuatro partes, usará R para desarrollar e implementar un modelo de agrupación en
clústeres k-means en SQL Server Machine Learning Services o clústeres de macrodatos para categorizar datos
de clientes.
En esta serie de tutoriales de cuatro partes, usará R para desarrollar e implementar un modelo de agrupación en
clústeres k-means en SQL Server Machine Learning Services para agrupar en clústeres datos de clientes.
En esta serie de tutoriales de cuatro partes, usará R para desarrollar e implementar un modelo de agrupación en
clústeres k-means en SQL Server R Services para agrupar en clústeres datos de clientes.
En esta serie de tutoriales de cuatro partes, usará R para desarrollar e implementar un modelo de agrupación en
clústeres k-means en Machine Learning Services en Azure SQL Managed Instance para agrupar en clústeres
datos de clientes.
En la primera parte de esta serie, configurará los requisitos previos para el tutorial y, después, restaurará un
conjunto de datos de ejemplo en una base de datos. En las partes dos y tres, desarrollará scripts de R en un
cuaderno de Azure Data Studio para analizar y preparar los datos de ejemplo y entrenar un modelo de Machine
Learning. Luego, en la parte cuatro, ejecutará esos scripts de R en una base de datos mediante procedimientos
almacenados.
Agrupar en clústeres es organizar datos en grupos, donde los miembros de un grupo son de alguna forma
similares. Para esta serie de tutoriales, imagine que es el propietario de un negocio de venta al por menor. Usará
el algoritmo k-means para realizar la agrupación de clientes en clústeres en un conjunto de datos de compras y
devoluciones de productos. Al agrupar los clientes en clústeres, puede centrar sus actividades de marketing de
forma más eficaz al dirigirse a grupos específicos. La agrupación en clústeres k-means es un algoritmo de
aprendizaje no supervisado que analiza patrones en datos basándose en similitudes.
En este artículo, aprenderá a:
Restauración de una base de datos de ejemplo
En la parte dos, aprenderá a preparar los datos de una base de datos para realizar la agrupación en clústeres.
En la parte tres, aprenderá a crear y entrenar un modelo de agrupación en clústeres k-means en R.
En la parte cuatro, aprenderá a crear un procedimiento almacenado en una base de datos que pueda realizar la
agrupación en clústeres en R basándose en datos nuevos.

Prerrequisitos
SQL Server Machine Learning Services con la opción de lenguaje de Python: siga las instrucciones de
instalación en la Guía de instalación para Windows o la Guía de instalación para Linux. También puede
habilitar Machine Learning Services en clústeres de macrodatos de SQL Server.
SQL Server Machine Learning Services con la opción de lenguaje de R: siga las instrucciones de instalación
en la Guía de instalación para Windows.
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).
SQL Server Management Studio para restaurar la base de datos de ejemplo en Azure SQL Managed
Instance.
Azure Data Studio Usará un cuaderno en Azure Data Studio para SQL. Para obtener más información
sobre los cuadernos, vea Uso de los cuadernos en Azure Data Studio.
IDE de R: en este tutorial se usa RStudio Desktop.
RODBC: este controlador se usa en los scripts de R que va a desarrollar en este tutorial. Si aún no está
instalado, instálelo con el comando install.packages("RODBC") de R. Para obtener más información sobre
RODBC, vea CRAN: paquete RODBC.

Restauración de la base de datos de ejemplo


El conjunto de datos de ejemplo usado en este tutorial se ha guardado en un archivo de copia de seguridad de
base de datos .bak para que pueda descargarlo y usarlo. Este conjunto de datos se basa en el conjunto de datos
tpcx-bb proporcionado por Transaction Processing Performance Council (TPC).

NOTE
Si usa Machine Learning Services en clústeres de macrodatos, consulte Restauración de una base de datos en la instancia
maestra del clúster de macrodatos de SQL Server.

1. Descargue el archivo tpcxbb_1gb.bak.


2. Siga las indicaciones de Restauración de una base de datos a partir de un archivo de copia de seguridad
en Azure Data Studio con estos datos:
Importe el archivo tpcxbb_1gb.bak que ha descargado.
Asigne a la base de datos de destino el nombre "tpcxbb_1gb".
3. Para asegurarse de que el conjunto de datos exista después de restaurar la base de datos, ejecute la
siguiente consulta en la tabla dbo.customer :

USE tpcxbb_1gb;
SELECT * FROM [dbo].[customer];

1. Descargue el archivo tpcxbb_1gb.bak.


2. Siga las instrucciones de Restauración de una base de datos en un Instancia administrada en SQL Server
Management Studio, con los detalles siguientes:
Importe el archivo tpcxbb_1gb.bak que ha descargado.
Asigne a la base de datos de destino el nombre "tpcxbb_1gb".
3. Para asegurarse de que el conjunto de datos exista después de restaurar la base de datos, ejecute la
siguiente consulta en la tabla dbo.customer :

USE tpcxbb_1gb;
SELECT * FROM [dbo].[customer];
Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos tpcxbb_1gb.

Pasos siguientes
En la parte uno de esta serie de tutoriales, ha completado estos pasos:
Instalación de los requisitos previos
Restauración de una base de datos de ejemplo
Para preparar los datos para el modelo de aprendizaje automático, siga la parte dos de esta serie de tutoriales:
Preparación de datos para realizar la agrupación en clústeres
Tutorial: Preparación de datos para realizar la
agrupación en clústeres en R con el aprendizaje
automático de SQL
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos para
realizar la agrupación en clústeres en R con SQL Server Machine Learning Services o en Clústeres de
macrodatos.
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos para
realizar la agrupación en clústeres en R con SQL Server Machine Learning Services.
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos para
realizar la agrupación en clústeres en R con SQL Server 2016 R Services.
En la parte dos de esta serie de tutoriales de cuatro partes, preparará los datos de una base de datos para
realizar la agrupación en clústeres en R con Machine Learning Services en Azure SQL Managed Instance.
En este artículo, aprenderá a:
Separar clientes en diferentes dimensiones mediante R
Cargar los datos de la base de datos en una trama de datos de R
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte tres, aprenderá a crear y entrenar un modelo de agrupación en clústeres k-means en R.
En la parte cuatro, descubrirá cómo crear un procedimiento almacenado en una base de datos que pueda
realizar la agrupación en clústeres en R basándose en datos nuevos.

Prerrequisitos
En la parte dos de este tutorial, se da por hecho que ha completado la par te uno .

Separación de clientes
Cree un archivo de RScript en RStudio y ejecute el siguiente script. En la consulta SQL, está dividiendo a los
clientes entre las dimensiones siguientes:
orderRatio = índice de devolución de pedidos (número total de pedidos con una devolución total o parcial
comparado con el número total de pedidos)
itemsRatio = índice de artículos devueltos (número total de artículos devueltos comparado con el número
de artículos comprados)
monetar yRatio = índice de importes de devoluciones (total de importes monetarios de los artículos
devueltos comparado con el importe de las compras)
frequency = frecuencia de devolución
En la función connStr , reemplace Ser verName por su propia información de conexión.
# Define the connection string to connect to the tpcxbb_1gb database

connStr <- "Driver=SQL Server;Server=ServerName;Database=tpcxbb_1gb;uid=Username;pwd=Password"

#Define the query to select data


input_query <- "
SELECT ss_customer_sk AS customer
,round(CASE
WHEN (
(orders_count = 0)
OR (returns_count IS NULL)
OR (orders_count IS NULL)
OR ((returns_count / orders_count) IS NULL)
)
THEN 0.0
ELSE (cast(returns_count AS NCHAR(10)) / orders_count)
END, 7) AS orderRatio
,round(CASE
WHEN (
(orders_items = 0)
OR (returns_items IS NULL)
OR (orders_items IS NULL)
OR ((returns_items / orders_items) IS NULL)
)
THEN 0.0
ELSE (cast(returns_items AS NCHAR(10)) / orders_items)
END, 7) AS itemsRatio
,round(CASE
WHEN (
(orders_money = 0)
OR (returns_money IS NULL)
OR (orders_money IS NULL)
OR ((returns_money / orders_money) IS NULL)
)
THEN 0.0
ELSE (cast(returns_money AS NCHAR(10)) / orders_money)
END, 7) AS monetaryRatio
,round(CASE
WHEN (returns_count IS NULL)
THEN 0.0
ELSE returns_count
END, 0) AS frequency
FROM (
SELECT ss_customer_sk,
-- return order ratio
COUNT(DISTINCT (ss_ticket_number)) AS orders_count,
-- return ss_item_sk ratio
COUNT(ss_item_sk) AS orders_items,
-- return monetary amount ratio
SUM(ss_net_paid) AS orders_money
FROM store_sales s
GROUP BY ss_customer_sk
) orders
LEFT OUTER JOIN (
SELECT sr_customer_sk,
-- return order ratio
count(DISTINCT (sr_ticket_number)) AS returns_count,
-- return ss_item_sk ratio
COUNT(sr_item_sk) AS returns_items,
-- return monetary amount ratio
SUM(sr_return_amt) AS returns_money
FROM store_returns
GROUP BY sr_customer_sk
) returned ON ss_customer_sk = sr_customer_sk";
Carga de los datos en una trama de datos
Ahora, use el siguiente script para que se devuelvan los resultados de la consulta a una trama de datos de R.

# Query using input_query and get the results back


# to data frame customer_data

library(RODBC)

ch <- odbcDriverConnect(connStr)

customer_data <- sqlQuery(ch, input_query)

# Take a look at the data just loaded


head(customer_data, n = 5);

Se mostrarán resultados similares a los siguientes.

customer orderRatio itemsRatio monetaryRatio frequency


1 29727 0 0 0.000000 0
2 26429 0 0 0.041979 1
3 60053 0 0 0.065762 3
4 97643 0 0 0.037034 3
5 32549 0 0 0.031281 4

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos tpcxbb_1gb.

Pasos siguientes
En la parte dos de la serie de tutoriales, ha aprendido a:
Separar clientes en diferentes dimensiones mediante R
Cargar los datos de la base de datos en una trama de datos de R
Para crear un modelo de aprendizaje automático que use estos datos de clientes, siga la parte tres de esta serie
de tutoriales:
Creación de un modelo predictivo en R con el aprendizaje automático de SQL
Tutorial: Creación de un modelo de agrupación en
clústeres en R con el aprendizaje automático de
SQL
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte tres de esta serie de tutoriales de cuatro partes, creará un modelo de k-means en R para realizar la
agrupación en clústeres. En la siguiente parte de esta serie, implementará este modelo en una base de datos con
SQL Server Machine Learning Services o en clústeres de macrodatos.
En la parte tres de esta serie de tutoriales de cuatro partes, creará un modelo de k-means en R para realizar la
agrupación en clústeres. En la siguiente parte de esta serie, implementará este modelo en una base de datos con
SQL Server Machine Learning Services.
En la parte tres de esta serie de tutoriales de cuatro partes, creará un modelo de k-means en R para realizar la
agrupación en clústeres. En la siguiente parte de esta serie, implementará este modelo en una base de datos
SQL con SQL Server R Services.
En la parte tres de esta serie de tutoriales de cuatro partes, creará un modelo de k-means en R para realizar la
agrupación en clústeres. En la siguiente parte de esta serie, implementará este modelo en una base de datos con
Machine Learning Services en Azure SQL Managed Instance.
En este artículo, aprenderá a:
Definición del número de clústeres para un algoritmo de k-means
Agrupación en clústeres
Análisis de los resultados
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, ha aprendido a preparar los datos de una base de datos para realizar la agrupación en clústeres.
En la parte cuatro, aprenderá a crear un procedimiento almacenado en una base de datos que pueda realizar la
agrupación en clústeres en R basándose en datos nuevos.

Prerrequisitos
En la parte tres de esta serie de tutoriales, se da por hecho que ha completado los requisitos previos de la
par te uno y que ha realizado los pasos de la par te dos .

Definición del número de clústeres


Para agrupar en clústeres los datos de clientes, usará el algoritmo de agrupación en clústeres k-means , una de
las formas más sencillas y conocidas de agrupar datos. Para más información sobre k-means, vea Guía completa
sobre el algoritmo de agrupación en clústeres k-means.
El algoritmo acepta dos entradas: los datos en sí y un número predefinido "k", que representa el número de
clústeres que se generarán. El resultado es k clústeres con los datos de entrada repartidos entre los clústeres.
Para determinar el número de clústeres que usará el algoritmo, use una representación de la suma de
cuadrados dentro de los grupos por el número de clústeres extraídos. El número adecuado de clústeres que se
usará se encuentra en la curva o "codo" de la representación.

# Determine number of clusters by using a plot of the within groups sum of squares,
# by number of clusters extracted.
wss <- (nrow(customer_data) - 1) * sum(apply(customer_data, 2, var))
for (i in 2:20)
wss[i] <- sum(kmeans(customer_data, centers = i)$withinss)
plot(1:20, wss, type = "b", xlab = "Number of Clusters", ylab = "Within groups sum of squares")

Según el gráfico, parece que k = 4 sería un buen valor para probar. El valor k agrupará los clientes en cuatro
clústeres.

Agrupación en clústeres
En el siguiente script de R, usará la función kmeans para realizar la agrupación en clústeres.
# Output table to hold the customer group mappings.
# Generate clusters using Kmeans and output key / cluster to a table
# called return_cluster

## create clustering model


clust <- kmeans(customer_data[,2:5],4)

## create clustering ouput for table


customer_cluster <-
data.frame(cluster=clust$cluster,customer=customer_data$customer,orderRatio=customer_data$orderRatio,

itemsRatio=customer_data$itemsRatio,monetaryRatio=customer_data$monetaryRatio,frequency=customer_data$freque
ncy)

## write cluster output to DB table


sqlSave(ch, customer_cluster, tablename = "return_cluster")

# Read the customer returns cluster table from the database


customer_cluster_check <- sqlFetch(ch, "return_cluster")

head(customer_cluster_check)

Análisis de los resultados


Ahora que ha realizado la agrupación en clústeres mediante K-Means, el siguiente paso es analizar el resultado y
ver si puede encontrar información procesable.

#Look at the clustering details to analyze results


clust[-1]

$centers
orderRatio itemsRatio monetaryRatio frequency
1 0.621835791 0.1701519 0.35510836 1.009025
2 0.074074074 0.0000000 0.05886575 2.363248
3 0.004807692 0.0000000 0.04618708 5.050481
4 0.000000000 0.0000000 0.00000000 0.000000

$totss
[1] 40191.83

$withinss
[1] 19867.791 215.714 660.784 0.000

$tot.withinss
[1] 20744.29

$betweenss
[1] 19447.54

$size
[1] 4543 702 416 31675

$iter
[1] 3

$ifault
[1] 0

Las cuatro medias de clústeres se proporcionan mediante las variables definidas en la parte dos:
orderRatio = índice de devolución de pedidos (número total de pedidos con una devolución total o parcial
comparado con el número total de pedidos)
itemsRatio = índice de artículos devueltos (número total de artículos devueltos comparado con el número de
artículos comprados)
monetaryRatio = índice de importes de devoluciones (total de importes monetarios de los artículos
devueltos comparado con el importe de las compras)
frequency = frecuencia de devolución
Con frecuencia, la minería de datos que usa k-means necesita un análisis más detallado de los resultados y
pasos adicionales para comprender mejor cada clúster, pero puede proporcionar pistas adecuadas. Estas son
dos formas en que se podrían interpretar estos resultados:
El clúster 1 (el clúster más grande) parece estar constituido por un grupo de clientes que no están activos
(todos los valores son cero).
Parece que el clúster 3 es un grupo que destaca en términos de comportamiento de devoluciones.

Limpieza de recursos
Si no quiere continuar con este tutorial, elimine la base de datos tpcxbb_1gb.

Pasos siguientes
En la tercera parte de la serie de tutoriales, ha aprendido a:
Definición del número de clústeres para un algoritmo de k-means
Agrupación en clústeres
Análisis de los resultados
Para implementar el modelo de aprendizaje automático que ha creado, siga la parte cuatro de esta serie de
tutoriales:
Implementación de un modelo de agrupación en clústeres en R con el aprendizaje automático de SQL
Tutorial: Implementación de un modelo de
agrupación en clústeres en R con el aprendizaje
automático de SQL
14/07/2021 • 5 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de agrupación en
clústeres, desarrollado en R, en una base de datos con SQL Server Machine Learning Services o en Clústeres de
macrodatos.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de agrupación en
clústeres, desarrollado en R, en una base de datos mediante SQL Server Machine Learning Services.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de agrupación en
clústeres, desarrollado en R, en una base de datos mediante SQL Server R Services.
En la parte cuatro de esta serie de tutoriales de cuatro partes, implementará un modelo de agrupación en
clústeres, desarrollado en R, en una base de datos mediante Machine Learning Services en Azure SQL Managed
Instance.
Para realizar la agrupación en clústeres de forma periódica cuando se registren nuevos clientes, necesita llamar
al script de R desde cualquier aplicación. Para hacerlo, puede implementar el script de R en una base de datos si
lo coloca dentro de un procedimiento almacenado de SQL. Como el modelo se ejecuta en la base de datos, se
puede entrenar fácilmente con los datos almacenados en la base de datos.
En este artículo, aprenderá a:
Crear un procedimiento almacenado que genere el modelo
Agrupación en clústeres
Uso de la información de agrupación en clústeres
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, ha aprendido a preparar los datos de una base de datos para realizar la agrupación en clústeres.
En la parte tres, ha aprendido a crear y entrenar un modelo de agrupación en clústeres k-means en R.

Prerrequisitos
En la parte cuatro de esta serie de tutoriales, se da por hecho que ha completado los requisitos previos de la
par te uno y que ha realizado los pasos de la par te dos y la par te tres .

Crear un procedimiento almacenado que genere el modelo


Ejecute el siguiente script de T-SQL para crear el procedimiento almacenado. El procedimiento recrea los pasos
que ha desarrollado en las partes dos y tres de esta serie de tutoriales:
clasificación de los clientes basándose en su historial de compras devoluciones
generación de cuatro clústeres de clientes mediante un algoritmo k-means
El procedimiento almacena las asignaciones de clústeres de clientes resultantes en la tabla de la base de datos
customer_return_clusters .

USE [tpcxbb_1gb]
DROP PROC IF EXISTS generate_customer_return_clusters;
GO
CREATE procedure [dbo].[generate_customer_return_clusters]
AS
/*
This procedure uses R to classify customers into different groups
based on their purchase & return history.
*/
BEGIN
DECLARE @duration FLOAT
, @instance_name NVARCHAR(100) = @@SERVERNAME
, @database_name NVARCHAR(128) = db_name()
-- Input query to generate the purchase history & return metrics
, @input_query NVARCHAR(MAX) = N'
SELECT ss_customer_sk AS customer,
round(CASE
WHEN (
(orders_count = 0)
OR (returns_count IS NULL)
OR (orders_count IS NULL)
OR ((returns_count / orders_count) IS NULL)
)
THEN 0.0
ELSE (cast(returns_count AS NCHAR(10)) / orders_count)
END, 7) AS orderRatio,
round(CASE
WHEN (
(orders_items = 0)
OR (returns_items IS NULL)
OR (orders_items IS NULL)
OR ((returns_items / orders_items) IS NULL)
)
THEN 0.0
ELSE (cast(returns_items AS NCHAR(10)) / orders_items)
END, 7) AS itemsRatio,
round(CASE
WHEN (
(orders_money = 0)
OR (returns_money IS NULL)
OR (orders_money IS NULL)
OR ((returns_money / orders_money) IS NULL)
)
THEN 0.0
ELSE (cast(returns_money AS NCHAR(10)) / orders_money)
END, 7) AS monetaryRatio,
round(CASE
WHEN (returns_count IS NULL)
THEN 0.0
ELSE returns_count
END, 0) AS frequency
FROM (
SELECT ss_customer_sk,
-- return order ratio
COUNT(DISTINCT (ss_ticket_number)) AS orders_count,
-- return ss_item_sk ratio
COUNT(ss_item_sk) AS orders_items,
-- return monetary amount ratio
SUM(ss_net_paid) AS orders_money
FROM store_sales s
GROUP BY ss_customer_sk
) orders
LEFT OUTER JOIN (
SELECT sr_customer_sk,
-- return order ratio
count(DISTINCT (sr_ticket_number)) AS returns_count,
count(DISTINCT (sr_ticket_number)) AS returns_count,
-- return ss_item_sk ratio
COUNT(sr_item_sk) AS returns_items,
-- return monetary amount ratio
SUM(sr_return_amt) AS returns_money
FROM store_returns
GROUP BY sr_customer_sk
) returned ON ss_customer_sk = sr_customer_sk
'
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
# Define the connection string

connStr <- paste("Driver=SQL Server; Server=", instance_name,


"; Database=", database_name,
"; uid=Username;pwd=Password; ",
sep="" )

# Input customer data that needs to be classified.


# This is the result we get from the query.
library(RODBC)

ch <- odbcDriverConnect(connStr);

customer_data <- sqlQuery(ch, input_query)

sqlDrop(ch, "customer_return_clusters")

## create clustering model


clust <- kmeans(customer_data[,2:5],4)

## create clustering output for table


customer_cluster <-
data.frame(cluster=clust$cluster,customer=customer_data$customer,orderRatio=customer_data$orderRatio,

itemsRatio=customer_data$itemsRatio,monetaryRatio=customer_data$monetaryRatio,frequency=customer_data$freque
ncy)

## write cluster output to DB table


sqlSave(ch, customer_cluster, tablename = "customer_return_clusters")

## clean up
odbcClose(ch)
'
, @input_data_1 = N''
, @params = N'@instance_name nvarchar(100), @database_name nvarchar(128), @input_query nvarchar(max),
@duration float OUTPUT'
, @instance_name = @instance_name
, @database_name = @database_name
, @input_query = @input_query
, @duration = @duration OUTPUT;
END;

GO

Agrupación en clústeres
Ahora que ha creado el procedimiento almacenado, ejecute el siguiente script para realizar la agrupación en
clústeres.
--Empty table of the results before running the stored procedure
TRUNCATE TABLE customer_return_clusters;

--Execute the clustering


--This will load the table customer_return_clusters with cluster mappings
EXECUTE [dbo].[generate_customer_return_clusters];

Compruebe que funciona y que realmente tenemos la lista de los clientes y sus asignaciones de clúster.

--Select data from table customer_return_clusters


--to verify that the clustering data was loaded
SELECT TOP (5) *
FROM customer_return_clusters;

cluster customer orderRatio itemsRatio monetaryRatio frequency


1 29727 0 0 0 0
4 26429 0 0 0.041979 1
2 60053 0 0 0.065762 3
2 97643 0 0 0.037034 3
2 32549 0 0 0.031281 4

Uso de la información de agrupación en clústeres


Como ha almacenado el procedimiento de agrupación en clústeres en la base de datos, puede realizar la
agrupación en clústeres de forma eficiente con los datos de cliente almacenados en la misma base de datos.
Puede ejecutar el procedimiento cada vez que se actualicen los datos de clientes y usar la información de
agrupación en clústeres actualizada.
Imagine que quiere enviar un correo electrónico promocional a los clientes del clúster 0, el grupo que estaba
inactivo (vea una descripción de los cuatro clústeres en la parte tres de este tutorial). El código siguiente
selecciona las direcciones de correo electrónico de los clientes en el clúster 0.

USE [tpcxbb_1gb]
--Get email addresses of customers in cluster 0 for a promotion campaign
SELECT customer.[c_email_address], customer.c_customer_sk
FROM dbo.customer
JOIN
[dbo].[customer_clusters] as c
ON c.Customer = customer.c_customer_sk
WHERE c.cluster = 0

Puede cambiar el valor de c.cluster a las direcciones de correo electrónico de retorno de los clientes en otros
clústeres.

Limpieza de recursos
Cuando termine este tutorial, puede eliminar la base de datos tpcxbb_1gb.

Pasos siguientes
En la parte cuatro de la serie de tutoriales, ha aprendido a:
Crear un procedimiento almacenado que genere el modelo
Realización de la agrupación en clústeres con aprendizaje automático de SQL
Uso de la información de agrupación en clústeres
Para más información sobre cómo usar R en Machine Learning Services, vea:
Ejecución de scripts de R simples
Estructuras de datos, tipos y objetos de R
Funciones de R
Tutorial de R: Predicción de tarifas de taxi de Nueva
York con clasificación binaria
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En esta serie de tutoriales de cinco partes para programadores de SQL, obtendrá información sobre la
integración de R en SQL Server Machine Learning Services o en Clústeres de macrodatos.
En esta serie de tutoriales de cinco partes para programadores de SQL, obtendrá información sobre la
integración de R en SQL Server Machine Learning Services.
En esta serie de tutoriales de cinco partes para programadores de SQL, obtendrá información sobre la
integración de R en SQL Server 2016 R Services.
En esta serie de tutoriales de cinco partes para programadores de SQL, obtendrá información sobre la
integración de R en Machine Learning Services en Azure SQL Managed Instance.
Creará e implementará una solución de aprendizaje automático basada en R mediante una base de datos de
ejemplo en SQL Server. Se usará T-SQL, Azure Data Studio, o SQL Server Management Studio, y una instancia
del motor de base de datos con el aprendizaje automático de SQL y la compatibilidad con el lenguaje R.
En esta serie de tutoriales se presentan las funciones de R usadas en un flujo de trabajo de modelado de datos.
Algunas de las partes son la exploración de datos, la creación y el entrenamiento de un modelo de clasificación
binaria, y la implementación del modelo. Usará datos de ejemplo de la Comisión de taxis y limusinas de la
Ciudad de Nueva York. El modelo que se va a compilar predice si es probable que un trayecto acabe en propina
en función de la hora del día, la distancia recorrida y la ubicación de origen.
En la primera parte de esta serie, instalará los requisitos previos y restaurará la base de datos de ejemplo. En las
partes dos y tres, desarrollará scripts de R para preparar sus datos y entrenar un modelo de Machine Learning.
Después, en las partes cuatro y cinco, ejecutará esos scripts de R en la base de datos con procedimientos
almacenados en T-SQL.
En este artículo, hará lo siguiente:
Requisitos previos de instalación
Restauración de la base de datos de ejemplo
En la parte dos, explorará los datos de ejemplo y generará algunos trazados.
En la tercera, aprenderá a crear características a partir de datos sin procesar mediante una función de Transact-
SQL. Después, llamaremos a esa función desde un procedimiento almacenado para crear una tabla que contiene
los valores de las características.
En la parte cuatro, cargará los módulos y llamará a las funciones necesarias para crear y entrenar el modelo
mediante un procedimiento almacenado de SQL Server.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

NOTE
Este tutorial está disponible tanto en R como en Python. Para obtener la versión de Python, consulte Tutorial de Python:
Predicción de tarifas de taxi de Nueva York con clasificación binaria.
Prerrequisitos
Instalar SQL Server 2016 R Services
Instalar SQL Server Machine Learning Services con R habilitado
Instalar bibliotecas de R
Conceder permisos para la ejecución de scripts de Python y R
A partir de SQL Server 2019, el mecanismo de aislamiento requiere que se proporcionen los permisos
adecuados para el directorio donde se almacena el archivo de trazado. Para más información sobre cómo
establecer estos permisos, consulte la sección sobre los permisos de archivo en SQL Server 2019 en
Windows: Cambios de aislamiento para Machine Learning Services.
Restaurar la base de datos de demostración de taxis de Nueva York
Todas las tareas pueden realizarse mediante procedimientos almacenados de Transact-SQL de Azure Data Studio
o Management Studio.
En este tutorial se supone que está familiarizado con las operaciones básicas de base de datos, como la creación
de bases de datos y tablas, la importación de datos y la escritura de consultas SQL. No se da por sentado que
conoce R; se proporciona todo el código de R.

Información general para desarrolladores de SQL


El proceso de compilación de una solución de Machine Learning es una tarea compleja para la que se necesitan
varias herramientas y la coordinación de expertos en la materia en distintas fases:
Obtención y limpieza de datos
Exploración de los datos y compilación de características útiles para el modelado
Entrenamiento y ajuste del modelo
Implementación en producción
La mejor manera de desarrollar y probar el código real es usar un entorno de desarrollo dedicado de R. Pero,
después de haber probado completamente el script, puede implementarlo fácilmente en SQL Server mediante
procedimientos almacenados de Transact-SQL en el entorno de Azure Data Studio o Management Studio que ya
conoce. El mecanismo principal para poner operativo el código en SQL Server consiste en ajustar el código
externo en procedimientos almacenados.
Después de guardar el modelo en la base de datos, llame al modelo de predicción desde Transact-SQL mediante
procedimientos almacenados.
Tanto si es un programador de SQL que no está familiarizado con R como si es un desarrollador de R que no
está familiarizado con SQL, esta serie de cinco tutoriales presenta un flujo de trabajo típico para realizar análisis
en base de datos con R y SQL Server.

Pasos siguientes
En este artículo:
Instaló los requisitos previos
Restauró la base de datos de ejemplo
Tutorial de R: Exploración y visualización de datos
Tutorial de R: Explorar y visualizar datos
14/07/2021 • 11 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte dos de esta serie de tutoriales de cinco partes, explorará los datos de ejemplo y generará algunos
trazados. Más adelante, aprenderá a serializar objetos gráficos en Python y, después, a deserializarlos y a crear
trazados.
En la parte dos de este tutorial de cinco partes, revisará los datos de ejemplo y, luego, generará algunos
trazados mediante las funciones genéricas barplot y hist en R base.
Uno de los objetivos clave de este artículo es mostrar cómo llamar a las funciones de R desde Transact-SQL en
los procedimientos almacenados y guardar los resultados en formatos de archivo de aplicación:
Cree un procedimiento almacenado mediante barplot para generar un trazado de R como datos varbinary.
Use bcp para exportar el flujo binario a un archivo de imagen.
Cree un procedimiento almacenado mediante hist para generar un trazado y guardar los resultados como
archivos JPG y PDF.

NOTE
Dado que la visualización es una herramienta muy eficaz para comprender la distribución y la forma de datos, R
proporciona una variedad de funciones y paquetes para generar histogramas, gráficos de dispersión, gráficos de cuadros y
otros gráficos de exploración de datos. R normalmente crea imágenes con un dispositivo de R para la salida gráfica, que
puede capturar y almacenar como un tipo de datos varbinar y para la representación en la aplicación. También puede
guardar las imágenes en cualquiera de los formatos de archivo admitidos (.JPG, .PDF, etc.).

En este artículo, hará lo siguiente:


Revisará los datos de ejemplo
Creará trazados con R en T-SQL
Generará trazados en varios formatos de archivo
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la tercera, aprenderá a crear características a partir de datos sin procesar mediante una función de Transact-
SQL. Después, llamaremos a esa función desde un procedimiento almacenado para crear una tabla que contiene
los valores de las características.
En la parte cuatro, cargará los módulos y llamará a las funciones necesarias para crear y entrenar el modelo
mediante un procedimiento almacenado de SQL Server.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

Revisión de los datos


Desarrollar una solución de ciencia de datos incluye normalmente la exploración de datos intensivos y la
visualización de datos. Así pues, primero revise los datos de ejemplo si no lo ha hecho ya, solo le llevará un
minuto.
En el conjunto de datos públicos original, los identificadores de taxis y los registros de viajes se proporcionaron
en archivos independientes. En cambio, para facilitar el uso de los datos de ejemplo, los dos conjuntos de datos
originales se han unido en las columnas medallion, hack_license y pickup_datetime. Los registros también se
muestrearon para obtener solo un 1 % del número de registros original. El conjunto de datos muestreado
resultante tiene 1 703 957 filas y 23 columnas.
Identificadores de taxis
La columna medallion representa el número de identificador único del taxi.
La columna hack_license contiene el número de licencia del conductor del taxi (anonimizado).
Registros de viajes y tarifas
Cada registro de viaje incluye la ubicación y hora de recogida y destino y la distancia del viaje.
Cada registro de tarifa incluye información de pago, como el tipo de pago, el importe total de pago y la
cantidad de propina.
Las últimas tres columnas se pueden usar para varias tareas de aprendizaje automático. La columna
tip_amount contiene valores numéricos continuos y se puede usar como la columna label para el análisis
de regresión. La columna tipped tiene solo valores sí/no y se usa para la clasificación binaria. La columna
tip_class tiene varias etiquetas de clase y, por tanto, se puede usar como etiqueta para tareas de
clasificación de varias clases.
Este tutorial muestra solo la tarea de clasificación binaria; puede intentar crear modelos de las otras dos
tareas de aprendizaje automático, regresión y clasificación de varias clases.
Los valores usados para las columnas de etiqueta se basan en la columna tip_amount, usando estas
reglas de negocios:

N O M B RE DE C O L UM N A DERIVA DA REGL A

tipped Si tip_amount > 0, tipped = 1, de lo contrario, tipped =


0

tip_class Clase 0: tip_amount = 0 $

Clase 1: tip_amount > 0 $ y tip_amount < = 5 $

Clase 2: tip_amount > 5 $ y tip_amount < = 10 $

Clase 3: tip_amount > 10 $ y tip_amount < = 20 $

Clase 4: tip_amount > 20 $

Creación de trazados con R en T-SQL


IMPORTANT
A partir de SQL Server 2019, el mecanismo de aislamiento requiere que se proporcionen los permisos adecuados para el
directorio donde se almacena el archivo de trazado. Para más información sobre cómo establecer estos permisos, consulte
la sección sobre los permisos de archivo en SQL Server 2019 en Windows: Cambios de aislamiento para Machine Learning
Services.

Use la función barplot de R para crear el trazado. Este paso representa un histograma en función de los datos
de una consulta Transact-SQL. Puede ajustar esta función en un procedimiento almacenado, RPlotHistogram .
1. En SQL Server Management Studio, en el Explorador de objetos, haga clic con el botón derecho en la
base de datos NYCTaxi_Sample y seleccione Nueva consulta . O en Azure Data Studio, seleccione
Nuevo cuaderno en el menú Archivo y conéctese a la base de datos.
2. Pegue el siguiente script para crear un procedimiento almacenado que trace el histograma. Este ejemplo
se denomina RPlotHistogram .

CREATE PROCEDURE [dbo].[RPlotHistogram]


AS
BEGIN
SET NOCOUNT ON;
DECLARE @query nvarchar(max) =
N'SELECT tipped FROM [dbo].[nyctaxi_sample]'
EXECUTE sp_execute_external_script @language = N'R',
@script = N'
image_file = tempfile();
jpeg(filename = image_file);
#Plot histogram
barplot(table(InputDataSet$tipped), main = "Tip Histogram", col="lightgreen", xlab="Tipped or
not", ylab = "Counts", space=0)
dev.off();
OutputDataSet <- data.frame(data=readBin(file(image_file, "rb"), what=raw(), n=1e6));
',
@input_data_1 = @query
WITH RESULT SETS ((plot varbinary(max)));
END
GO

Entre los puntos clave que se deben comprender en este script se incluyen los siguientes:
La variable @query define el texto de consulta ( 'SELECT tipped FROM nyctaxi_sample' ), que se pasa al
script de R como argumento para la variable de entrada de script @input_data_1 . En el caso de los scripts
de R que se ejecutan como procesos externos, debe tener una asignación de uno a uno entre las entradas
del script y las entradas en el procedimiento almacenado del sistema sp_execute_external_script que
inicia la sesión de R en SQL Server.
Dentro del script de R, se define una variable ( image_file ) para almacenar la imagen.
Se llama a la función barplot para generar el trazado.
El dispositivo de R está establecido en desactivado porque está ejecutando este comando como un
script externo en SQL Server. Normalmente en R, al enviar un comando de trazado de alto nivel, R abre
una ventana de gráficos, denominada dispositivo. Puede desactivar el dispositivo si está escribiendo en
un archivo o controlando el resultado de otra manera.
El objeto de gráficos de R se serializa en un data.frame de R para la salida.
Ejecute el procedimiento almacenado y use bcp para exportar datos binarios a un archivo de imagen
El procedimiento almacenado devuelve la imagen como una secuencia de datos varbinary, que, evidentemente,
no puede ver directamente. En cambio, puede usar la utilidad bcp para obtener los datos varbinary y guardarlos
como un archivo de imagen en un equipo cliente.
1. En Management Studio, ejecute la instrucción siguiente:

EXEC [dbo].[RPlotHistogram]

Resultados
plot 0xFFD8FFE000104A4649...
2. Abra un símbolo del sistema de PowerShell y ejecute el siguiente comando con el nombre de instancia, el
nombre de la base de datos, el nombre de usuario y las credenciales adecuados como argumentos. Para
aquellos que usan identidades de Windows, puede reemplazar -U y -P con -T .

bcp "exec RPlotHistogram" queryout "plot.jpg" -S <SQL Server instance name> -d NYCTaxi_Sample -U
<user name> -P <password> -T

NOTE
Los modificadores de comandos bcp distinguen mayúsculas de minúsculas.

3. Si la conexión es correcta, se le pedirá que escriba más información sobre el formato de archivo de
gráficos.
Pulse ENTRAR en cada aviso para aceptar los valores predeterminados, excepto estos cambios:
En prefix-length of field plot , escriba 0.
Escriba Y si quiere guardar los parámetros de salida para un uso posterior.

Enter the file storage type of field plot [varbinary(max)]:


Enter prefix-length of field plot [8]: 0
Enter length of field plot [0]:
Enter field terminator [none]:

Do you want to save this format information in a file? [Y/n]


Host filename [bcp.fmt]:

Resultados

Starting copy...
1 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 3922 Average : (0.25 rows per sec.)

TIP
Si guarda la información de formato en archivo (bcp.fmt), la utilidad bcp genera una definición de formato que
puede aplicar a los comandos similares en el futuro sin tener que cambiar las opciones de formato de archivo de
gráficos. Para usar el archivo de formato, agregue -f bcp.fmt al final de cualquier línea de comandos después
del argumento de la contraseña.

4. El archivo de salida se creará en el mismo directorio en el que se ha ejecutado el comando de PowerShell.


Para ver el trazado, basta con abrir el archivo plot.jpg.
Creación de un procedimiento almacenado con hist
Normalmente, los científicos de datos generan varias visualizaciones de datos para obtener información sobre
los datos desde distintas perspectivas. En este ejemplo, creará un procedimiento almacenado llamado
RPlotHist para escribir histogramas, gráficos de dispersión y otros gráficos de R en formato .JPG y .PDF.
Este procedimiento almacenado usa la función hist para crear el histograma y exportar los datos binarios a
formatos populares como .JPG, .PDF y .PNG.
1. En SQL Server Management Studio, en el Explorador de objetos, haga clic con el botón derecho en la
base de datos NYCTaxi_Sample y seleccione Nueva consulta .
2. Pegue el siguiente script para crear un procedimiento almacenado que trace el histograma. Este ejemplo
se denomina RPlotHist .
CREATE PROCEDURE [dbo].[RPlotHist]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @query nvarchar(max) =
N'SELECT cast(tipped as int) as tipped, tip_amount, fare_amount FROM [dbo].[nyctaxi_sample]'
EXECUTE sp_execute_external_script @language = N'R',
@script = N'
# Set output directory for files and check for existing files with same names
mainDir <- ''C:\\temp\\plots''
dir.create(mainDir, recursive = TRUE, showWarnings = FALSE)
setwd(mainDir);
print("Creating output plot files:", quote=FALSE)

# Open a jpeg file and output histogram of tipped variable in that file.
dest_filename = tempfile(pattern = ''rHistogram_Tipped_'', tmpdir = mainDir)
dest_filename = paste(dest_filename, ''.jpg'',sep="")
print(dest_filename, quote=FALSE);
jpeg(filename=dest_filename);
hist(InputDataSet$tipped, col = ''lightgreen'', xlab=''Tipped'',
ylab = ''Counts'', main = ''Histogram, Tipped'');
dev.off();

# Open a pdf file and output histograms of tip amount and fare amount.
# Outputs two plots in one row
dest_filename = tempfile(pattern = ''rHistograms_Tip_and_Fare_Amount_'', tmpdir = mainDir)
dest_filename = paste(dest_filename, ''.pdf'',sep="")
print(dest_filename, quote=FALSE);
pdf(file=dest_filename, height=4, width=7);
par(mfrow=c(1,2));
hist(InputDataSet$tip_amount, col = ''lightgreen'',
xlab=''Tip amount ($)'',
ylab = ''Counts'',
main = ''Histogram, Tip amount'', xlim = c(0,40), 100);
hist(InputDataSet$fare_amount, col = ''lightgreen'',
xlab=''Fare amount ($)'',
ylab = ''Counts'',
main = ''Histogram,
Fare amount'',
xlim = c(0,100), 100);
dev.off();

# Open a pdf file and output an xyplot of tip amount vs. fare amount using lattice;
# Only 10,000 sampled observations are plotted here, otherwise file is large.
dest_filename = tempfile(pattern = ''rXYPlots_Tip_vs_Fare_Amount_'', tmpdir = mainDir)
dest_filename = paste(dest_filename, ''.pdf'',sep="")
print(dest_filename, quote=FALSE);
pdf(file=dest_filename, height=4, width=4);
plot(tip_amount ~ fare_amount,
data = InputDataSet[sample(nrow(InputDataSet), 10000), ],
ylim = c(0,50),
xlim = c(0,150),
cex=.5,
pch=19,
col=''darkgreen'',
main = ''Tip amount by Fare amount'',
xlab=''Fare Amount ($)'',
ylab = ''Tip Amount ($)'');
dev.off();',
@input_data_1 = @query
END

Entre los puntos clave que se deben comprender en este script se incluyen los siguientes:
El resultado de la consulta SELECT en el procedimiento almacenado se almacena en la trama de datos
predeterminada de R, InputDataSet . Se puede llamar a varias funciones de trazado de R para generar los
archivos de gráficos reales. La mayoría de los scripts insertados de R representan las opciones de estas
funciones de gráficos, como plot o hist .
El dispositivo de R está establecido en desactivado porque está ejecutando este comando como un
script externo en SQL Server. Normalmente en R, al enviar un comando de trazado de alto nivel, R abre
una ventana de gráficos, denominada dispositivo. Puede desactivar el dispositivo si está escribiendo en
un archivo o controlando el resultado de otra manera.
Todos los archivos se guardan en la carpeta local C:\temp\Plots. La carpeta de destino se define mediante
los argumentos proporcionados para el script de R como parte del procedimiento almacenado. Para
generar los archivos en una carpeta diferente, cambie el valor de la variable mainDir en el script
insertado de R en el procedimiento almacenado. También puede modificar el script para generar
diferentes formatos, más archivos, etc.
Ejecutar el procedimiento almacenado
Ejecute la siguiente instrucción para exportar datos de trazados binarios a formatos de archivo JPEG y PDF.

EXEC RPlotHist

Resultados

STDOUT message(s) from external script:


[1] Creating output plot files:[1] C:\temp\plots\rHistogram_Tipped_18887f6265d4.jpg[1]

C:\temp\plots\rHistograms_Tip_and_Fare_Amount_1888441e542c.pdf[1]

C:\temp\plots\rXYPlots_Tip_vs_Fare_Amount_18887c9d517b.pdf

Los números de los nombres de archivo se generan de forma aleatoria para asegurarse de que no recibe un
error al intentar escribir en un archivo existente.
Ver salida
Para ver el trazado, abra la carpeta de destino y revise los archivos creados por el código R en el procedimiento
almacenado.
1. Vaya a la carpeta indicada en el mensaje STDOUT (en el ejemplo, es C:\temp\plots).
2. Abra rHistogram_Tipped.jpg para mostrar el número de viajes que obtuvieron una propina frente a los
que no obtuvieron propina (este histograma es similar al que ya generó en el paso anterior).
3. Abra rHistograms_Tip_and_Fare_Amount.pdf para ver la distribución de las cantidades de las propinas,
trazadas con respecto a los importes de las tarifas.
4. Abra rXYPlots_Tip_vs_Fare_Amount.pdf para ver un gráfico de dispersión con el importe de la tarifa en el
eje x y la cantidad de la propina en el eje y.

Pasos siguientes
En este artículo:
Revisó los datos de ejemplo
Creó trazados con R en T-SQL
Generó trazados en varios formatos de archivo
Tutorial de R: Creación de características de datos
Tutorial de R: Crear características de datos
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte tres de esta serie de tutoriales de cinco partes, aprenderá a crear características a partir de datos sin
procesar mediante una función Transact-SQL. Después, llamará a esa función desde un procedimiento
almacenado de SQL para crear una tabla que contenga los valores de las características.
En este artículo, hará lo siguiente:
Modificará una función personalizada para calcular la distancia de la carrera
Guardará las características mediante otra función personalizada
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, revisó los datos de ejemplo y generó algunos trazados.
En la parte cuatro, cargará los módulos y llamará a las funciones necesarias para crear y entrenar el modelo
mediante un procedimiento almacenado de SQL Server.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

Acerca de la ingeniería de características


Después de varias series de exploración de datos, ha recopilado conocimientos de los datos y está listo para
pasar a la ingeniería de funciones. Este proceso de creación de características significativas a partir de los datos
sin procesar es un paso fundamental a la hora de crear modelos analíticos.
En este conjunto de datos, los valores de distancia se basan en la distancia notificada del taxímetro, y no
representan necesariamente la distancia geográfica o la distancia recorrida realmente. Por tanto, debe calcular la
distancia directa entre los puntos de origen y destino, usando las coordenadas disponibles en el conjunto de
datos de origen NYC Taxi. Puede hacerlo mediante la fórmula Haversine en un función personalizada de
Transact-SQL .
Usará una función personalizada de T-SQL, fnCalculateDistance, para calcular la distancia usando la fórmula
Haversine, y una segunda función personalizada de T-SQL, fnEngineerFeatures, para crear una tabla que
contiene todas las características.
El proceso general consiste en lo siguiente:
Crear la función de T-SQL que realiza los cálculos
Llamar a la función para generar los datos de característica
Guardar los datos de característica en una tabla

Cálculo de la distancia del trayecto con fnCalculateDistance


La función fnCalculateDistance debe haberse descargado y registrado con SQL Server como parte de la
preparación de este tutorial. Tómese un minuto para revisar el código.
1. En Management Studio, expanda Programación , expanda Funciones y, después, Funciones
escalares .
2. Haga clic con el botón derecho en fnCalculateDistance y seleccione Modificar para abrir el script de
Transact-SQL en una nueva ventana de consulta.

CREATE FUNCTION [dbo].[fnCalculateDistance] (@Lat1 float, @Long1 float, @Lat2 float, @Long2 float)
-- User-defined function that calculates the direct distance between two geographical coordinates.
RETURNS float
AS
BEGIN
DECLARE @distance decimal(28, 10)
-- Convert to radians
SET @Lat1 = @Lat1 / 57.2958
SET @Long1 = @Long1 / 57.2958
SET @Lat2 = @Lat2 / 57.2958
SET @Long2 = @Long2 / 57.2958
-- Calculate distance
SET @distance = (SIN(@Lat1) * SIN(@Lat2)) + (COS(@Lat1) * COS(@Lat2) * COS(@Long2 - @Long1))
--Convert to miles
IF @distance <> 0
BEGIN
SET @distance = 3958.75 * ATAN(SQRT(1 - POWER(@distance, 2)) / @distance);
END
RETURN @distance
END
GO

La función es una función escalar y devuelve un único valor de datos de un tipo predefinido.
Toma los valores de latitud y longitud como entradas, obtenidos de las ubicaciones de origen y
destino de los viajes. La fórmula Haversine convierte ubicaciones en radianes y usa esos valores
para calcular la distancia directa en millas entre las dos ubicaciones.

Generación de las características con fnEngineerFeatures


Para agregar los valores calculados a una tabla y poder usarlos para entrenar el modelo, deberá usar otra
función, fnEngineerFeatures. La nueva función llama a la función de T-SQL creada anteriormente,
fnCalculateDistance, para obtener la distancia directa entre las ubicaciones de origen y destino.
1. Tómese un minuto para revisar el código de la función personalizada de T-SQL, fnEngineerFeatures, que
debe haberse creado como parte de la preparación para este tutorial.
CREATE FUNCTION [dbo].[fnEngineerFeatures] (
@passenger_count int = 0,
@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0)
RETURNS TABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references here
SELECT
@passenger_count AS passenger_count,
@trip_distance AS trip_distance,
@trip_time_in_secs AS trip_time_in_secs,
[dbo].[fnCalculateDistance](@pickup_latitude, @pickup_longitude, @dropoff_latitude,
@dropoff_longitude) AS direct_distance

)
GO

Esta función es una función con valores de tabla que toma varias columnas como entradas y
genera una tabla con varias columnas de características.
El propósito de esta función es crear características para usarlas en la creación de un modelo.
2. Para comprobar que esta función funciona, úsela para calcular la distancia geográfica de los trayectos en
los que la distancia medida era 0, pero las ubicaciones de origen y destino eran diferentes.

SELECT tipped, fare_amount, passenger_count,(trip_time_in_secs/60) as TripMinutes,


trip_distance, pickup_datetime, dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude)
AS direct_distance
FROM nyctaxi_sample
WHERE pickup_longitude != dropoff_longitude and pickup_latitude != dropoff_latitude and
trip_distance = 0
ORDER BY trip_time_in_secs DESC

Como puede ver, la distancia notificada por el taxímetro no siempre se corresponde con la distancia
geográfica. Por eso es tan importante la ingeniería de características. Estas características de datos se
pueden usar para entrenar un modelo de Machine Learning con R.

Pasos siguientes
En este artículo:
Se modificó una función personalizada para calcular la distancia de la carrera
Se guardaron las características mediante otra función personalizada
Tutorial de R: Entrenamiento y guardado del modelo
Tutorial de R: Entrenamiento y guardado del
modelo
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte cuatro de esta serie de tutoriales de cinco partes, aprenderá a entrenar un modelo de Machine
Learning mediante R. Deberá entrenar el modelo con las características de datos que creó en la parte anterior y
después guardar el modelo entrenado en una tabla de SQL Server. En este caso, los paquetes de R ya se han
instalado con R Services (en bases de datos), por lo que todo se puede hacer desde SQL.
En este artículo, hará lo siguiente:
Crear y entrenar un modelo mediante un procedimiento almacenado de SQL
Guardar el modelo entrenado en una tabla SQL
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, revisó los datos de ejemplo y generó algunos trazados.
En la tres, aprendió a crear características a partir de datos sin procesar mediante una función de Transact-SQL.
Después, llamó a esa función desde un procedimiento almacenado para crear una tabla que contiene los valores
de las características.
En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

Creación del procedimiento almacenado


Al llamar a R desde T-SQL, utilice el procedimiento almacenado del sistema sp_execute_external_script. Sin
embargo, para procesos que repite a menudo, como volver a entrenar un modelo, es más fácil encapsular la
llamada a sp_execute_external_script en otro procedimiento almacenado.
1. En Management Studio, abra una nueva ventana de consulta .
2. Ejecute la siguiente instrucción para crear el procedimiento almacenado RTrainLogitModel . Este
procedimiento almacenado define los datos de entrada y usa glm para crear un modelo de regresión
logística.
CREATE PROCEDURE [dbo].[RTrainLogitModel] (@trained_model varbinary(max) OUTPUT)

AS
BEGIN
DECLARE @inquery nvarchar(max) = N'
select tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance,
pickup_datetime, dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude)
as direct_distance
from nyctaxi_sample
tablesample (70 percent) repeatable (98052)
'

EXEC sp_execute_external_script @language = N'R',


@script = N'
## Create model
logitObj <- glm(tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance, data
= InputDataSet, family = binomial)
summary(logitObj)

## Serialize model
trained_model <- as.raw(serialize(logitObj, NULL));
',
@input_data_1 = @inquery,
@params = N'@trained_model varbinary(max) OUTPUT',
@trained_model = @trained_model OUTPUT;
END
GO

Para asegurarse de que se dejan algunos datos para probar el modelo, el 70 % de los datos se
seleccionan aleatoriamente de la tabla de datos de taxi con fines de entrenamiento.
La consulta SELECT usa la función escalar personalizada fnCalculateDistance para calcular la
distancia directa entre las ubicaciones de origen y destino. Los resultados de la consulta se
almacenan en la variable de entrada predeterminada de R InputDataset .
El script de R llama a la función glm de R para crear el modelo de regresión logística.
La variable binaria tipped se usa como la etiqueta o columna del resultado y el modelo se ajusta
mediante estas columnas específicas: passenger_count, trip_distance, trip_time_in_secs y
direct_distance.
El modelo entrenado, guardado en la variable de R logitObj , se serializa y se devuelve como un
parámetro de salida.

Entreno e implementación del modelo de R usando el procedimiento


almacenado
Como el procedimiento almacenado ya incluye una definición de los datos de entrada, no es necesario
proporcionar una consulta de entrada.
1. Para entrenar e implementar el modelo de R, llame al procedimiento almacenado e insértelo en la tabla
de base de datos nyc_taxi_models para poder usarlo en predicciones futuras:

DECLARE @model VARBINARY(MAX);


EXEC RTrainLogitModel @model OUTPUT;
INSERT INTO nyc_taxi_models (name, model) VALUES('RTrainLogit_model', @model);

2. Vea en la ventana Mensajes de Management Studio los mensajes que se canalizan al flujo stdout de R:
Mensaje(s) STDOUT del script externo: Filas leídas: 1193025, Total de filas procesadas: 1193025, Tiempo
total de fragmentos: 0,093 segundos
3. Una vez completada la instrucción, abra la tabla nyc_taxi_models. Es posible que el procesamiento de los
datos y el ajuste del modelo tarden un rato.
Puede ver que se ha agregado una fila nueva, que contiene el modelo serializado en la columna model y
el nombre del modelo RxTrainLogit_model en la columna name.

model name
---------------------------- ------------------
0x580A00000002000302020.... RTrainLogit_model

En la siguiente parte de este tutorial, usará el modelo entrenado para generar predicciones.

Pasos siguientes
En este artículo:
Creó y entrenó un modelo mediante un procedimiento almacenado de SQL
Guardó el modelo entrenado en una tabla SQL
Tutorial de R: Ejecución de predicciones en procedimientos almacenados de SQL
Tutorial de R: Ejecución de predicciones en
procedimientos almacenados de SQL
14/07/2021 • 6 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En la parte cinco de esta serie de tutoriales de cinco partes, aprenderá a usar el modelo que ha entrenado y
guardado en la parte anterior usando el modelo para predecir posibles resultados. Se ajusta el modelo en un
procedimiento almacenado, al que otras aplicaciones pueden llamar directamente.
En este artículo se muestran dos maneras de realizar la puntuación:
Modo de puntuación por lotes : Use una consulta SELECT como entrada para el procedimiento
almacenado. El procedimiento almacenado devuelve una tabla de observaciones correspondientes a los
casos de entrada.
Modo de puntuación individual : pasar un conjunto de valores de parámetros individuales como
entrada. El procedimiento almacenado devuelve una sola fila o valor.
En este artículo, hará lo siguiente:
Crear y usar procedimientos almacenados para la puntuación por lotes
Crear y usar procedimientos almacenados para puntuar una sola fila
En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.
En la parte dos, revisó los datos de ejemplo y generó algunos trazados.
En la tres, aprendió a crear características a partir de datos sin procesar mediante una función de Transact-SQL.
Después, llamó a esa función desde un procedimiento almacenado para crear una tabla que contiene los valores
de las características.
En la parte cuatro, cargó los módulos y llamó a las funciones necesarias para crear y entrenar el modelo
mediante un procedimiento almacenado de SQL Server.

Puntuaciones básicas
El procedimiento almacenado RPredict muestra la sintaxis básica para ajustar una llamada de PREDICT en un
procedimiento almacenado.
CREATE PROCEDURE [dbo].[RPredict] (@model varchar(250), @inquery nvarchar(max))
AS
BEGIN

DECLARE @lmodel2 varbinary(max) = (SELECT model FROM nyc_taxi_models WHERE name = @model);
EXEC sp_execute_external_script @language = N'R',
@script = N'
mod <- unserialize(as.raw(model));
print(summary(mod))
OutputDataSet <- data.frame(predict(mod, InputDataSet, type = "response"));
str(OutputDataSet)
print(OutputDataSet)
',
@input_data_1 = @inquery,
@params = N'@model varbinary(max)',
@model = @lmodel2
WITH RESULT SETS (("Score" float));
END
GO

La instrucción SELECT obtiene el modelo serializado de la base de datos y lo almacena en la variable de R


mod para su posterior procesamiento con R.

Los nuevos casos que se van a puntuar se obtienen de la consulta de Transact-SQL especificada en
@inquery , el primer parámetro del procedimiento almacenado. Cuando se leen los datos de la consulta,
las filas se guardan en la trama de datos predeterminada, InputDataSet . Esta trama de datos se pasa a la
función PREDICT que genera las puntuaciones.
OutputDataSet <- data.frame(predict(mod, InputDataSet, type = "response"));

Como data.frame puede contener una sola fila, puede usar el mismo código para la puntuación individual
o por lotes.
El valor devuelto por la función PREDICT es un parámetro float que representa la probabilidad de que el
taxista reciba una propina de cualquier importe.

Puntuación por lotes (lista de predicciones)


Un escenario más común es generar predicciones para varias observaciones en el modo por lotes. En este paso
veremos cómo funciona la puntuación por lotes.
1. Para empezar se obtiene un conjunto más pequeño de los datos de entrada con el que trabajar. Esta
consulta crea una lista de los "Diez mejores" viajes con número de pasajeros y otras características
necesarias para realizar una predicción.
SELECT TOP 10 a.passenger_count AS passenger_count, a.trip_time_in_secs AS trip_time_in_secs,
a.trip_distance AS trip_distance, a.dropoff_datetime AS dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude,dropoff_longitude) AS
direct_distance

FROM (SELECT medallion, hack_license, pickup_datetime,


passenger_count,trip_time_in_secs,trip_distance, dropoff_datetime, pickup_latitude, pickup_longitude,
dropoff_latitude, dropoff_longitude FROM nyctaxi_sample)a

LEFT OUTER JOIN

(SELECT medallion, hack_license, pickup_datetime FROM nyctaxi_sample TABLESAMPLE (70 percent)


REPEATABLE (98052) )b

ON a.medallion=b.medallion AND a.hack_license=b.hack_license


AND a.pickup_datetime=b.pickup_datetime
WHERE b.medallion IS NULL

Ejemplo de resultados

passenger_count trip_time_in_secs trip_distance dropoff_datetime direct_distance


1 283 0.7 2013-03-27 14:54:50.000 0.5427964547
1 289 0.7 2013-02-24 12:55:29.000 0.3797099614
1 214 0.7 2013-06-26 13:28:10.000 0.6970098661

2. Cree un procedimiento almacenado llamado RPredictBatchOutput en Management Studio.

CREATE PROCEDURE [dbo].[RPredictBatchOutput] (@model varchar(250), @inquery nvarchar(max))


AS
BEGIN
DECLARE @lmodel2 varbinary(max) = (SELECT model FROM nyc_taxi_models WHERE name = @model);
EXEC sp_execute_external_script
@language = N'R',
@script = N'
mod <- unserialize(as.raw(model));
print(summary(mod))
OutputDataSet <- data.frame(predict(mod, InputDataSet, type = "response"));
str(OutputDataSet)
print(OutputDataSet)
',
@input_data_1 = @inquery,
@params = N'@model varbinary(max)',
@model = @lmodel2
WITH RESULT SETS ((Score float));
END

3. Proporcione el texto de la consulta en una variable y páselo como parámetro al procedimiento


almacenado:
-- Define the input data
DECLARE @query_string nvarchar(max)
SET @query_string='SELECT TOP 10 a.passenger_count as passenger_count, a.trip_time_in_secs AS
trip_time_in_secs, a.trip_distance AS trip_distance, a.dropoff_datetime AS dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude,dropoff_longitude) AS
direct_distance FROM (SELECT medallion, hack_license, pickup_datetime,
passenger_count,trip_time_in_secs,trip_distance, dropoff_datetime, pickup_latitude, pickup_longitude,
dropoff_latitude, dropoff_longitude FROM nyctaxi_sample )a LEFT OUTER JOIN (SELECT medallion,
hack_license, pickup_datetime FROM nyctaxi_sample TABLESAMPLE (70 percent) REPEATABLE (98052))b ON
a.medallion=b.medallion AND a.hack_license=b.hack_license AND a.pickup_datetime=b.pickup_datetime
WHERE b.medallion is null'

-- Call the stored procedure for scoring and pass the input data
EXEC [dbo].[RPredictBatchOutput] @model = 'RTrainLogit_model', @inquery = @query_string;

El procedimiento almacenado devuelve una serie de valores que representan la predicción para cada uno de las
"Diez mejores carreras". Pero las mejores carreras de taxi también son viajes de un solo pasajero con un
recorrido relativamente corto, por lo que es poco probable que el taxista reciba una propina.

TIP
En lugar de devolver resultados de tipo "propina sí" y "propina no", también podría devolver la puntuación de
probabilidad de la predicción y, después, aplicar una cláusula WHERE a los valores de la columna Score para clasificar el
resultado como "propina probable" o "propina improbable", con un valor de umbral como 0,5 o 0,7. Este paso no se
incluye en el procedimiento almacenado, pero es fácil de implementar.

Puntuación de una sola fila de varias entradas


A veces puede interesarle pasar varios valores de entrada y obtener una sola predicción basada en esos valores.
Por ejemplo, podría configurar una hoja de cálculo de Excel, una aplicación web o un informe de Reporting
Services para llamar al procedimiento almacenado y proporcionar entradas escritas o seleccionadas por los
usuarios de esas aplicaciones.
En esta sección, aprenderá a crear predicciones únicas mediante un procedimiento almacenado que toma varias
entradas, como el número de pasajeros, la distancia de la carrera, etc. El procedimiento almacenado crea una
puntuación basada en el modelo de R almacenado anteriormente.
Si llama al procedimiento almacenado desde una aplicación externa, asegúrese de que los datos coinciden con
los requisitos del modelo de R. Esto puede incluir asegurarse de que los datos de entrada se pueden convertir a
un tipo de datos R o validar el tipo y la longitud de los datos.
1. Cree un procedimiento almacenado RPredictSingleRow .
CREATE PROCEDURE [dbo].[RPredictSingleRow] @model varchar(50), @passenger_count int = 0,
@trip_distance float = 0, @trip_time_in_secs int = 0, @pickup_latitude float = 0, @pickup_longitude
float = 0, @dropoff_latitude float = 0, @dropoff_longitude float = 0
AS
BEGIN
DECLARE @inquery nvarchar(max) = N'SELECT * FROM [dbo].[fnEngineerFeatures](@passenger_count,
@trip_distance, @trip_time_in_secs, @pickup_latitude, @pickup_longitude, @dropoff_latitude,
@dropoff_longitude)';
DECLARE @lmodel2 varbinary(max) = (SELECT model FROM nyc_taxi_models WHERE name = @model);
EXEC sp_execute_external_script
@language = N'R',
@script = N'
mod <- unserialize(as.raw(model));
print(summary(mod));
OutputDataSet <- data.frame(predict(mod, InputDataSet, type = "response"));
str(OutputDataSet);
print(OutputDataSet);
',
@input_data_1 = @inquery,
@params = N'@model varbinary(max),@passenger_count int,@trip_distance float,@trip_time_in_secs int
, @pickup_latitude float ,@pickup_longitude float ,@dropoff_latitude float ,@dropoff_longitude
float', @model = @lmodel2, @passenger_count =@passenger_count, @trip_distance=@trip_distance,
@trip_time_in_secs=@trip_time_in_secs, @pickup_latitude=@pickup_latitude,
@pickup_longitude=@pickup_longitude, @dropoff_latitude=@dropoff_latitude,
@dropoff_longitude=@dropoff_longitude
WITH RESULT SETS ((Score float));
END

2. Pruébelo, proporcionando los valores manualmente.


Abra una nueva ventana Consulta para llamar al procedimiento almacenado, indicando valores en cada
uno de los parámetros. Los parámetros representan las columnas de características usadas por el modelo
y son obligatorios.

EXEC [dbo].[RPredictSingleRow] @model = 'RTrainLogit_model',


@passenger_count = 1,
@trip_distance = 2.5,
@trip_time_in_secs = 631,
@pickup_latitude = 40.763958,
@pickup_longitude = -73.973373,
@dropoff_latitude = 40.782139,
@dropoff_longitude = -73.977303

Si lo prefiere, puede usar este método más breve compatible con parámetros para un procedimiento
almacenado:

EXEC [dbo].[RPredictSingleRow] 'RTrainLogit_model', 1, 2.5, 631, 40.763958,-73.973373, 40.782139,-


73.977303

3. Los resultados indican que la probabilidad de obtener una propina es baja (cero) en estas diez mejores
carreras, ya todas ellas son carreras donde viaja un único pasajero en una distancia relativamente corta.

Conclusiones
Ahora que ya sabe insertar código de R en procedimientos almacenados, puede aplicarlo para crear sus propios
modelos. La integración con Transact-SQL hace mucho más fácil la implementación de modelos de R para la
predicción y la incorporación del reciclaje de modelos como parte de un flujo de trabajo de datos empresarial.

Pasos siguientes
En este artículo:
Creó y usó procedimientos almacenados para la puntuación por lotes
Creó y usó procedimientos almacenados para puntuar una sola fila
Para obtener más información sobre R, consulte Extensión de R en SQL Server.
Tutorial: Creación de modelos basados en
particiones en R en SQL Server
14/07/2021 • 9 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En SQL Server 2019, el modelado basado en particiones es la capacidad de crear y entrenar modelos con los
datos con particiones. En el caso de los datos estratificados que se segmentan de forma natural en un esquema
de clasificación determinado, como regiones geográficas, fecha y hora, edad o sexo, puede ejecutar un script en
todo el conjunto de datos, con la capacidad de modelar, entrenar y puntuar las particiones que permanecen
intactas a lo largo de todas estas operaciones.
El modelado basado en particiones se habilita mediante dos nuevos parámetros en sp_execute_external_script:
input_data_1_par tition_by_columns especifica una columna por la que crear la partición.
input_data_1_order_by_columns especifica las columnas por las que ordenar.
En este tutorial vamos a aprender sobre el modelado basado en particiones con los datos de ejemplo clásicos
del taxi de Nueva York y el script de R. La columna de partición es el método de pago.
Las particiones se basan en los tipos de pago (5).
Cree y entrene modelos en cada partición y almacene los objetos en la base de datos.
Prediga la probabilidad de propina en cada modelo de partición con los datos de ejemplo reservados para
ese propósito.

Prerrequisitos
Para realizar este tutorial, debe disponer de lo siguiente:
Suficientes recursos del sistema. El conjunto de datos es grande y las operaciones de entrenamiento usan
muchos recursos. Si es posible, use un sistema con, al menos, 8 GB de RAM. También puede usar
conjuntos de datos más pequeños para solucionar las restricciones de recursos. Las instrucciones para
reducir el conjunto de datos están en línea.
Una herramienta para la ejecución de consultas de T-SQL, como SQL Server Management Studio.
NYCTaxi_Sample.bak, que puede descargar y restaurar en la instancia local del motor de base de datos. El
tamaño del archivo es de aproximadamente 90 MB.
Instancia del motor de base de datos de SQL Server 2019 con Machine Learning Services e integración
de R.
En el tutorial se usa una conexión de bucle invertido con SQL Server desde un script de R por ODBC. Por
lo tanto, debe crear un inicio de sesión para SQLRUserGroup.
Compruebe la versión mediante la ejecución de SELECT @@Version como una consulta de T-SQL en una
herramienta de consulta.
Compruebe la disponibilidad de paquetes de R; para ello, devuelva una lista con el formato correcto de todos
los paquetes de R instalados actualmente en la instancia del motor de base de datos:
EXECUTE sp_execute_external_script
@language=N'R',
@script = N'str(OutputDataSet);
packagematrix <- installed.packages();
Name <- packagematrix[,1];
Version <- packagematrix[,3];
OutputDataSet <- data.frame(Name, Version);',
@input_data_1 = N''
WITH RESULT SETS ((PackageName nvarchar(250), PackageVersion nvarchar(max) ))

Conectarse a la base de datos


Inicie Management Studio y conéctese a la instancia del motor de base de datos. En el Explorador de objetos,
compruebe que existe la base de datos NYCTaxi_Sample.

Crear CalculateDistance
La base de datos de demostración incluye una función escalar para calcular la distancia, pero el procedimiento
almacenado funciona mejor con una función con valores de tabla. Ejecute el siguiente script para crear la
función CalculateDistance que se usa en el paso de entrenamiento más adelante.
Para confirmar que se ha creado la función, compruebe las funciones con valores de tabla de
\Programmability\Functions\ en la base de datos NYCTaxi_Sample en el Explorador de objetos.

USE NYCTaxi_sample
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[CalculateDistance] (


@Lat1 FLOAT
,@Long1 FLOAT
,@Lat2 FLOAT
,@Long2 FLOAT
)
-- User-defined function calculates the direct distance between two geographical coordinates.
RETURNS TABLE
AS
RETURN

SELECT COALESCE(3958.75 * ATAN(SQRT(1 - POWER(t.distance, 2)) / nullif(t.distance, 0)), 0) AS


direct_distance
FROM (
VALUES (CAST((SIN(@Lat1 / 57.2958) * SIN(@Lat2 / 57.2958)) + (COS(@Lat1 / 57.2958) * COS(@Lat2 /
57.2958) * COS((@Long2 / 57.2958) - (@Long1 / 57.2958))) AS DECIMAL(28, 10)))
) AS t(distance)
GO

Definir un procedimiento para crear y entrenar modelos por partición


En este tutorial se encapsula el script de R en un procedimiento almacenado. En este paso se crea un
procedimiento almacenado que usa R para crear un conjunto de datos de entrada, se crea un modelo de
clasificación para predecir propinas y luego se almacena el modelo en la base de datos.
Entre las entradas de parámetros usadas por este script aparecen input_data_1_par tition_by_columns e
input_data_1_order_by_columns . Recuerde que estos parámetros son el mecanismo por el que se produce
el modelado con particiones. Los parámetros se pasan como entradas a sp_execute_external_script para
procesar las particiones con el script externo que se ejecuta una vez para cada partición.
En este procedimiento almacenado use paralelismo para terminar más rápido.
Después de ejecutar este script, debe ver train_r xLogIt_per_par tition en los procedimientos almacenados de
\Programmability\ en la base de datos NYCTaxi_Sample del Explorador de objetos. También debe ver una
nueva tabla que se usa para almacenar modelos: dbo.nyctaxi_models .

USE NYCTaxi_Sample
GO

CREATE
OR

ALTER PROCEDURE [dbo].[train_rxLogIt_per_partition] (@input_query NVARCHAR(max))


AS
BEGIN
DECLARE @start DATETIME2 = SYSDATETIME()
,@model_generation_duration FLOAT
,@model VARBINARY(max)
,@instance_name NVARCHAR(100) = @@SERVERNAME
,@database_name NVARCHAR(128) = db_name();

EXEC sp_execute_external_script @language = N'R'


,@script =
N'

# Make sure InputDataSet is not empty. In parallel mode, if one thread gets zero data, an error occurs
if (nrow(InputDataSet) > 0) {
# Define the connection string
connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name,
";Trusted_Connection=true;", sep="");

# build classification model to predict a tip outcome


duration <- system.time(logitObj <- rxLogit(tipped ~ passenger_count + trip_distance + trip_time_in_secs
+ direct_distance, data = InputDataSet))[3];

# First, serialize a model to and put it into a database table


modelbin <- as.raw(serialize(logitObj, NULL));

# Create the data source. To reduce data size, add rowsPerRead=500000 to cut the dataset by half.
ds <- RxOdbcData(table="ml_models", connectionString=connStr);

# Store the model in the database


model_name <- paste0("nyctaxi.", InputDataSet[1,]$payment_type);

rxWriteObject(ds, model_name, modelbin, version = "v1",


keyName = "model_name", valueName = "model_object", versionName = "model_version", overwrite = TRUE,
serialize = FALSE);
}

'
,@input_data_1 = @input_query
,@input_data_1_partition_by_columns = N'payment_type'
,@input_data_1_order_by_columns = N'passenger_count'
,@parallel = 1
,@params = N'@instance_name nvarchar(100), @database_name nvarchar(128)'
,@instance_name = @instance_name
,@database_name = @database_name
WITH RESULT SETS NONE
END;
GO
Ejecución en paralelo
Observe que las entradas de sp_execute_external_script incluyen @parallel=1 , que se usa para habilitar el
procesamiento paralelo. A diferencia de las versiones anteriores, en SQL Server 2019, el establecimiento de
@parallel=1 proporciona una indicación más fuerte al optimizador de consultas, lo que convierte a la ejecución
en paralelo en un resultado mucho más probable.
De forma predeterminada, el optimizador de consultas tiende a funcionar con @parallel=1 en tablas con más
de 256 filas, pero puede controlar esto de forma explícita si establece @parallel=1 como se muestra en este
script.

TIP
En las cargas de trabajo de entrenamiento, puede usar @parallel con cualquier script de entrenamiento arbitrario,
incluso aquellos que usan algoritmos rx que no son de Microsoft. Normalmente, solo los algoritmos de RevoScaleR (con el
prefijo rx) ofrecen paralelismo en escenarios de entrenamiento de SQL Server. Pero con el nuevo parámetro, puede
paralelizar un script que llame a funciones, incluidas funciones de R de código abierto, no diseñado específicamente con
esa capacidad. Esto funciona porque las particiones tienen afinidad con subprocesos concretos, así que todas las
operaciones llamadas en un script se ejecutan por partición en el thread.
determinado.

Ejecutar el procedimiento y entrenar el modelo


En esta sección, el script entrena al modelo creado y guardado en el paso anterior. Los ejemplos siguientes
muestran dos enfoques para entrenar el modelo: con un conjunto de datos completo o con datos parciales.
Tenga en cuenta que este paso va a llevar bastante tiempo. El entrenamiento usa muchos recursos y tarda
muchos minutos en completarse. Si los recursos del sistema, especialmente la memoria, son insuficientes para
la carga, use un subconjunto de los datos. En el segundo ejemplo se proporciona la sintaxis.

--Example 1: train on entire dataset


EXEC train_rxLogIt_per_partition N'
SELECT payment_type, tipped, passenger_count, trip_time_in_secs, trip_distance, d.direct_distance
FROM dbo.nyctaxi_sample CROSS APPLY [CalculateDistance](pickup_latitude, pickup_longitude,
dropoff_latitude, dropoff_longitude) as d
';
GO

--Example 2: Train on 20 percent of the dataset to expedite processing.


EXEC train_rxLogIt_per_partition N'
SELECT tipped, payment_type, passenger_count, trip_time_in_secs, trip_distance, d.direct_distance
FROM dbo.nyctaxi_sample TABLESAMPLE (20 PERCENT) REPEATABLE (98074)
CROSS APPLY [CalculateDistance](pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude)
as d
';
GO

NOTE
Si está ejecutando otras cargas de trabajo, puede anexar OPTION(MAXDOP 2) a la instrucción SELECT si quiere limitar el
procesamiento de consultas a solo dos núcleos.

Comprobar los resultados


El resultado de la tabla de modelos debe ser de cinco modelos diferentes, según las cinco particiones
segmentadas por los cinco tipos de pago. Los modelos se encuentran en el origen de datos ml_models .

SELECT *
FROM ml_models

Definir un procedimiento para predecir resultados


Puede usar los mismos parámetros para puntuar. El ejemplo siguiente contiene un script de R que puntúa
mediante el modelo correcto para la partición que se está procesando actualmente.
Como antes, cree un procedimiento almacenado para encapsular el código de R.

USE NYCTaxi_Sample
GO

-- Stored procedure that scores per partition.


-- Depending on the partition being processed, a model specific to that partition will be used
CREATE
OR

ALTER PROCEDURE [dbo].[predict_per_partition]


AS
BEGIN
DECLARE @predict_duration FLOAT
,@instance_name NVARCHAR(100) = @@SERVERNAME
,@database_name NVARCHAR(128) = db_name()
,@input_query NVARCHAR(max);

SET @input_query = 'SELECT tipped, passenger_count, trip_time_in_secs, trip_distance, d.direct_distance,


payment_type
FROM dbo.nyctaxi_sample TABLESAMPLE (1 PERCENT) REPEATABLE (98074)
CROSS APPLY [CalculateDistance](pickup_latitude, pickup_longitude,
dropoff_latitude, dropoff_longitude) as d'

EXEC sp_execute_external_script @language = N'R'


,@script =
N'

if (nrow(InputDataSet) > 0) {

#Get the partition that is currently being processed


current_partition <- InputDataSet[1,]$payment_type;

#Create the SQL query to select the right model


query_getModel <- paste0("select model_object from ml_models where model_name = ", "''",
"nyctaxi.",InputDataSet[1,]$payment_type,"''", ";")

# Define the connection string


connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name,
";Trusted_Connection=true;", sep="");

#Define data source to use for getting the model


ds <- RxOdbcData(sqlQuery = query_getModel, connectionString = connStr)

# Load the model


modelbin <- rxReadObject(ds, deserialize = FALSE)
# unserialize model
logitObj <- unserialize(modelbin);

# predict tipped or not based on model


predictions <- rxPredict(logitObj, data = InputDataSet, overwrite = TRUE, type = "response",
writeModelVars = TRUE
, extraVarsToWrite = c("payment_type"));
OutputDataSet <- predictions
OutputDataSet <- predictions

} else {
OutputDataSet <- data.frame(integer(), InputDataSet[,]);
}
'
,@input_data_1 = @input_query
,@parallel = 1
,@input_data_1_partition_by_columns = N'payment_type'
,@params = N'@instance_name nvarchar(100), @database_name nvarchar(128)'
,@instance_name = @instance_name
,@database_name = @database_name
WITH RESULT SETS((
tipped_Pred INT
,payment_type VARCHAR(5)
,tipped INT
,passenger_count INT
,trip_distance FLOAT
,trip_time_in_secs INT
,direct_distance FLOAT
));
END;
GO

Crear una tabla para almacenar las predicciones


CREATE TABLE prediction_results (
tipped_Pred INT
,payment_type VARCHAR(5)
,tipped INT
,passenger_count INT
,trip_distance FLOAT
,trip_time_in_secs INT
,direct_distance FLOAT
);

TRUNCATE TABLE prediction_results


GO

Ejecutar el procedimiento y guardar las predicciones


INSERT INTO prediction_results (
tipped_Pred
,payment_type
,tipped
,passenger_count
,trip_distance
,trip_time_in_secs
,direct_distance
)
EXECUTE [predict_per_partition]
GO

Ver las predicciones


Dado que las predicciones se almacenan, puede ejecutar una consulta simple para devolver un conjunto de
resultados.
SELECT *
FROM prediction_results;

Pasos siguientes
En este tutorial ha usado sp_execute_external_script para iterar operaciones en datos con particiones. Para
obtener una visión más detallada de la llamada a scripts externos en procedimientos almacenados y del uso de
funciones de RevoScaleR, continúe con el tutorial siguiente.
Tutorial de R y SQL Server
Tutorial: Desarrollo de SQL para científicos de datos
de R
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En este tutorial para científicos de datos, aprenderá a crear una solución completa para el modelado de
predicción basado en la compatibilidad con características de R de SQL Server 2016 o SQL Server 2017. En este
tutorial se usa una base de datos NYCTaxi_sample en SQL Server.
Usará una combinación de código R, datos de SQL Server y funciones SQL personalizadas para generar un
modelo de clasificación que indique la probabilidad de que el conductor reciba una propina en un recorrido de
taxi determinado. También implementará el modelo R en SQL Server y usará datos del servidor para generar
puntuaciones según el modelo.
Este ejemplo se puede ampliar a todos los tipos de problemas de la vida real, como predecir las respuestas de
los clientes en las campañas de ventas o predecir los gastos o la asistencia a eventos. Dado que el modelo se
puede invocar desde un procedimiento almacenado, puede insertarlo con facilidad en una aplicación.
Como el tutorial está diseñado para presentar R Services (en bases de datos) a los desarrolladores de R, se
usará R siempre que sea posible, si bien esto no significa que R sea necesariamente la mejor herramienta para
cada tarea. En muchos casos, SQL Server podría proporcionar un mejor rendimiento, especialmente en tareas
como la agregación de datos e ingeniería de características. Esas tareas pueden beneficiarse de las nuevas
características de SQL Server, como los índices de almacén de columnas con optimización para memoria. En el
camino le indicaremos posibles optimizaciones.

Prerrequisitos
SQL Server Machine Learning Services con integración de R o SQL Server 2016 R Services
Permisos de base de datos y un inicio de sesión de usuario de base de datos de SQL Server
SQL Server Management Studio
Base de datos de demo NYC Taxi
Un IDE de R como RStudio o la herramienta RGUI integrada incluida con R
Se recomienda realizar este tutorial en una estación de trabajo de cliente. Debe poder conectarse en la misma
red a un equipo de SQL Server con SQL Server y el lenguaje R habilitados. Para obtener instrucciones sobre la
configuración de la estación de trabajo, vea Configuración de un cliente de ciencia de datos para el desarrollo
en R.
Como alternativa, puede ejecutar el tutorial en un equipo que tenga tanto SQL Server como un entorno de
desarrollo de R, pero esta configuración es desaconsejable en un entorno de producción. Si necesita colocar el
cliente y el servidor en el mismo equipo, asegúrese de instalar un segundo conjunto de bibliotecas de
Microsoft R para enviar scripts de R desde un cliente "remoto". No use las bibliotecas de R que están instaladas
en los archivos de programa de la instancia de SQL Server. Concretamente, si usa un equipo, necesita tener la
biblioteca RevoScaleR en ambas ubicaciones para admitir las operaciones de cliente y de servidor.
C:\Archivos de programa\Microsoft\R Client\R_SERVER\library\RevoScaleR
C:\Archivos de programa\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR
Otros paquetes de R
Este tutorial requiere varias bibliotecas de R que no se instalan de forma predeterminada como parte de R
Services (en bases de datos). Debe instalar los paquetes tanto en el cliente donde desarrolle la solución como en
el equipo con SQL Server donde la implemente.
En una estación de trabajo de cliente
En el entorno de R, copie las siguientes líneas y ejecute el código en una ventana de la consola (RGui o un IDE).
Algunos paquetes también instalan paquetes necesarios. En general, se instalarán unos 32 paquetes. Deberá
disponer de conexión a Internet para poder realizar este paso.

# Install required R libraries, if they are not already installed.


if (!('ggmap' %in% rownames(installed.packages()))){install.packages('ggmap')}
if (!('mapproj' %in% rownames(installed.packages()))){install.packages('mapproj')}
if (!('ROCR' %in% rownames(installed.packages()))){install.packages('ROCR')}
if (!('RODBC' %in% rownames(installed.packages()))){install.packages('RODBC')}

En el servidor
Existen varias opciones para instalar paquetes en SQL Server. Por ejemplo, SQL Server proporciona una
característica de administración de paquetes de R que permite a los administradores de bases de datos crear un
repositorio de paquetes y asignar a los usuarios derechos para instalar sus propios paquetes. Con todo, si es un
administrador en el equipo, puede instalar nuevos paquetes mediante R, siempre que instale en la biblioteca
correcta.

NOTE
En el servidor, no instale en una biblioteca de usuario, aunque se le pida. Si lo hace, la instancia de SQL Server no podrá
encontrar ni ejecutar los paquetes. Para más información, vea Instalación de paquetes de R nuevos en SQL Server.

1. En el equipo con SQL Server, abra RGui.exe como administrador . Si ha instalado SQL Server R Services
usando los valores predeterminados, Rgui.exe estará en C:\Archivos de
programa\Microsoft SQL Server\MSSQL13. MSSQLSERVER\R_SERVICES\bin\x64).
2. En un símbolo del sistema de R, ejecute los siguientes comandos de R:

install.packages("ggmap", lib=grep("Program Files", .libPaths(), value=TRUE)[1])


install.packages("mapproj", lib=grep("Program Files", .libPaths(), value=TRUE)[1])
install.packages("ROCR", lib=grep("Program Files", .libPaths(), value=TRUE)[1])
install.packages("RODBC", lib=grep("Program Files", .libPaths(), value=TRUE)[1])

En este ejemplo se usa la función grep de R para buscar en el vector de rutas de acceso disponibles y encontrar
la ruta de acceso que incluya "Archivos de programa". Para más información, vea
https://www.rdocumentation.org/packages/base/functions/grep.
Si cree que los paquetes ya están instalados, ejecute installed.packages() para revisar la lista de paquetes
instalados.

Pasos siguientes
Exploración y resumen de los datos
Visualización y resumen de datos de SQL Server
mediante R (tutorial)
14/07/2021 • 8 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En esta lección se presentan las funciones del paquete RevoScaleR y se explican estas tareas:
Conectar a SQL Server
Definir una consulta con los datos que necesita o especificar una tabla o vista
Definir uno o más contextos de cálculo para usarlos al ejecutar código de R
Si lo prefiere, puede definir las transformaciones que se aplican al origen de datos mientras se lee desde el
origen.

Definición de un contexto de proceso de SQL Server


Ejecute las siguientes instrucciones de R en un entorno de R en la estación de trabajo del cliente. En esta sección
se presupone que usa una estación de trabajo de ciencia de datos con Microsoft R Client, ya que incluye todos
los paquetes de RevoScaleR, además de un conjunto básico y ligero de herramientas de R. Por ejemplo, puede
usar Rgui.exe para ejecutar el script de R en esta sección.
1. Si aún no está cargado el paquete RevoScaleR , ejecute esta línea de código R:

library("RevoScaleR")

En este caso, las comillas son opcionales pero recomendables.


Si recibe un error, asegúrese de que el entorno de desarrollo de R usa una biblioteca que contiene el
paquete RevoScaleR. Use un comando como .libPaths() para ver la ruta de acceso actual a la biblioteca.
2. Cree la cadena de conexión para SQL Server y guárdela en una variable de R, connStr.
Debe cambiar el marcador de posición "your_server_name" por un nombre de instancia de SQL Server
válido. En el caso del nombre del servidor, es posible que pueda usar solo el nombre de la instancia, o
puede que necesite un nombre completo, en función de la red.
Esta es la sintaxis de conexión para la autenticación de SQL Server:

connStr <- "Driver=SQL Server;Server=your_server_name;Database=nyctaxi_sample;Uid=your-sql-


login;Pwd=your-login-password"

Para la autenticación de Windows, la sintaxis es un poco diferente:

connStr <- "Driver=SQL


Server;Server=your_server_name;Database=nyctaxi_sample;Trusted_Connection=True"

Normalmente se recomienda usar la autenticación de Windows siempre que sea posible, para no tener
que guardar contraseñas en el código de R.
3. Defina las variables que se usarán al crear un nuevo contexto de proceso. Después de crear el objeto de
contexto de proceso, puede usarlo para ejecutar el código de R en la instancia de SQL Server.

sqlShareDir <- paste("C:\\AllShare\\",Sys.getenv("USERNAME"),sep="")


sqlWait <- TRUE
sqlConsoleOutput <- FALSE

R usa un directorio temporal cuando serializa los objetos de R entre la estación de trabajo y el
equipo con SQL Server . Puede especificar el directorio local que se usa como sqlShareDir o
aceptar el valor predeterminado.
Use sqlWait para indicar si quiere que R espere los resultados del servidor. Para obtener una
explicación sobre si esperar o no los trabajos, vea Proceso distribuido y en paralelo con
RevoScaleR en Microsoft R.
Use el argumento sqlConsoleOutput para indicar que no quiere ver los resultados desde la
consola de R.
4. Llame al constructor RxInSqlServer para crear el objeto de contexto de proceso con las variables y las
cadenas de conexión ya definidas, y guarde el nuevo objeto en la variable de R sqlcc.

sqlcc <- RxInSqlServer(connectionString = connStr, shareDir = sqlShareDir, wait = sqlWait,


consoleOutput = sqlConsoleOutput)

5. De manera predeterminada, el contexto de proceso es local, por lo que deberá establecer explícitamente
el contexto de proceso activo.

rxSetComputeContext(sqlcc)

rxSetComputeContext devuelve el contexto de proceso activo anteriormente de manera invisible para


que pueda usarlo.
rxGetComputeContext devuelve el contexto de proceso activo.
Tenga que cuenta que establecer un contexto de proceso solo afecta a las operaciones que usan funciones
en el paquete RevoScaleR ; el contexto de proceso no afecta a la forma en que se realizan las
operaciones de R de código abierto.

Creación de un origen de datos mediante RxSqlServer


Cuando se usan las bibliotecas de Microsoft R como RevoScaleR y MicrosoftML, un origen de datos es un objeto
que se crea mediante las funciones de RevoScaleR. El objeto de origen de datos especifica algún conjunto de
datos que quiera usar para una tarea, como el entrenamiento del modelo o la extracción de características.
Puede obtener datos de diversos orígenes, incluido SQL Server. Para obtener la lista de orígenes admitidos
actualmente, vea RxDataSource.
Antes definió una cadena de conexión y guardó esa información en una variable de R. Puede volver a usar esa
información de conexión para especificar los datos que quiere obtener.
1. Guarde una consulta SQL como una variable de cadena. La consulta define los datos para entrenar el
modelo.

sampleDataQuery <- "SELECT TOP 1000 tipped, fare_amount,


passenger_count,trip_time_in_secs,trip_distance, pickup_datetime, dropoff_datetime, pickup_longitude,
pickup_latitude, dropoff_longitude, dropoff_latitude FROM nyctaxi_sample"

Aquí hemos usado una cláusula TOP para que todo se ejecute más rápido, pero las filas reales devueltas
por la consulta pueden variar según el orden. Por lo tanto, los resultados de resumen también pueden ser
diferentes de los que se enumeran aquí. No dude en quitar la cláusula TOP.
2. Pase la definición de consulta como argumento a la función RxSqlServerData.

inDataSource <- RxSqlServerData(


sqlQuery = sampleDataQuery,
connectionString = connStr,
colClasses = c(pickup_longitude = "numeric", pickup_latitude = "numeric",
dropoff_longitude = "numeric", dropoff_latitude = "numeric"),
rowsPerRead=500
)

El argumento colClasses especifica los tipos de columna que se usarán al mover los datos entre
SQL Server y R. Esto es importante porque SQL Server usa tipos de datos distintos a los de R y
más tipos de datos. Para más información, vea Bibliotecas de R y tipos de datos.
El argumento rowsPerRead es importante para controlar el uso de memoria y la eficacia de los
procesos. La mayoría de las funciones analíticas mejoradas deR Services (en bases de datos)
procesan los datos en fragmentos y acumulan los resultados intermedios, devolviendo los cálculos
finales después de que se han leído todos los datos. Al agregar el parámetro rowsPerRead, se
consigue controlar cuántas filas de datos se leen en cada fragmento para su procesamiento. Si el
valor de este parámetro es demasiado grande, es posible que el acceso a los datos sea lento
porque no tiene suficiente memoria para procesar de forma eficaz un fragmento de datos tan
grande. En algunos sistemas, si se establece rowsPerRead en un valor demasiado pequeño
también puede suponer un rendimiento más lento.
3. Hasta ahora, ha creado el objeto inDataSource, pero no contiene ningún dato. Los datos no se extraen de
la consulta de SQL al entorno local hasta que se ejecuta una función como rxImport o rxSummary.
Aunque, como ya ha definido los objetos de datos, puede usarlos como argumento para otras funciones.

Uso de los datos de SQL Server en resúmenes de R


En esta sección, probará algunas de las funciones proporcionadas en R Services (en bases de datos) que
admiten contextos de proceso remotos. Al aplicar funciones de R al origen de datos, puede explorar, resumir y
mostrar en gráficos los datos de SQL Server.
1. Llame a la función rxGetVarInfo para obtener una lista de las variables del origen de datos y sus tipos de
datos.
r xGetVarInfo es una función muy útil: puede llamarla en cualquier trama de datos o en un conjunto de
datos en un objeto de datos remotos para obtener información como los valores máximo y mínimo, el
tipo de datos y el número de niveles en las columnas de factor.
Considere la posibilidad de ejecutar esta función después de cualquier tipo de entrada de datos,
transformación de características o ingeniería de características. Al hacerlo, puede asegurarse de que
todas las características que quiere usar en el modelo son del tipo de datos esperado y evitar errores.

rxGetVarInfo(data = inDataSource)

Resultados
Var 1: tipped, Type: integer
Var 2: fare_amount, Type: numeric
Var 3: passenger_count, Type: integer
Var 4: trip_time_in_secs, Type: numeric, Storage: int64
Var 5: trip_distance, Type: numeric
Var 6: pickup_datetime, Type: character
Var 7: dropoff_datetime, Type: character
Var 8: pickup_longitude, Type: numeric
Var 9: pickup_latitude, Type: numeric
Var 10: dropoff_longitude, Type: numeric

2. Ahora, llame a la función rxSummary de RevoScaleR para obtener estadísticas más detalladas sobre las
variables individuales.
rxSummary se basa en la función summary de R, pero tiene algunas características y ventajas adicionales.
rxSummary funciona en varios contextos de proceso y admite la fragmentación. También puede usarse
rxSummary para transformar valores o resumir en función de los niveles de factor.
En este ejemplo, se resume el importe de la carrera en función del número de pasajeros.

start.time <- proc.time()


rxSummary(~fare_amount:F(passenger_count,1,6), data = inDataSource)
used.time <- proc.time() - start.time
print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2)," seconds,
Elapsed Time=", round(used.time[3],2),
" seconds to summarize the inDataSource.", sep=""))

El primer argumento para rxSummary especifica la fórmula o el término que se va a usar para
resumir. Aquí se usa la función F() para convertir los valores de passenger_count en factores antes
de resumirlos. También debe especificar el valor mínimo (1) y el valor máximo (6) para la variable del
factor passenger_count.
Si no especifica las estadísticas de salida, rxSummary genera de forma predeterminada Mean, StDev,
Min, Max y el número de observaciones válidas y que faltan.
Este ejemplo también incluye algo de código para realizar un seguimiento de la hora a la que empieza
y finaliza la función, para que pueda comparar el rendimiento.
Resultados
Si la función rxSummary se ejecuta correctamente, se mostrarán resultados como estos, seguidos de una
lista de estadísticas por categoría.

rxSummary(formula = ~fare_amount:F(passenger_count, 1,6), data = inDataSource)


Data: inDataSource (RxSqlServerData Data Source)
Number of valid observations: 1000

Ejercicio adicional sobre macrodatos


Intente definir una nueva cadena de consulta con todas las filas. Se recomienda configurar un nuevo objeto de
origen de datos para este experimento. También puede intentar cambiar el parámetro rowsToRead para ver
cómo afecta al rendimiento.
bigDataQuery <- "SELECT tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance,
pickup_datetime, dropoff_datetime, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude
FROM nyctaxi_sample"

bigDataSource <- RxSqlServerData(


sqlQuery = bigDataQuery,
connectionString = connStr,
colClasses = c(pickup_longitude = "numeric", pickup_latitude = "numeric",
dropoff_longitude = "numeric", dropoff_latitude = "numeric"),
rowsPerRead=500
)

start.time <- proc.time()


rxSummary(~fare_amount:F(passenger_count,1,6), data = bigDataSource)
used.time <- proc.time() - start.time
print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2)," seconds,
Elapsed Time=", round(used.time[3],2),
" seconds to summarize the inDataSource.", sep=""))

TIP
Mientras se está ejecutando, puede usar una herramienta como el Explorador de procesos o SQL Server Profiler para ver
cómo se establece la conexión y cómo se ejecuta el código de R con los servicios de SQL Server.

Pasos siguientes
Crear gráficos y trazados con R
Crear gráficos y trazados mediante SQL y R
(tutorial)
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En esta parte del tutorial, aprenderá técnicas para generar trazados y mapas mediante R con datos de
SQL Server. Primero creará un histograma sencillo y luego desarrollará un trazado de mapa más complejo.

Requisitos previos
En este paso se da por supuesto que hay una sesión de R en curso basada en los pasos anteriores de este
tutorial. Usaremos las cadenas de conexión y los objetos de origen de datos creados en esos pasos. También
emplearemos las siguientes herramientas y paquetes para ejecutar el script.
Rgui.exe para ejecutar comandos de R
Management Studio para ejecutar T-SQL
googMap
paquete ggmap
paquete mapproj

Crear un histograma
1. Ejecute estas líneas para generar el primer trazado mediante la función rxHistogram . La función
rxHistogram ofrece funciones similares a las de los paquetes de R de código abierto, pero se puede
ejecutar en un contexto de ejecución remota.

# Plot fare amount on SQL Server and return the plot


start.time <- proc.time()
rxHistogram(~fare_amount, data = inDataSource, title = "Fare Amount Histogram")
used.time <- proc.time() - start.time
print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2), " seconds, Elapsed Time=",
round(used.time[3],2), " seconds to generate plot.", sep=""))

2. La imagen se devuelve en el dispositivo de gráficos de R para el entorno de desarrollo. Por ejemplo, en


RStudio, haga clic en la ventana Trazar . En Herramientas de R para Visual Studio, se abre una ventana de
gráficos independiente.
NOTE
¿Su gráfico tiene un aspecto diferente?
Esto se debe a que inDataSource usa solo las 1000 primeras filas. El orden de las filas cuando se usa TOP no es
determinista en ausencia de una cláusula ORDER BY, por lo que es posible que los datos y el gráfico resultante
sean distintos. Esta imagen en particular se generó con alrededor de 10 000 filas de datos. Se recomienda
experimentar con distintos números de filas para obtener distintos gráficos y observar cuánto tiempo se tarda en
devolver los resultados en su entorno.

Crear un trazado de mapa


Normalmente, los servidores de bases de datos bloquean el acceso a Internet. Esto puede ser un inconveniente
cuando se usan paquetes de R que necesitan descargar mapas u otras imágenes para generar trazados. Sin
embargo, hay una solución que puede serle útil cuando desarrolle sus propias aplicaciones. Consiste,
básicamente, en generar la representación del mapa en el cliente y, luego, superponer en el mapa los puntos
que se almacenan como atributos en la tabla de SQL Server.
1. Defina la función que crea el objeto de trazado de R. La función personalizada mapPlot crea un gráfico de
dispersión que usa los puntos de recogida de los taxis y traza el número de carreras que se inician desde
cada punto. Usa los paquetes ggplot2 y ggmap , que ya deberían estar instalados y cargados.

mapPlot <- function(inDataSource, googMap){


library(ggmap)
library(mapproj)
ds <- rxImport(inDataSource)
p <- ggmap(googMap)+
geom_point(aes(x = pickup_longitude, y =pickup_latitude ), data=ds, alpha =.5,
color="darkred", size = 1.5)
return(list(myplot=p))
}

La función mapPlot toma dos argumentos: un objeto de datos existente que se definió anteriormente
mediante RxSqlServerData, y la representación del mapa que se pasa desde el cliente.
En la línea que empieza con la variable ds, se usa rxImport para cargar datos en la memoria desde el
origen de datos creado anteriormente, inDataSource. (Ese origen de datos solo contiene 1000 filas; si
desea crear un mapa con más puntos de datos, puede sustituir un origen de datos diferente).
Siempre que use funciones de R de código abierto, hay que cargar los datos en tramas de datos en
memoria. No obstante, si llama a la función rxImport, puede ejecutar en la memoria del contexto de
proceso remoto.
2. Cambie al contexto de proceso local y cargue las bibliotecas necesarias para crear las asignaciones.

rxSetComputeContext("local")
library(ggmap)
library(mapproj)
gc <- geocode("Times Square", source = "google")
googMap <- get_googlemap(center = as.numeric(gc), zoom = 12, maptype = 'roadmap', color = 'color');

La variable gc almacena un conjunto de coordenadas para Times Square, Nueva York.


La línea que comienza con googmap genera un mapa con las coordenadas especificadas en el
centro.
3. Cambie al contexto de proceso de SQL Server y represente los resultados. Para ello, ajuste la función de
trazado en rxExec como se muestra aquí. La función rxExec forma parte del paquete RevoScaleR y
admite la ejecución de funciones arbitrarias de R en un contexto de cálculo remoto.

rxSetComputeContext(sqlcc)
myplots <- rxExec(mapPlot, inDataSource, googMap, timesToRun = 1)
plot(myplots[[1]][["myplot"]]);

Los datos de mapa de googMap se pasan como un argumento a la función ejecutada de forma
remota mapPlot. Como los mapas se generaron en el entorno local, deben pasarse a la función
para poder crear el gráfico en el contexto de SQL Server.
Cuando se ejecuta la línea que empieza con plot , los datos representados se vuelven a serializar
en el entorno local de R para que pueda verlos en el cliente de R.

NOTE
Si usa SQL Server en una máquina virtual de Azure, es posible que obtenga un error en este momento. Se
produce un error cuando la regla de firewall predeterminada en Azure bloquea el acceso a la red mediante código
R. Para saber más sobre cómo corregir este error, vea Instalación de Machine Learning (R) Services en una
máquina virtual de Azure.

4. En la siguiente imagen se muestra el trazado de salida. Las ubicaciones de recogida de taxi se agregan al
mapa como puntos rojos. La imagen podría ser diferente, en función del número de ubicaciones que
haya en el origen de datos usado.
Pasos siguientes
Crear características de datos mediante R y SQL
Creación de características de datos con R y SQL
Server (tutorial)
14/07/2021 • 9 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


La ingeniería de datos es un aspecto importante del aprendizaje automático. A menudo los datos deben
transformarse antes de poder usarlos para el modelado de predicción. Si los datos no tienen las características
que necesita, puede diseñarlos a partir de valores existentes.
Para esta tarea de modelado, en lugar de usar los valores de latitud y longitud sin procesar de la ubicación de
origen y destino, le gustaría tener la distancia en millas entre las dos ubicaciones. Para crear esta característica,
calculará la distancia directa en línea entre dos puntos mediante la fórmula Haversine.
En este paso, aprenderá dos métodos diferentes para crear una característica a partir de los datos:
Mediante el uso de una función personalizada de R
Mediante el uso de una función personalizada de T-SQL en Transact-SQL
El objetivo consiste en crear un conjunto de datos SQL Server que incluya las columnas originales más la nueva
característica numérica, direct_distance.

Requisitos previos
En este paso se da por supuesto que hay una sesión de R en curso basada en los pasos anteriores de este
tutorial. Usaremos las cadenas de conexión y los objetos de origen de datos creados en esos pasos. También
emplearemos las siguientes herramientas y paquetes para ejecutar el script.
Rgui.exe para ejecutar comandos de R
Management Studio para ejecutar T-SQL

Características con R
El lenguaje R es conocido por sus completas y variadas bibliotecas estadísticas, pero también podría necesitar
crear transformaciones de datos personalizadas.
En primer lugar, seguiremos el método que suelen emplear los usuarios de R. Obtendremos los datos en el
portátil y, después, ejecutaremos una función de R personalizada, ComputeDist, que calcula la distancia lineal
entre dos puntos especificados por los valores de latitud y longitud.
1. Recuerde que el objeto de origen de datos que creó anteriormente obtiene solo las primeras 1000 filas.
Vamos a definir una consulta que obtenga todos los datos.

bigQuery <- "SELECT tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance,


pickup_datetime, dropoff_datetime, pickup_latitude, pickup_longitude, dropoff_latitude,
dropoff_longitude FROM nyctaxi_sample";

2. Cree un objeto de origen de datos con la consulta.


featureDataSource <- RxSqlServerData(sqlQuery = bigQuery,colClasses = c(pickup_longitude = "numeric",
pickup_latitude = "numeric", dropoff_longitude = "numeric", dropoff_latitude = "numeric",
passenger_count = "numeric", trip_distance = "numeric", trip_time_in_secs = "numeric",
direct_distance = "numeric"), connectionString = connStr);

RxSqlServerData puede tomar una consulta que conste de una consulta SELECT válida,
proporcionada como argumento para el parámetro sqlQuery, o bien el nombre de un objeto de
tabla, proporcionado como parámetro table.
Si quiere realizar un muestreo de los datos de una tabla, debe usar el parámetro sqlQuery, definir
parámetros de muestreo mediante la cláusula TABLESAMPLE de T-SQL y establecer el argumento
rowBuffering en FALSE.
3. Ejecute el código siguiente para crear la función de R personalizada. ComputeDist toma dos pares de
valores de latitud y longitud y calcula la distancia lineal entre ellos, tras lo cual devuelve la distancia en
millas.

env <- new.env();


env$ComputeDist <- function(pickup_long, pickup_lat, dropoff_long, dropoff_lat){
R <- 6371/1.609344 #radius in mile
delta_lat <- dropoff_lat - pickup_lat
delta_long <- dropoff_long - pickup_long
degrees_to_radians = pi/180.0
a1 <- sin(delta_lat/2*degrees_to_radians)
a2 <- as.numeric(a1)^2
a3 <- cos(pickup_lat*degrees_to_radians)
a4 <- cos(dropoff_lat*degrees_to_radians)
a5 <- sin(delta_long/2*degrees_to_radians)
a6 <- as.numeric(a5)^2
a <- a2+a3*a4*a6
c <- 2*atan2(sqrt(a),sqrt(1-a))
d <- R*c
return (d)
}

La primera línea define un nuevo entorno. En R, se puede usar un entorno para encapsular los
espacios de nombres en paquetes y similares. Puede usar la función search() para ver los entornos
en el área de trabajo. Para ver los objetos en un entorno específico, escriba ls(<envname>) .
Las líneas que comienzan con $env.ComputeDist contienen el código que define la fórmula haversine,
que calcula la distancia del círculo máximo entre dos puntos en una esfera.
4. Después de definir la función, se aplicará a los datos para crear una nueva columna de característica,
direct_distance. Pero antes de ejecutar la transformación, cambie el contexto de cálculo a local.

rxSetComputeContext("local");

5. Llame a la función rxDataStep para obtener los datos de ingeniería de las características y aplique la
función env$ComputeDist a los datos de la memoria.
start.time <- proc.time();

changed_ds <- rxDataStep(inData = featureDataSource,


transforms = list(direct_distance=ComputeDist(pickup_longitude,pickup_latitude, dropoff_longitude,
dropoff_latitude),
tipped = "tipped", fare_amount = "fare_amount", passenger_count = "passenger_count",
trip_time_in_secs = "trip_time_in_secs", trip_distance="trip_distance",
pickup_datetime = "pickup_datetime", dropoff_datetime = "dropoff_datetime"),
transformEnvir = env,
rowsPerRead=500,
reportProgress = 3);

used.time <- proc.time() - start.time;


print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2)," seconds, Elapsed Time=",
round(used.time[3],2), " seconds to generate features.", sep=""));

La función rxDataStep admite varios métodos para modificar los datos en su lugar. Para obtener más
información, consulte el artículo sobre cómo transformar datos y crear subconjuntos de ellos en
Microsoft R.
Aun así, hay que tener en cuenta un par de cuestiones sobre rxDataStep:
En otros orígenes de datos, puede usar los argumentos varsToKeep y varsToDrop, pero no se admiten
para los orígenes de datos de SQL Server. Por lo tanto, en este ejemplo, hemos usado el argumento
transforms para especificar las columnas de paso a través y las columnas transformadas. Además,
cuando se ejecuta en un contexto de cálculo de SQL Server, el argumento inData solo puede tomar un
origen de datos de SQL Server.
El código anterior también puede generar un mensaje de advertencia cuando se ejecuta en conjuntos de
datos de mayor tamaño. Cuando el número de filas multiplicadas por el número de columnas que se
están creando supera un valor establecido (el valor predeterminado es 3 000 000), rxDataStep devuelve
una advertencia y se trunca el número de filas en la trama de datos devuelta. Para quitar la advertencia,
puede modificar el argumento maxRowsByCols en la función rxDataStep. Aun así, si maxRowsByCols es
demasiado grande, podría experimentar problemas al cargar la trama de datos en la memoria.
6. Opcionalmente, puede llamar a rxGetVarInfo para inspeccionar el esquema del origen de datos
transformado.

rxGetVarInfo(data = changed_ds);

Características con Transact-SQL


En este ejercicio, aprenderá a realizar la misma tarea con las funciones de SQL en lugar de las funciones
personalizadas de R.
Cambie a SQL Server Management Studio o a otro editor de consultas para ejecutar el script de T-SQL.
1. Use una función de SQL denominada fnCalculateDistance. La función ya debe existir en la base de datos
NYCTaxi_Sample. En Explorador de objetos, vaya a esta ruta de acceso para comprobar que la función
existe: Bases de datos > NYCTaxi_Sample > Programación > Funciones > Funciones escalares >
dbo.fnCalculateDistance.
Si la función no existe, use SQL Server Management Studio para generar la función en la base de datos
NYCTaxi_Sample.
CREATE FUNCTION [dbo].[fnCalculateDistance] (@Lat1 float, @Long1 float, @Lat2 float, @Long2 float)
-- User-defined function calculates the direct distance between two geographical coordinates.
RETURNS decimal(28, 10)
AS
BEGIN
DECLARE @distance decimal(28, 10)
-- Convert to radians
SET @Lat1 = @Lat1 / 57.2958
SET @Long1 = @Long1 / 57.2958
SET @Lat2 = @Lat2 / 57.2958
SET @Long2 = @Long2 / 57.2958
-- Calculate distance
SET @distance = (SIN(@Lat1) * SIN(@Lat2)) + (COS(@Lat1) * COS(@Lat2) * COS(@Long2 - @Long1))
--Convert to miles
IF @distance <> 0
BEGIN
SET @distance = 3958.75 * ATAN(SQRT(1 - POWER(@distance, 2)) / @distance);
END
RETURN @distance
END

2. En Management Studio, en una nueva ventana de consulta, ejecute la siguiente instrucción Transact-SQL
desde cualquier aplicación que admita Transact-SQL para ver cómo actúa la función.

USE nyctaxi_sample
GO

SELECT tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance, pickup_datetime,


dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as
direct_distance, pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude
FROM nyctaxi_sample

3. Para insertar valores directamente en una nueva tabla (debe crearla primero), puede agregar una
cláusula INTO que especifique el nombre de la tabla.

USE nyctaxi_sample
GO

SELECT tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, pickup_datetime,


dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as
direct_distance, pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude
INTO NewFeatureTable
FROM nyctaxi_sample

4. También puede llamar a la función SQL desde código de R. Vuelva a Rgui y almacene la consulta de
características SQL en una variable de R.

featureEngineeringQuery = "SELECT tipped, fare_amount, passenger_count,


trip_time_in_secs,trip_distance, pickup_datetime, dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude)
as direct_distance,
pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude
FROM nyctaxi_sample
tablesample (1 percent) repeatable (98052)"
TIP
Esta consulta se ha modificado para obtener una muestra más pequeña de los datos, con el fin de agilizar este
tutorial. Puede quitar la cláusula TABLESAMPLE si quiere obtener todos los datos, pero es posible que, en función
de su entorno, no sea posible cargar el conjunto de datos completo en R, lo que producirá un error.

5. Use las siguientes líneas de código para llamar a la función de Transact-SQL desde su entorno de R y
aplicarla a los datos definidos en featureEngineeringQuery.

featureDataSource = RxSqlServerData(sqlQuery = featureEngineeringQuery,


colClasses = c(pickup_longitude = "numeric", pickup_latitude = "numeric",
dropoff_longitude = "numeric", dropoff_latitude = "numeric",
passenger_count = "numeric", trip_distance = "numeric",
trip_time_in_secs = "numeric", direct_distance = "numeric"),
connectionString = connStr)

6. Ahora que se ha creado la característica, llame a r xGetVarsInfo para crear un resumen de los datos de la
tabla de características.

rxGetVarInfo(data = featureDataSource)

Resultados

Var 1: tipped, Type: integer


Var 2: fare_amount, Type: numeric
Var 3: passenger_count, Type: numeric
Var 4: trip_time_in_secs, Type: numeric
Var 5: trip_distance, Type: numeric
Var 6: pickup_datetime, Type: character
Var 7: dropoff_datetime, Type: character
Var 8: direct_distance, Type: numeric
Var 9: pickup_latitude, Type: numeric
Var 10: pickup_longitude, Type: numeric
Var 11: dropoff_latitude, Type: numeric
Var 12: dropoff_longitude, Type: numeric

NOTE
En algunos casos, podría recibir un error similar al siguiente: Se denegó el permiso EXECUTE en el objeto
"fnCalculateDistance" . Si es así, asegúrese de que el inicio de sesión que usa tiene permisos para ejecutar scripts y
crear objetos en la base de datos, no solo en la instancia. Compruebe el esquema del objeto, fnCalculateDistance.
Si el objeto lo creó el propietario de la base de datos y el inicio de sesión pertenece al rol db_datareader, debe
conceder al inicio de sesión permisos explícitos para ejecutar el script.

Comparación de funciones de R y de SQL


¿Recuerda este fragmento de código que usamos para controlar el tiempo del código de R?

start.time <- proc.time()


<your code here>
used.time <- proc.time() - start.time
print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2)," seconds, Elapsed Time=",
round(used.time[3],2), " seconds to generate features.", sep=""))
Puede probar a usarlo con el ejemplo de la función personalizada de SQL para ver cuánto tiempo tarda la
transformación de datos al llamar a una función de SQL. Pruebe también a cambiar los contextos de cálculo con
rxSetComputeContext y compare los valores de tiempo.
Estos valores pueden variar considerablemente, en función de la velocidad de la red y de la configuración del
hardware. En las configuraciones que hemos probado, el enfoque de la función Transact-SQL era más rápido
que usar una función personalizada de R. Por lo tanto, en los pasos siguientes usaremos la función Transact-SQL
para estos cálculos.

TIP
A menudo, la ingeniería de características con Transact-SQL es más rápida que R. Por ejemplo, T-SQL incluye funciones
rápidas de ventana y categoría que se pueden aplicar a cálculos comunes de la ciencia de datos, como aplicar medias
móviles y n-tiles. Elija el método más eficaz en función de los datos y la tarea.

Pasos siguientes
Compilar un modelo de R y guardarlo en SQL
Compilación de un modelo de R y almacenamiento
en SQL Server (tutorial)
14/07/2021 • 7 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En este paso, aprenderá a generar un modelo de Machine Learning y a guardarlo en SQL Server. Cuando un
modelo se guarda, se puede llamar directamente a él desde código de Transact-SQL mediante el procedimiento
almacenado del sistema, sp_execute_external_script, o la función PREDICT (T-SQL).

Prerrequisitos
En este paso se da por supuesto que hay una sesión de R en curso basada en los pasos anteriores de este
tutorial. Usaremos las cadenas de conexión y los objetos de origen de datos creados en esos pasos. También
emplearemos las siguientes herramientas y paquetes para ejecutar el script.
Rgui.exe para ejecutar comandos de R
Management Studio para ejecutar T-SQL
Paquete ROCR
Paquete RODBC
Creación de un procedimiento almacenado para guardar modelos
En este paso se usa un procedimiento almacenado para guardar un modelo entrenado en SQL Server. La tarea
será más sencilla si se crea un procedimiento almacenado para realizar esta operación.
Ejecute el siguiente código de T-SQL en una ventana de consulta de Management Studio para crear el
procedimiento almacenado.

USE [NYCTaxi_Sample]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'PersistModel')
DROP PROCEDURE PersistModel
GO

CREATE PROCEDURE [dbo].[PersistModel] @m nvarchar(max)


AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
insert into nyc_taxi_models (model) values (convert(varbinary(max),@m,2))
END
GO
NOTE
Si recibe un error, asegúrese de que su inicio de sesión tiene permiso para crear objetos. Para conceder permisos explícitos
para crear objetos, ejecute una instrucción T-SQL como esta: exec sp_addrolemember 'db_owner', '<user_name>' .

Creación de un modelo de clasificación mediante rxLogit


El modelo es un clasificador binario que predice si es probable que el taxista obtenga una propina en un
trayecto determinado. Usará el origen de datos que creó en la lección anterior para entrenar el clasificador de
propinas mediante la regresión logística.
1. Llame a la función rxLogit , incluida en el paquete RevoScaleR , para crear un modelo de regresión
logística.

system.time(logitObj <- rxLogit(tipped ~ passenger_count + trip_distance + trip_time_in_secs +


direct_distance, data = featureDataSource));

La llamada que compila el modelo está incluida en la función system.time. Esto le permite disponer del
tiempo necesario para compilar el modelo.
2. Después de generar el modelo, se puede inspeccionar con la función summary y ver los coeficientes.

summary(logitObj);

Resultados

*Logistic Regression Results for: tipped ~ passenger_count + trip_distance + trip_time_in_secs +*


direct_distance*
*Data: featureDataSource (RxSqlServerData Data Source)*
*Dependent variable(s): tipped*
*Total independent variables: 5*
*Number of valid observations: 17068*
*Number of missing observations: 0*
*-2\*LogLikelihood: 23540.0602 (Residual deviance on 17063 degrees of freedom)*
*Coefficients:*
*Estimate Std. Error z value Pr(>|z|)*
*(Intercept) -2.509e-03 3.223e-02 -0.078 0.93793*
*passenger_count -5.753e-02 1.088e-02 -5.289 1.23e-07 \*\*\**
*trip_distance -3.896e-02 1.466e-02 -2.658 0.00786 \*\**
*trip_time_in_secs 2.115e-04 4.336e-05 4.878 1.07e-06 \*\*\**
*direct_distance 6.156e-02 2.076e-02 2.966 0.00302 \*\**
*---*
*Signif. codes: 0 ‘\*\*\*’ 0.001 ‘\*\*’ 0.01 ‘\*’ 0.05 ‘.’ 0.1 ‘ ’ 1*
*Condition number of final variance-covariance matrix: 48.3933*
*Number of iterations: 4*

Usar el modelo de regresión logística para la puntuación


Ahora que ha generado el modelo, puede usarlo para predecir si es probable que el taxista obtenga una propina
en un viaje determinado.
1. Primero, use la función RxSqlServerData para definir un objeto de origen de datos donde almacenar el
resultado de la puntuación.
scoredOutput <- RxSqlServerData(
connectionString = connStr,
table = "taxiScoreOutput" )

Para simplificar este ejemplo, la entrada en el modelo de regresión logística es el mismo origen de
datos de características ( sql_feature_ds ) que usó para entrenar el modelo. La mayoría de las
veces tendrá datos nuevos con los que puntuar, o podría haber reservado algunos datos para
realizar las pruebas y no el entrenamiento.
Los resultados de predicción se guardarán en la tabla taxiscoreOutput. Tenga en cuenta que el
esquema de esta tabla no está definido cuando se crea mediante rxSqlServerData. Dicho esquema
se obtiene de la salida de rxPredict.
Para crear la tabla que almacena los valores predichos, el inicio de sesión de SQL que ejecuta la
función de datos rxSqlServer debe tener privilegios DDL en la base de datos. Si el inicio de sesión
no puede crear tablas, se producirá un error en la instrucción.
2. Llame a la función rxPredict para generar resultados.

rxPredict(modelObject = logitObj,
data = featureDataSource,
outData = scoredOutput,
predVarNames = "Score",
type = "response",
writeModelVars = TRUE, overwrite = TRUE)

Si la instrucción se ejecuta correctamente, debe tardar algo de tiempo en ejecutarse. Cuando finalice,
puede abrir SQL Server Management Studio y comprobar que la tabla se ha creado y que contiene la
columna de puntuación (Score) y otra salida prevista.

Trazado de la precisión del modelo


Para hacerse una idea de la precisión del modelo, puede usar la función rxRoc para trazar la curva de
funcionamiento del receptor. Dado que rxRoc es una de las nuevas funciones proporcionadas por el paquete
RevoScaleR que es compatible con contextos de proceso remoto, tiene dos opciones:
Puede usar la función rxRoc para ejecutar el trazado en el contexto del equipo remoto y, después,
devolver el trazado al cliente local.
También puede importar los datos en el equipo cliente de R y usar otras funciones de trazado de R para
crear el gráfico de rendimiento.
En esta sección, experimentará con ambas técnicas.
Ejecutar un trazado en el contexto de cálculo remoto (SQL Server)
1. Llame a la función rxRoc y facilite los datos definidos anteriormente como entrada.

scoredOutput = rxImport(scoredOutput);
rxRoc(actualVarName= "tipped", predVarNames = "Score", scoredOutput);

Esta llamada devuelve los valores usados para calcular el gráfico de ROC. La columna de etiqueta es
tipped, que contiene los resultados reales que está intentando predecir, mientras que la columna Score
contiene la predicción.
2. Para trazar el gráfico de facto, puede guardar el objeto ROC y, después, dibujarlo con la función de
trazado. El gráfico se crea en el contexto de cálculo remoto y luego se devuelve al entorno de R.
scoredOutput = rxImport(scoredOutput);
rocObjectOut <- rxRoc(actualVarName= "tipped", predVarNames = "Score", scoredOutput);
plot(rocObjectOut);

Para verlo, abra el dispositivo de gráficos de R o haga clic en la ventana Trazar en RStudio.

Crear los trazados en el contexto de cálculo local con datos de SQL Server
Para comprobar que el contexto de cálculo es local, ejecute rxGetComputeContext() en el símbolo del sistema. El
valor devuelto debe ser "RxLocalSeq Compute Context".
1. En el contexto de cálculo local, el proceso es prácticamente el mismo. Para incluir los datos especificados
del entorno local de R se usa la función rxImport.

scoredOutput = rxImport(scoredOutput)

2. Usando los datos de la memoria local, hay que cargar el paquete ROCR y usar la función de predicción
de ese paquete para crear algunas predicciones nuevas.

library('ROCR');
pred <- prediction(scoredOutput$Score, scoredOutput$tipped);

3. Genere un trazado local según los valores almacenados en la variable de salida pred .
acc.perf = performance(pred, measure = 'acc');
plot(acc.perf);
ind = which.max( slot(acc.perf, 'y.values')[[1]] );
acc = slot(acc.perf, 'y.values')[[1]][ind];
cutoff = slot(acc.perf, 'x.values')[[1]][ind];

NOTE
Sus gráficos pueden tener un aspecto diferente al de estos, dependiendo de cuántos puntos de datos haya usado.

Implementación del modelo


Después de haber creado un modelo y de asegurarse de que funciona bien, lo más probable es que quiera
implementarlo en un sitio en el que los usuarios o las personas de la organización puedan usarlo o, quizás,
volver a entrenarlo y recalibrarlo de forma periódica. Este proceso se denomina a veces operacionalizar un
modelo. En SQL Server, la operacionalización se logra al insertar código de R en un procedimiento almacenado.
Como el código reside en el procedimiento, se puede llamar desde cualquier aplicación que pueda conectarse a
SQL Server.
Antes de llamar al modelo desde una aplicación externa, debe guardarlo en la base de datos que se usa en
producción. Los modelos entrenados se almacenan en formato binario, en una sola columna de tipo
varbinar y(max) .
Un flujo de trabajo de implementación típico consta de los siguientes pasos:
1. Serializar el modelo en una cadena hexadecimal
2. Transmitir el objeto serializado a la base de datos
3. Guardar el modelo en una columna varbinary(max)
En esta sección, aprenderá a usar un procedimiento almacenado para conservar el modelo y hacer que esté
disponible para las predicciones. El procedimiento almacenado que se usa en esta sección es PersistModel. La
definición de PersistModel se encuentra en los requisitos previos.
1. Cambie al entorno local de R si aún no lo está usando, serialice el modelo y guárdelo en una variable.

rxSetComputeContext("local");
modelbin <- serialize(logitObj, NULL);
modelbinstr=paste(modelbin, collapse="");

2. Abra una conexión ODBC con RODBC . La llamada a RODBC se puede omitir si ya tiene el paquete
cargado.

library(RODBC);
conn <- odbcDriverConnect(connStr);

3. Llame al procedimiento almacenado PersistModel en SQL Server para transmitir el objeto serializado a la
base de datos y almacenar la representación binaria del modelo en una columna.

q <- paste("EXEC PersistModel @m='", modelbinstr,"'", sep="");


sqlQuery (conn, q);

4. Use Management Studio para confirmar que el modelo existe. En el Explorador de objetos, haga clic con
el botón derecho en la tabla nyc_taxi_models y haga clic en Seleccionar las primeras 1000 filas . En
Resultados, debería ver una representación binaria en la columna models .
Para guardar un modelo en una tabla, solo hace falta una instrucción INSERT. Con todo, esto a menudo resulta
más fácil cuando se incluyen en un procedimiento almacenado, como PersistModel.

Pasos siguientes
En la siguiente (y última) lección, aprenderá a realizar la puntuación en el modelo guardado con Transact-SQL.
Implementación del modelo de R y uso en SQL
Implementación del modelo de R y su uso en
SQL Server (tutorial)
14/07/2021 • 6 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En esta lección, aprenderá a implementar modelos de R en un entorno de producción mediante una llamada a
un modelo entrenado desde un procedimiento almacenado. Puede invocar el procedimiento almacenado de R o
de cualquier lenguaje de programación de aplicaciones compatible con Transact-SQL (como C#, Java, Python,
etc.) y usar el modelo para realizar predicciones a partir de observaciones nuevas.
En este artículo se muestran las dos formas más habituales de usar un modelo en la puntuación:
El modo de puntuación por lotes genera varias predicciones.
El modo de puntuación individual genera predicciones de una en una.

Puntuación por lotes


Cree un procedimiento almacenado, PredictTipBatchMode, que genere varias predicciones, pasando una
consulta o tabla SQL como entrada. Se devuelve una tabla de resultados, que puede insertar directamente en
una tabla o escribir en un archivo.
Obtiene un conjunto de datos de entrada como una consulta SQL
Llama al modelo de regresión logística entrenado que ha guardado en la lección anterior
Predice la probabilidad de que el conductor reciba una propina
1. En Management Studio, abra una nueva ventana de consulta y ejecute el siguiente script de T-SQL para
crear el procedimiento almacenado PredictTipBatchMode.
USE [NYCTaxi_Sample]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'PredictTipBatchMode')
DROP PROCEDURE v
GO

CREATE PROCEDURE [dbo].[PredictTipBatchMode] @input nvarchar(max)


AS
BEGIN
DECLARE @lmodel2 varbinary(max) = (SELECT TOP 1 model FROM nyc_taxi_models);
EXEC sp_execute_external_script @language = N'R',
@script = N'
mod <- unserialize(as.raw(model));
print(summary(mod))
OutputDataSet<-rxPredict(modelObject = mod,
data = InputDataSet,
outData = NULL,
predVarNames = "Score", type = "response",
writeModelVars = FALSE, overwrite = TRUE);
str(OutputDataSet)
print(OutputDataSet)',
@input_data_1 = @input,
@params = N'@model varbinary(max)',
@model = @lmodel2
WITH RESULT SETS ((Score float));
END

Use una instrucción SELECT para llamar al modelo almacenado desde una tabla SQL. El modelo se
recupera de la tabla como datos varbinar y(max) , se almacena en la variable SQL @lmodel2 y se
pasa como parámetro mod al procedimiento almacenado del sistema sp_execute_external_script.
Los datos que se usan como entradas de la puntuación se definen como una consulta SQL y se
almacenan como una cadena en la variable SQL @input. A medida que se recuperan datos de la
base de datos, se van almacenando en una trama de datos llamada InputDataSet, que es
sencillamente el nombre predeterminado de los datos de entrada en el procedimiento
sp_execute_external_script. Si lo necesita, puede establecer otro nombre de variable con el
parámetro @input_data_1_name.
Para generar las puntuaciones, el procedimiento almacenado llama a la función rxPredict de la
biblioteca RevoScaleR .
El valor devuelto, Score, es la probabilidad de que el conductor reciba una propina, según el
modelo. De manera opcional, podría aplicar fácilmente algún tipo de filtro a los valores devueltos
para clasificarlos en grupos tipo "propina" o "sin propina". Por ejemplo, una probabilidad menor
que 0,5 significaría que no es probable que reciba una propina.
2. Para llamar al procedimiento almacenado en el modo por lotes, se define la consulta requerida como
entrada del procedimiento almacenado. La siguiente es la consulta SQL que se puede ejecutar en SSMS
para comprobar que esto funciona.
SELECT TOP 10
a.passenger_count AS passenger_count,
a.trip_time_in_secs AS trip_time_in_secs,
a.trip_distance AS trip_distance,
a.dropoff_datetime AS dropoff_datetime,
dbo.fnCalculateDistance( pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) AS
direct_distance
FROM
(SELECT medallion, hack_license, pickup_datetime,
passenger_count,trip_time_in_secs,trip_distance, dropoff_datetime, pickup_latitude, pickup_longitude,
dropoff_latitude, dropoff_longitude
FROM nyctaxi_sample)a
LEFT OUTER JOIN
( SELECT medallion, hack_license, pickup_datetime
FROM nyctaxi_sample tablesample (1 percent) repeatable (98052) )b
ON a.medallion=b.medallion
AND a.hack_license=b.hack_license
AND a.pickup_datetime=b.pickup_datetime
WHERE b.medallion is null

3. Use este código de R para crear la cadena de entrada a partir de la consulta SQL:

input <- "N'SELECT TOP 10 a.passenger_count AS passenger_count, a.trip_time_in_secs AS


trip_time_in_secs, a.trip_distance AS trip_distance, a.dropoff_datetime AS dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) AS
direct_distance FROM (SELECT medallion, hack_license, pickup_datetime,
passenger_count,trip_time_in_secs,trip_distance, dropoff_datetime, pickup_latitude, pickup_longitude,
dropoff_latitude, dropoff_longitude FROM nyctaxi_sample)a LEFT OUTER JOIN ( SELECT medallion,
hack_license, pickup_datetime FROM nyctaxi_sample tablesample (1 percent) repeatable (98052) )b ON
a.medallion=b.medallion AND a.hack_license=b.hack_license AND a.pickup_datetime=b.pickup_datetime
WHERE b.medallion is null'";
q <- paste("EXEC PredictTipBatchMode @input = ", input, sep="");

4. Para ejecutar el procedimiento almacenado desde R, llame al método sqlQuer y del paquete RODBC y
use la conexión SQL conn de que definió anteriormente:

sqlQuery (conn, q);

Si obtiene un error de ODBC, compruebe si hay errores de sintaxis y si el número de comillas es el


adecuado.
Si obtiene un error de permisos, asegúrese de que el inicio de sesión tiene capacidad para ejecutar el
procedimiento almacenado.

Puntuación de fila única


El modo de puntuación individual genera predicciones de una en una, pasando un conjunto de valores
individuales al procedimiento almacenado como entrada. Los valores se corresponden con las características del
modelo, que el modelo usa para crear una predicción, o para generar otro resultado, como un valor de
probabilidad. Tras ello, puede devolver ese valor a la aplicación o al usuario.
Cuando se llama al modelo para la predicción por filas, se pasa un conjunto de valores que representan las
características de cada caso individual. Después, el procedimiento almacenado devuelve una sola predicción o
probabilidad.
El procedimiento almacenado PredictTipSingleMode muestra este método. Toma como entrada varios
parámetros que representan valores de características (por ejemplo, el número de pasajeros y la distancia del
recorrido), puntúa estas características con el modelo de R almacenado y genera como salida la probabilidad de
recibir propina.
1. Ejecute la siguiente instrucción de Transact-SQL para crear el procedimiento almacenado.

USE [NYCTaxi_Sample]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'PredictTipSingleMode')
DROP PROCEDURE v
GO

CREATE PROCEDURE [dbo].[PredictTipSingleMode] @passenger_count int = 0,


@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0
AS
BEGIN
DECLARE @inquery nvarchar(max) = N'
SELECT * FROM [dbo].[fnEngineerFeatures](@passenger_count, @trip_distance, @trip_time_in_secs,
@pickup_latitude, @pickup_longitude, @dropoff_latitude, @dropoff_longitude)'
DECLARE @lmodel2 varbinary(max) = (SELECT TOP 1 model FROM nyc_taxi_models);

EXEC sp_execute_external_script @language = N'R', @script = N'


mod <- unserialize(as.raw(model));
print(summary(mod))
OutputDataSet<-rxPredict(
modelObject = mod,
data = InputDataSet,
outData = NULL,
predVarNames = "Score",
type = "response",
writeModelVars = FALSE,
overwrite = TRUE);
str(OutputDataSet)
print(OutputDataSet)
',
@input_data_1 = @inquery,
@params = N'
-- passthrough columns
@model varbinary(max) ,
@passenger_count int ,
@trip_distance float ,
@trip_time_in_secs int ,
@pickup_latitude float ,
@pickup_longitude float ,
@dropoff_latitude float ,
@dropoff_longitude float',
-- mapped variables
@model = @lmodel2 ,
@passenger_count =@passenger_count ,
@trip_distance=@trip_distance ,
@trip_time_in_secs=@trip_time_in_secs ,
@pickup_latitude=@pickup_latitude ,
@pickup_longitude=@pickup_longitude ,
@dropoff_latitude=@dropoff_latitude ,
@dropoff_longitude=@dropoff_longitude
WITH RESULT SETS ((Score float));
END
2. En SQL Server Management Studio, pude usar el procedimiento de Transact-SQL EXEC (o EXECUTE )
para llamar al procedimiento almacenado y pasar las entradas necesarias. Pruebe a ejecutar, por ejemplo,
esta instrucción en Management Studio:

EXEC [dbo].[PredictTipSingleMode] 1, 2.5, 631, 40.763958,-73.973373, 40.782139,-73.977303

Los valores pasados aquí se corresponden, respectivamente, con las variables passenger_count,
trip_distance, trip_time_in_secs, pickup_latitude, pickup_longitude, dropoff_latitude y dropoff_longitude.
3. Para ejecutar esta misma llamada desde código R, basta con definir una variable de R que contenga toda
la llamada al procedimiento almacenado, como el siguiente:

q2 = "EXEC PredictTipSingleMode 1, 2.5, 631, 40.763958,-73.973373, 40.782139,-73.977303 ";

Los valores pasados aquí se corresponden, respectivamente, con las variables passenger_count,
trip_distance, trip_time_in_secs, pickup_latitude, pickup_longitude, dropoff_latitude y dropoff_longitude.
4. Llame a sqlQuery (desde el paquete RODBC ) y pase la cadena de conexión, así como la variable de
cadena que contiene la llamada al procedimiento almacenado.

# predict with stored procedure in single mode


sqlQuery (conn, q2);

TIP
Herramientas de R para Visual Studio (RTVS) se integra tremendamente bien con SQL Server y con R. Vea este
artículo para obtener más ejemplos del uso de RODBC con una conexión de SQL Server: Trabajar con SQL Server
y R.

Pasos siguientes
Ahora que ha aprendido a trabajar con datos de SQL Server y a conservar modelos entrenados de R en SQL
Server, debería serle relativamente fácil crear modelos basados en este conjunto de datos. Por ejemplo, podría
intentar crear estos otros modelos:
Un modelo de regresión que predice la cantidad de propina
Un modelo de clasificación de varias clases que predice si la propina es pequeña, mediana o grande
Puede que también le interese explorar estos otros ejemplos y recursos:
Escenarios de ciencia de datos y plantillas de soluciones
Análisis avanzado en base de datos
Tutorial: Uso de funciones RevoScaleR R con datos
de SQL Server
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En esta serie de tutoriales de varias partes, conocerá una serie de funciones RevoScaleR para tareas asociadas
a la ciencia de datos. En el proceso, aprenderá a crear un contexto de proceso remoto, trasladar datos entre
contextos de proceso locales y remotos, y ejecutar código R en un servidor SQL Server remoto. También
aprenderá a analizar y trazar datos tanto a nivel local como en el servidor remoto, y a crear e implementar
modelos.
RevoScaleR es un paquete de Microsoft R que proporciona procesamiento paralelo y distribuido para cargas de
trabajo de ciencia de datos y aprendizaje automático. Para el desarrollo de R en SQL Server, RevoScaleR es uno
de los paquetes integrados principales, con funciones para crear objetos de origen de datos, establecer un
contexto de proceso, administrar paquetes y, lo que es más importante, trabajar con datos de un extremo a otro,
desde la importación hasta la visualización y el análisis. Los algoritmos de aprendizaje automático en
SQL Server tienen una dependencia en orígenes de datos de RevoScaleR . Dada la importancia de
RevoScaleR , es fundamental saber cuándo y cómo llamar a sus funciones.

Prerrequisitos
SQL Server Machine Learning Services con la función R o SQL Server R Services (en la base de datos)
Permisos de base de datos y un inicio de sesión de usuario de base de datos de SQL Server
SQL Server Management Studio
Un IDE como RStudio o la herramienta de RGUI integrada incluida con R
Para alternar entre los contextos de proceso locales y remotos, se necesitan dos sistemas. El contexto local suele
ser una estación de trabajo de desarrollo con capacidad suficiente para cargas de trabajo de ciencia de datos. El
contexto remoto, en este caso, es un servidor SQL Server con la característica R habilitada.
El cambio de los contextos de proceso se basa en tener la misma versión de RevoScaleR en los sistemas locales
y remotos. En una estación de trabajo local, puede obtener los paquetes de RevoScaleR y los proveedores
relacionados si instala Microsoft R Client.
Si necesita colocar el cliente y el servidor en el mismo equipo, asegúrese de instalar un segundo conjunto de
bibliotecas de Microsoft R para enviar scripts de R desde un cliente "remoto". No use las bibliotecas de R que
están instaladas en los archivos de programa de la instancia de SQL Server. Concretamente, si usa un equipo,
necesita tener la biblioteca RevoScaleR en ambas ubicaciones para admitir las operaciones de cliente y de
servidor.
C:\Archivos de programa\Microsoft\R Client\R_SERVER\library\RevoScaleR
C:\Archivos de programa\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR
Para obtener instrucciones sobre la configuración de cliente, vea Configuración de un cliente de ciencia de datos
para el desarrollo en R.

Herramientas de desarrollo en R
Los desarrolladores de R suelen usar varios IDE para escribir y depurar código de R. Estas son algunas
sugerencias:
Herramientas de R para Visual Studio (RTVS) es un complemento gratuito que proporciona
IntelliSense, depuración y compatibilidad con Microsoft R. Puede usarse con SQL Server Machine
Learning Services. Para descargarlo, consulte la página sobre Herramientas de R para Visual Studio.
RStudio es uno de los entornos de desarrollo de R más populares. Para más información, consulte
https://www.rstudio.com/products/RStudio/.
Las herramientas básicas de R (R.exe, RTerm.exe, RScripts.exe) también se instalan de forma
predeterminada al instalar R en SQL Server o en el cliente de R. Si no quiere instalar un IDE, puede usar
las herramientas de R integradas para ejecutar el código de este tutorial.
Recuerde que RevoScaleR es necesario en el equipo local y en el remoto. No puede completar este tutorial con
una instalación genérica de RStudio u otro entorno que no tenga las bibliotecas de Microsoft R. Para obtener
más información, consulte Configurar un cliente de ciencia de datos.

Resumen de tareas
Los datos se han obtenido inicialmente de archivos CSV o archivos XDF. Ahora tiene que importar los datos
en SQL Server usando las funciones del paquete RevoScaleR .
El entrenamiento de modelos y la puntuación se realiza en el contexto de proceso de SQL Server.
Use las funciones de RevoScaleR para crear nuevas tablas de SQL Server para guardar los resultados de
puntuación.
Cree trazados tanto en el servidor como en el contexto de proceso local.
Entrene un modelo con los datos de la base de datos SQL Server, ejecutando R en la instancia de SQL Server.
Extraiga un subconjunto de datos y guárdelos como un archivo XDF para volver a usarlos en el análisis en la
estación de trabajo local.
Para obtener datos nuevos para la puntuación, abra una conexión ODBC con la base de datos SQL Server. La
puntuación se realiza en la estación de trabajo local.
Cree una función personalizada de R y ejecútela en el contexto de proceso del servidor para realizar una
simulación.

Pasos siguientes
Tutorial 1: Creación de bases de datos y permisos
Creación de una base de datos y permisos (tutorial
de SQL Server y RevoScaleR)
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 1 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial se describe cómo crear una base de datos de SQL Server y cómo establecer los permisos
necesarios para completar los demás tutoriales de esta serie. Use SQL Server Management Studio u otro editor
de consultas para completar las tareas siguientes:
Crear una base de datos para almacenar los datos destinados a entrenar y puntuar dos modelos de R
Crear un inicio de sesión de usuario de base de datos con permisos para crear y usar objetos de base de
datos

Creación de la base de datos


Para este tutorial, se necesita una base de datos en la que se almacenen los datos y el código. Si no es
administrador, pida a su DBA que cree la base de datos y que inicie su sesión automáticamente. Necesitará
permisos para escribir y leer datos, así como para ejecutar scripts de R.
1. En SQL Server Management Studio, conéctese a una instancia de base de datos habilitada para R.
2. Haga clic con el botón derecho en Bases de datos y seleccione Nueva base de datos .
3. Escriba un nombre para la nueva base de datos: RevoDeepDive.

Creación de un inicio de sesión


1. Haga clic en Nueva consulta y cambie el contexto de la base de datos a la base de datos maestra.
2. En la ventana Nueva consulta , ejecute los comandos siguientes para crear las cuentas de usuario y
asignarlas a la base de datos usada en este tutorial. Asegúrese de cambiar el nombre de la base de datos
si es necesario.
3. Para verificar el inicio de sesión, seleccione la nueva base de datos, expanda Seguridad y expanda
Usuarios .
usuario de Windows

-- Create server user based on Windows account


USE master
GO
CREATE LOGIN [<DOMAIN>\<user_name>] FROM WINDOWS WITH DEFAULT_DATABASE=[RevoDeepDive]

--Add the new user to tutorial database


USE [RevoDeepDive]
GO
CREATE USER [<user_name>] FOR LOGIN [<DOMAIN>\<user_name>] WITH DEFAULT_SCHEMA=[db_datareader]

Inicio de sesión de SQL


-- Create new SQL login
USE master
GO
CREATE LOGIN [DDUser01] WITH PASSWORD='<type password here>', CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;

-- Add the new SQL login to tutorial database


USE RevoDeepDive
GO
CREATE USER [DDUser01] FOR LOGIN [DDUser01] WITH DEFAULT_SCHEMA=[db_datareader]

Asignación de permisos
En este tutorial se muestran las operaciones de DDL y scripts de R, incluida la creación y la eliminación de tablas
y procedimientos almacenados, así como la ejecución de scripts de R en un proceso externo en SQL Server. En
este paso, asigne permisos para permitir estas tareas.
En este ejemplo se da por supuesto un inicio de sesión de SQL (DDUser01), pero si creó un inicio de sesión de
Windows, úselo en su lugar.

USE RevoDeepDive
GO

EXEC sp_addrolemember 'db_owner', 'DDUser01'


GRANT EXECUTE ANY EXTERNAL SCRIPT TO DDUser01
GO

Solución de problemas de conexiones


En esta sección se enumeran algunos problemas comunes que podrían surgir durante la configuración de la
base de datos.
¿Cómo puedo confirmar la conectividad de la base de datos y comprobar consultas de SQL?
Antes de ejecutar código de R con el servidor, quizás le interese comprobar que se puede tener acceso a
la base de datos desde el entorno de desarrollo de R. Tanto Explorador de servidores en Visual Studio
como SQL Server Management Studio son herramientas gratuitas con características eficaces de
administración y conectividad de base de datos.
Si no quiere instalar herramientas adicionales de administración de bases de datos, puede crear una
conexión de prueba a la instancia de SQL Server mediante el Administrador de orígenes de datos ODBC
en el Panel de control. Si la base de datos está configurada correctamente y escribe el nombre de usuario
y la contraseña correctos, verá la base de datos que acaba de crear y podrá seleccionarla como la base de
datos predeterminada.
Algunos de los motivos comunes de los errores de conexión pueden ser que la conexión remota no esté
habilitada para el servidor y que el protocolo de canalizaciones con nombre no esté habilitado.
Encontrará más sugerencias para la solución de problemas en este artículo: Solucionar problemas de
conexión al motor de base de datos de SQL Server.
¿Por qué el nombre de la tabla tiene como prefijo "datareader"?
Cuando se especifica el esquema predeterminado para este usuario como db_datareader , todas las
tablas y los objetos que este usuario cree tendrán como prefijo este esquema. Un esquema es como una
carpeta que puede agregar a una base de datos para organizar objetos. El esquema también define los
privilegios de un usuario en la base de datos.
Cuando el esquema se asocia con un nombre de usuario determinado, el usuario es el propietario del
esquema. Cuando crea un objeto, siempre lo crea en su propio esquema, a menos que solicite
específicamente que se cree en otro esquema.
Por ejemplo, si crea una tabla denominada TestData y el esquema predeterminado es db_datareader ,
la tabla se creará con el nombre <database_name>.db_datareader.TestData .
Por esta razón, una base de datos puede contener varias tablas con el mismo nombre, siempre y cuando
las tablas pertenezcan a esquemas diferentes.
Si busca una tabla y no especifica un esquema, el servidor de bases de datos buscará un esquema de su
propiedad. Por lo tanto, no hace falta que especifique el nombre de esquema al tener acceso a tablas en
un esquema asociado a su inicio de sesión.
No tengo privilegios DDL. ¿Puedo ejecutar el tutorial igualmente?
Sí, pero debe pedirle a alguien que cargue previamente los datos en las tablas de SQL Server y vaya
directamente al tutorial siguiente. Siempre que sea posible, las funciones que requieren privilegios DDL
estarán indicadas en el tutorial.
Además, pida a su administrador que le conceda el permiso EXECUTE ANY EXTERNAL SCRIPT. Se necesita
para la ejecución del script de R, ya sea remota o mediante sp_execute_external_script .

Pasos siguientes
Crear objetos de datos de SQL Server mediante RxSqlServerData
Creación de objetos de datos de SQL Server con
RxSqlServerData (tutorial de SQL Server y
RevoScaleR)
14/07/2021 • 7 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 2 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
Este tutorial es una continuación de la creación de bases de datos: agregar tablas y cargar datos. Si un
administrador de base de datos (DBA) ha creado la base de datos e inicia sesión en el tutorial dos, puede
agregar tablas mediante un IDE de R como RStudio o una herramienta integrada como Rgui .
Desde R, conéctese a SQL Server y use las funciones de RevoScaleR para realizar las tareas siguientes:
Creación de tablas para los datos de entrenamiento y las predicciones
Carga de tablas con datos de un archivo .csv local
Los datos de ejemplo son datos simulados de fraude de tarjetas de crédito (el conjunto de datos ccFraud),
particionados en conjuntos de datos de entrenamiento y puntuación. El archivo de datos se incluye en
RevoScaleR .
Use un IDE de R o Rgui para completar estas tareas. Asegúrese de usar los ejecutables de R que se encuentran
en esta ubicación: C:\Archivos de programa\Microsoft\R Client\R_SERVER\bin\x64 (Rgui.exe si usa esa
herramienta o un IDE de R que apunte a C:\Archivos de programa\Microsoft\R Client\R_SERVER). Disponer de
una estación de trabajo de cliente de R con estos ejecutables se considera un requisito previo de este tutorial.

Creación de la tabla de datos de entrenamiento


1. Almacene la cadena de conexión de base de datos en una variable de R. Aquí se ofrecen dos ejemplos de
cadenas de conexión ODBC válidas para SQL Server: una que usa un inicio de sesión de SQL y otra para
la autenticación integrada de Windows.
Asegúrese de modificar el nombre del servidor, el nombre de usuario y la contraseña según corresponda.
Inicio de sesión de SQL

sqlConnString <- "Driver=SQL Server;Server=<server-name>; Database=RevoDeepDive;Uid=<user_name>;Pwd=


<password>"

Autenticación de Windows

sqlConnString <- "Driver=SQL Server;Server=<server-


name>;Database=RevoDeepDive;Trusted_Connection=True"

2. Especifique el nombre de la tabla que quiere crear y guárdelo en una variable de R.

sqlFraudTable <- "ccFraudSmall"


Como la instancia del servidor y el nombre de la base de datos ya se han especificado como parte de la
cadena de conexión, cuando se combinan las dos variables, el nombre completo de la nueva tabla se
convierte en instance.database.schema.ccFraudSmall.
3. Opcionalmente, especifique el parámetro rowsPerRead para controlar cuántas filas de datos se leen en
cada lote.

sqlRowsPerRead = 5000

Aunque este parámetro es opcional, su configuración puede traducirse en cálculos más eficientes. La
mayoría de las funciones analíticas mejoradas en RevoScaleR y MicrosoftML procesan los datos en
fragmentos. El parámetro rowsPerRead determina el número de filas de cada fragmento.
Es posible que tenga que experimentar con esta configuración para encontrar el equilibrio adecuado. Si el
valor es demasiado grande, puede que el acceso a los datos sea lento cuando no haya memoria suficiente
para procesar los datos en fragmentos de ese tamaño. Por el contrario, en algunos sistemas, si el valor de
rowsPerRead es demasiado pequeño, el rendimiento también puede disminuir.
Como valor inicial, utilice el tamaño predeterminado de proceso por lotes definido por la instancia del
motor de base de datos para controlar el número de filas de cada fragmento (5000 filas). Guarde el valor
en la variable sqlRowsPerRead.
4. Defina una variable para el nuevo objeto de origen de datos y pase los argumentos definidos
previamente al constructor RxSqlSer verData . Tenga en cuenta que esto solo crea el objeto de origen de
datos y no lo rellena. La carga de datos es un paso independiente.

sqlFraudDS <- RxSqlServerData(connectionString = sqlConnString,


table = sqlFraudTable,
rowsPerRead = sqlRowsPerRead)

Creación de la tabla de datos de puntuación


Siguiendo los mismos pasos, cree la tabla que contiene los datos de puntuación con el mismo proceso.
1. Cree una nueva variable de R, sqlScoreTable, para almacenar el nombre de la tabla usada para la
puntuación.

sqlScoreTable <- "ccFraudScoreSmall"

2. Proporcione esa variable como argumento a la función RxSqlSer verData para definir un segundo
objeto de origen de datos, sqlScoreDS .

sqlScoreDS <- RxSqlServerData(connectionString = sqlConnString,


table = sqlScoreTable, rowsPerRead = sqlRowsPerRead)

Como ya se ha definido la cadena de conexión y otros parámetros como variables en el área de trabajo de R, se
puede reutilizar con nuevos orígenes de datos que representen diferentes tablas, vistas o consultas.
NOTE
La función utiliza distintos argumentos para definir un origen de datos en función de una tabla completa que para definir
un origen de datos en función de una consulta. Esto se debe a que el motor de base de datos de SQL Server debe
preparar las consultas de manera diferente. Más adelante en este tutorial aprenderá a crear un objeto de origen de datos
en función de una consulta SQL.

Carga de datos en tablas de SQL con R


Ahora que ha creado las tablas de SQL Server , puede cargar los datos en ellas mediante la correspondiente
función Rx .
El paquete RevoScaleR contiene funciones específicas de los tipos de orígenes de datos. Con datos de texto,
utilice RxTextData para generar el objeto de origen de datos. Existen funciones adicionales para crear objetos de
origen de datos a partir de datos de Hadoop, datos ODBC y así sucesivamente.

NOTE
En esta sección, debe tener permisos para Ejecutar DDL en la base de datos.

Carga de datos en la tabla de entrenamiento


1. Cree una variable de R, ccFraudCsv, y asígnele la ruta de acceso del archivo CSV que contiene los datos
de ejemplo. Este conjunto de datos se proporciona en RevoScaleR . "sampleDataDir" es una palabra clave
en la función r xGetOption .

ccFraudCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudSmall.csv")

Observe la llamada a r xGetOption , que es el método GET asociado a rxOptions en RevoScaleR . Use
esta utilidad para establecer y mostrar opciones relacionadas con contextos de proceso locales y remotos,
como el directorio compartido predeterminado o el número de procesadores (núcleos) que se utilizarán
en los cálculos.
Esta llamada en particular obtiene los ejemplos de la biblioteca correcta, independientemente de dónde
se ejecute el código. Por ejemplo, pruebe a ejecutar la función en SQL Server y en su equipo de desarrollo
para ver cómo difieren las rutas de acceso.
2. Defina una variable para almacenar los nuevos datos y use la función RxTextData para especificar el
origen de datos de texto.

inTextData <- RxTextData(file = ccFraudCsv, colClasses = c(


"custID" = "integer", "gender" = "integer", "state" = "integer",
"cardholder" = "integer", "balance" = "integer",
"numTrans" = "integer",
"numIntlTrans" = "integer", "creditLine" = "integer",
"fraudRisk" = "integer"))

El argumento colClasses es importante. Se usa para indicar el tipo de datos para asignar a cada columna
de datos cargada desde el archivo de texto. En este ejemplo, todas las columnas se tratan como texto,
excepto las columnas con nombre, que se tratan como enteros.
3. Llegados a este punto, tal vez quiera hacer una pausa y ver la base de datos en SQL Server Management
Studio. Actualice la lista de tablas de la base de datos.
Puede ver que, aunque los objetos de datos de R se han creado en el área de trabajo local, las tablas no se
han creado en la base de datos de SQL Server. Además, tampoco se ha cargado ningún dato del archivo
de texto en la variable de R.
4. Inserte los datos llamando a la función rxDataStep.

rxDataStep(inData = inTextData, outFile = sqlFraudDS, overwrite = TRUE)

Suponiendo que no existen problemas con su cadena de conexión, después de una breve pausa, debería
ver resultados como estos:
Total de filas escritas: 10 000, tiempo total: 0,466 Filas leídas: 10 000, total de filas procesadas: 10 000,
tiempo total de fragmentos: 0,577 segundos
5. Actualice la lista de tablas. Para comprobar que cada variable tiene los tipos de datos correctos y que se
ha importado correctamente, también puede hacer clic con el botón derecho en la tabla en SQL Server
Management Studio y elegir Seleccionar las 1000 primeras filas .
Carga de datos en la tabla de puntuación
1. Repita los pasos necesarios para cargar en la base de datos el conjunto de datos usado para puntuación.
Primero proporcione la ruta de acceso al archivo de origen.

ccScoreCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudScoreSmall.csv")

2. Use la función RxTextData para obtener los datos y guardarlos en la variable inTextData.

inTextData <- RxTextData(file = ccScoreCsv, colClasses = c(


"custID" = "integer", "gender" = "integer", "state" = "integer",
"cardholder" = "integer", "balance" = "integer",
"numTrans" = "integer",
"numIntlTrans" = "integer", "creditLine" = "integer"))

3. Llame a la función r xDataStep para sobrescribir la tabla actual con el nuevo esquema y los datos.

rxDataStep(inData = inTextData, sqlScoreDS, overwrite = TRUE)

El argumento inData define el origen de datos que usar.


El argumento outFile especifica la tabla de SQL Server donde quiere guardar los datos.
Si la tabla ya existe y no se usa la opción sobrescribir, los resultados se insertarán sin
truncamiento.
De nuevo, si la conexión se ha realizado correctamente, debería ver un mensaje indicando la finalización y el
tiempo requerido para escribir los datos en la tabla:
Total de filas escritas: 10 000, Tiempo total: 0,384 Filas leídas: 10 000, Total de filas procesadas: 10 000, Tiempo
total de fragmentos: 0,456 segundos

Más información sobre rxDataStep


rxDataStep es una función eficaz que puede realizar varias transformaciones en una trama de datos de R.
También puede usar rxDataStep para convertir los datos en la representación requerida por el destino: en este
caso, SQL Server.
Opcionalmente, puede especificar transformaciones en los datos mediante funciones de R en los argumentos
para r xDataStep . Más adelante en este tutorial se ofrecen ejemplos de estas operaciones.

Pasos siguientes
Consultar y modificar los datos de SQL Server
Consulta y modificación de datos de SQL Server
(tutorial de SQL Server y RevoScaleR)
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 3 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En el tutorial anterior, cargó los datos en SQL Server. En este tutorial, puede explorar y modificar los datos
mediante RevoScaleR :
Devolver información básica sobre las variables
Crear datos categóricos a partir de datos sin procesar
Los datos categóricos, o variables de factor, son útiles para las visualizaciones de datos exploratorias. Puede
usarlos como entradas para los histogramas para hacerse una idea de qué aspecto tienen los datos de variables.

Consultar columnas y tipos


Use un IDE de R o RGui.exe para ejecutar el script de R.
En primer lugar, obtenga una lista de las columnas y sus tipos de datos. Use la función rxGetVarInfo y
especifique el origen de datos que quiera analizar. Según la versión de RevoScaleR , también puede usar
rxGetVarNames.

rxGetVarInfo(data = sqlFraudDS)

Resultados

Var 1: custID, Type: integer


Var 2: gender, Type: integer
Var 3: state, Type: integer
Var 4: cardholder, Type: integer
Var 5: balance, Type: integer
Var 6: numTrans, Type: integer
Var 7: numIntlTrans, Type: integer
Var 8: creditLine, Type: integer
Var 9: fraudRisk, Type: integer

Crear datos categóricos


Todas las variables se almacenan como enteros, pero algunas de las variables representan datos categóricos
denominados variables de factor en R. Por ejemplo, la columna state contiene números que se usan como
identificadores de los 50 estados, más el Distrito de Columbia. Para facilitar la comprensión de los datos,
reemplace los números con una lista de abreviaturas de estado.
En este paso, creará un vector de cadena que contenga las abreviaturas y, después, asignará estos valores
categóricos a los identificadores enteros originales. Después usará la nueva variable en el argumento colInfo
para especificar que esta columna se trate como un factor. Cada vez que analice o mueva los datos, se usan las
abreviaturas y la columna se trata como un factor.
Asignar la columna a las abreviaturas antes de usarla como un factor mejora realmente también el rendimiento.
Para más información, vea R y optimización de datos.
1. Para empezar, cree una variable de R, stateAbb, y defina el vector de cadenas que se agregará, como
sigue:

stateAbb <- c("AK", "AL", "AR", "AZ", "CA", "CO", "CT", "DC",
"DE", "FL", "GA", "HI","IA", "ID", "IL", "IN", "KS", "KY", "LA",
"MA", "MD", "ME", "MI", "MN", "MO", "MS", "MT", "NB", "NC", "ND",
"NH", "NJ", "NM", "NV", "NY", "OH", "OK", "OR", "PA", "RI","SC",
"SD", "TN", "TX", "UT", "VA", "VT", "WA", "WI", "WV", "WY")

2. Después, cree un objeto de información de columna, denominado ccColInfo, que especifique la


asignación de los valores enteros existentes con los niveles de categorías (las abreviaturas de los
estados).
Esta instrucción también crea variables de factor para el género y el titular de tarjeta.

ccColInfo <- list(


gender = list(
type = "factor",
levels = c("1", "2"),
newLevels = c("Male", "Female")
),
cardholder = list(
type = "factor",
levels = c("1", "2"),
newLevels = c("Principal", "Secondary")
),
state = list(
type = "factor",
levels = as.character(1:51),
newLevels = stateAbb
),
balance = list(type = "numeric")
)

3. Para crear el origen de datos de SQL Server que usa los datos actualizados, llame a la función
RxSqlSer verData como antes, pero agregue el argumento colInfo.

sqlFraudDS <- RxSqlServerData(connectionString = sqlConnString,


table = sqlFraudTable, colInfo = ccColInfo,
rowsPerRead = sqlRowsPerRead)

Para el parámetro table , pase la variable sqlFraudTable, que contiene el origen de datos que ha creado
anteriormente.
Para el parámetro colInfo , pase la variable ccColInfo , que contiene los tipos de datos de columna y los
niveles de factor.
4. Ahora puede usar la función r xGetVarInfo para ver las variables en el nuevo origen de datos.

rxGetVarInfo(data = sqlFraudDS)

Resultados
Var 1: custID, Type: integer
Var 2: gender 2 factor levels: Male Female
Var 3: state 51 factor levels: AK AL AR AZ CA ... VT WA WI WV WY
Var 4: cardholder 2 factor levels: Principal Secondary
Var 5: balance, Type: integer
Var 6: numTrans, Type: integer
Var 7: numIntlTrans, Type: integer
Var 8: creditLine, Type: integer
Var 9: fraudRisk, Type: integer

Ahora las tres variables que ha especificado (gender, state y cardholder) se tratan como factores.

Pasos siguientes
Definir y usar contextos de cálculo
Definición y uso de contextos de cálculo (tutorial de
SQL Server y RevoScaleR)
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 4 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En el tutorial anterior, ha usado las funciones RevoScaleR para inspeccionar los objetos de datos. En este
tutorial se presenta la función RxInSqlServer, que permite definir un contexto de cálculo para un servidor
SQL Server remoto. Con un contexto de cálculo remoto, puede desplazar la ejecución de R de una sesión local a
una sesión remota en el servidor.
Obtener información sobre los elementos de un contexto de cálculo de SQL Server remoto.
Habilitar el seguimiento en un objeto de contexto de cálculo.
RevoScaleR admite varios contextos de cálculo: Hadoop, Spark en HDFS y SQL Server en la base de datos. Para
SQL Server, la función RxInSqlSer ver se utiliza para las conexiones del servidor y para pasar objetos entre el
equipo local y el contexto de ejecución remoto.

Creación y establecimiento de un contexto de cálculo


La función RxInSqlSer ver que crea el contexto de cálculo SQL Server usa la siguiente información:
La cadena de conexión para la instancia SQL Server
Especificación de cómo se deben controlar los resultados
Especificación opcional de un directorio de datos compartido
Argumentos opcionales que habilitan el seguimiento o especifican el nivel de seguimiento
Esta sección le guía a través de cada una de las partes.
1. Especifique la cadena de conexión para la instancia en la que se realizan los cálculos. Puede volver a usar
la cadena de conexión que creó anteriormente.
Con un inicio de sesión de SQL

sqlConnString <- "Driver=SQL Server;Server=<SQL Server instance name>; Database=<database name>;Uid=


<SQL user nme>;Pwd=<password>"

Con la autenticación de Windows

sqlConnString <- "Driver=SQL


Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"

2. Especifique cómo quiere que se controlen los resultados. El siguiente script dirige la sesión local de R
para esperar los resultados del trabajo de R en el servidor antes de procesar la siguiente operación.
También suprime el resultado de los cálculos remotos para que no aparezcan en la sesión local.
sqlWait <- TRUE
sqlConsoleOutput <- FALSE

El argumento wait para RxInSqlSer ver es compatible con estas opciones:


TRUE . El trabajo está configurado como bloqueado y no vuelve hasta que se haya completado o
haya dado error.
FALSE . Los trabajos no se configuran como bloqueados y vuelven de forma inmediata, lo que le
permite continuar la ejecución de otro código de R. En cambio, incluso en modo de no bloqueo, la
conexión de cliente con SQL Server debe mantenerse mientras se ejecuta el trabajo.
3. De manera opcional, especifique la ubicación de un directorio local para el uso compartido mediante la
sesión de R local y mediante el equipo remoto de SQL Server y sus cuentas.

sqlShareDir <- paste("c:\\AllShare\\", Sys.getenv("USERNAME"), sep="")

Si quiere crear de manera manual un directorio específico para compartir, puede agregar una línea como
la siguiente:

dir.create(sqlShareDir, recursive = TRUE)

4. Pase argumentos al constructor RxInSqlSer ver para crear el objeto de contexto de cálculo.

sqlCompute <- RxInSqlServer(


connectionString = sqlConnString,
wait = sqlWait,
consoleOutput = sqlConsoleOutput)

La sintaxis de RxInSqlSer ver es casi idéntica a la de la función RxSqlSer verData que usó
anteriormente para definir el origen de datos. En cambio, hay algunas diferencias importantes.
El objeto del origen de datos, definido mediante la función RxSqlServerData, especifica dónde se
almacenan los datos.
En cambio, el contexto de cálculo, definido mediante la función RxInSqlServer, indica dónde se
realizarán las agregaciones y otros cálculos.
Definir un contexto de cálculo no afecta a los demás cálculos genéricos de R que puede realizar en la
estación de trabajo, y no cambia el origen de los datos. Por ejemplo, puede definir un archivo de texto
local como el origen de datos pero cambiar el contexto de cálculo a SQL Server y realizar toda la lectura y
los resúmenes en los datos del equipo de SQL Server.
5. Active el contexto de cálculo remoto.

rxSetComputeContext(sqlCompute)

6. Devuelva información sobre el contexto de cálculo, incluidas sus propiedades.

rxGetComputeContext()

7. Vuelva a restablecer el contexto de cálculo en el equipo local especificando la palabra clave "local" (en el
siguiente tutorial se muestra cómo usar el contexto de cálculo remoto).
rxSetComputeContext("local")

TIP
Para obtener una lista de otras palabras clave admitidas por esta función, escriba help("rxSetComputeContext") desde
una línea de comandos de R.

Habilitación del seguimiento


A veces, las operaciones funcionan en su contexto local pero experimentan problemas al ejecutarse en un
contexto de cálculo remoto. Si quiere analizar los problemas o supervisar el rendimiento, puede habilitar el
seguimiento en el contexto de cálculo para admitir la solución de problemas en tiempo de ejecución.
1. Cree un nuevo contexto de cálculo que use la misma cadena de conexión, pero agregue los argumentos
traceEnabled y traceLevel en el constructor RxInSqlSer ver .

sqlComputeTrace <- RxInSqlServer(


connectionString = sqlConnString,
#shareDir = sqlShareDir,
wait = sqlWait,
consoleOutput = sqlConsoleOutput,
traceEnabled = TRUE,
traceLevel = 7)

En este ejemplo, la propiedad traceLevel se establece en 7, que significa "mostrar toda la información de
seguimiento".
2. Use la función rxSetComputeContext para especificar el contexto de cálculo habilitado para el
seguimiento por nombre.

rxSetComputeContext(sqlComputeTrace)

Pasos siguientes
Obtenga información sobre cómo activar contextos de cálculo para ejecutar el código de R en el servidor o de
forma local.
Cálculo de estadísticas de resumen en contextos de cálculo locales y remotos
Estadísticas de resumen de proceso en R (tutorial de
SQL Server y RevoScaleR)
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 5 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial se usan los orígenes de datos establecidos y los contextos de proceso creados en tutoriales
anteriores para ejecutar scripts de R de alta eficacia. En este tutorial, usará contextos de proceso de servidores
locales y remotos para estas tareas:
Cambio del contexto de proceso a SQL Server
Obtener estadísticas de resumen sobre objetos de datos remotos
Procesar un resumen local
Si ha completado los tutoriales anteriores, debería tener estos contextos de proceso remotos: sqlCompute y
sqlComputeTrace. Más adelante, usará sqlCompute y el contexto de proceso local en tutoriales posteriores.
Use un IDE de R o Rgui para ejecutar el script de R en este tutorial.

Procesar estadísticas de resumen en datos remotos


Antes de ejecutar cualquier código R de forma remota, debe especificar el contexto de proceso remoto. Todos
los procesos posteriores tienen lugar en el equipo SQL Server especificado en el parámetro sqlCompute.
Un contexto de proceso permanece activo hasta que se cambia. Pero todos los scripts de R que no se puedan
ejecutar en un contexto de servidor remoto se ejecutarán localmente de forma automática.
Para ver cómo funciona un contexto de proceso, genere estadísticas de resumen en el origen de datos
sqlFraudDS en el servidor SQL Server remoto. Este objeto de origen de datos se creó en el tutorial dos y
representa la tabla ccFraudSmall en la base de datos RevoDeepDive.
1. Cambie el contexto de proceso a sqlCompute creado en el tutorial anterior:

rxSetComputeContext(sqlCompute)

2. Llame a la función rxSummary y pase los argumentos necesarios, como la fórmula y el origen de datos, y
asigne los resultados a la variable sumOut .

sumOut <- rxSummary(formula = ~gender + balance + numTrans + numIntlTrans + creditLine, data =


sqlFraudDS)

El lenguaje R proporciona muchas funciones de resumen, pero r xSummar y en RevoScaleR admite la


ejecución en varios contextos de proceso remotos, incluido SQL Server. Para saber más sobre funciones
similares, vea Resúmenes de datos mediante RevoScaleR.
3. Imprima el contenido de sumOut en la consola.
sumOut

NOTE
Si recibe un error, espere unos minutos a que finalice la ejecución antes de volver a intentar el comando.

Resultados

Summary Statistics Results for: ~gender + balance + numTrans + numIntlTrans + creditLine


Data: sqlFraudDS (RxSqlServerData Data Source)
Number of valid observations: 10000

Name Mean StdDev Min Max ValidObs MissingObs


balance 4075.0318 3926.558714 0 25626 100000
numTrans 29.1061 26.619923 0 100 10000 0 100000
numIntlTrans 4.0868 8.726757 0 60 10000 0 100000
creditLine 9.1856 9.870364 1 75 10000 0 100000

Category Counts for gender


Number of categories: 2
Number of valid observations: 10000
Number of missing observations: 0

gender Counts
Male 6154
Female 3846

Crear un resumen local


1. Cambie el contexto de proceso para hacer todo el trabajo localmente.

rxSetComputeContext ("local")

2. Al extraer datos de SQL Server, a menudo puede obtener un mejor rendimiento si aumenta el número de
filas extraídas para cada lectura, suponiendo que haya espacio para el tamaño de bloque ampliado en la
memoria. Ejecute este comando para aumentar el valor del parámetro rowsPerRead en el origen de
datos. Antes, el valor de rowsPerRead estaba establecido en 5000.

sqlServerDS1 <- RxSqlServerData(


connectionString = sqlConnString,
table = sqlFraudTable,
colInfo = ccColInfo,
rowsPerRead = 10000)

3. Llame a r xSummar y en el nuevo origen de datos.

rxSummary(formula = ~gender + balance + numTrans + numIntlTrans + creditLine, data = sqlServerDS1)

Los resultados actuales deben ser los mismos que cuando ejecuta r xSummar y en el contexto del equipo
de SQL Server . En cambio, la operación puede ser más rápida o más lenta. Depende en gran medida de
la conexión a la base de datos, ya que los datos se transfieren al equipo local para el análisis.
4. Vuelva al contexto de proceso remoto para los siguientes tutoriales.
rxSetComputeContext(sqlCompute)

Pasos siguientes
Visualizar datos de SQL Server con R
Visualizar datos de SQL Server mediante R (tutorial
de SQL Server y RevoScaleR)
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 6 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial, usará funciones de R para ver la distribución de valores de la columna creditLine por género.
Creación de variables mínimo-máximo para entradas de histograma
Visualización de datos en un histograma mediante r xHistogram de RevoScaleR
Visualización de gráficos de dispersión con levelplot de lattice incluido en la distribución de R base
Como se muestra en este tutorial, puede combinar funciones de código abierto y específicas de Microsoft en el
mismo script.

Adición de valores máximos y mínimos


Según las estadísticas de resumen calculadas del tutorial anterior, ha descubierto alguna información útil sobre
los datos que quiere insertar en el origen de datos para llevar a cabo cálculos adicionales. Por ejemplo, puede
usar los valores mínimos y máximos para calcular histogramas. En este ejercicio, agregará los valores máximos
y mínimos al origen de datos RxSqlSer verData .
1. Empiece por configurar algunas variables temporales.

sumDF <- sumOut$sDataFrame


var <- sumDF$Name

2. Use la variable ccColInfo que ha creado en el tutorial anterior para definir las columnas del origen de
datos.
Agregue nuevas columnas calculadas (numTrans, numIntlTrans y creditLine) a la colección de columnas
que reemplazan la definición original. El siguiente script agrega factores basados en los valores mínimos
y máximos, obtenidos de sumOut, que almacena la salida en memoria de r xSummar y .
ccColInfo <- list(
gender = list(type = "factor",
levels = c("1", "2"),
newLevels = c("Male", "Female")),
cardholder = list(type = "factor",
levels = c("1", "2"),
newLevels = c("Principal", "Secondary")),
state = list(type = "factor",
levels = as.character(1:51),
newLevels = stateAbb),
balance = list(type = "numeric"),
numTrans = list(type = "factor",
levels = as.character(sumDF[var == "numTrans", "Min"]:sumDF[var == "numTrans", "Max"])),
numIntlTrans = list(type = "factor",
levels = as.character(sumDF[var == "numIntlTrans", "Min"]:sumDF[var =="numIntlTrans",
"Max"])),
creditLine = list(type = "numeric")
)

3. Después de actualizar la colección de columnas, aplique la siguiente instrucción para crear una versión
actualizada del origen de datos SQL Server que ha definido anteriormente.

sqlFraudDS <- RxSqlServerData(


connectionString = sqlConnString,
table = sqlFraudTable,
colInfo = ccColInfo,
rowsPerRead = sqlRowsPerRead)

El origen de datos sqlFraudDS ahora incluye las nuevas columnas que ha agregado mediante ccColInfo.
En este momento, las modificaciones solo afectan al objeto de origen de datos en R; aún no se ha escrito ningún
dato nuevo en la tabla de la base de datos. En cambio, puede usar los datos que se han capturado en la variable
sumOut para crear visualizaciones y resúmenes.

TIP
Si olvida qué contexto de proceso está usando, ejecute r xGetComputeContext() . El valor devuelto "RxLocalSeq
Compute Context" indica que se está ejecutando en el contexto de proceso local.

Visualización de los datos mediante rxHistogram


1. Use el siguiente código de R para llamar a la función rxHistogram y pasar una fórmula y un origen de
datos. Puede ejecutar esto localmente en primer lugar para ver los resultados esperados y cuánto tarda.

rxHistogram(~creditLine|gender, data = sqlFraudDS, histType = "Percent")

De manera interna, r xHistogram llama a la función rxCube , que se incluye en el paquete RevoScaleR .
r xCube genera una única lista (o trama de datos) que contiene una columna para cada variable que se
ha especificado en la fórmula, además de una columna de recuentos.
2. Ahora, establezca el contexto de proceso en el equipo remoto de SQL Server y ejecute r xHistogram de
nuevo.

rxSetComputeContext(sqlCompute)
rxHistogram(~creditLine|gender, data = sqlFraudDS, histType = "Percent")
3. Los resultados son exactamente los mismos, ya que está usando el mismo origen de datos, pero, en el
segundo paso, los cálculos se realizan en el servidor remoto. Después, los resultados se devuelven a la
estación de trabajo local para el trazado.

Visualización con gráficos de dispersión


Los gráficos de dispersión se suelen usar durante la exploración de datos para comparar la relación entre dos
variables. Puede usar paquetes de R integrados con este fin; las funciones de RevoScaleR proporcionarán las
entradas.
1. Llame a la función rxCube para calcular la media de fraudRisk de cada combinación de numTrans y
numIntlTrans:

cube1 <- rxCube(fraudRisk~F(numTrans):F(numIntlTrans), data = sqlFraudDS)

Para especificar los grupos que se han usado para calcular medias de grupo, use la notación F() . En
este ejemplo, F(numTrans):F(numIntlTrans) indica que los enteros de las variables numTrans y
numIntlTrans deben tratarse como variables categóricas, con un nivel para cada valor entero.

El valor devuelto predeterminado de r xCube es un objeto rxCube que representa una tabulación
cruzada.
2. Llame a la función rxResultsDF para convertir los resultados en una trama de datos que pueda usarse
fácilmente en una de las funciones de trazado estándar de R.

cubePlot <- rxResultsDF(cube1)

La función r xCube incluye un argumento opcional, returnDataFrame = TRUE , que puede usar para
convertir los resultados en una trama de datos directamente. Por ejemplo:
print(rxCube(fraudRisk~F(numTrans):F(numIntlTrans), data = sqlFraudDS, returnDataFrame = TRUE))

En cambio, el resultado de r xResultsDF es más limpio y conserva los nombres de las columnas de
origen. Puede ejecutar head(cube1) seguido de head(cubePlot) para comparar el resultado.
3. Cree un mapa térmico mediante la función levelplot del paquete lattice que se incluye en todas las
distribuciones de R.
levelplot(fraudRisk~numTrans*numIntlTrans, data = cubePlot)

Resultados

En este análisis rápido puede ver que aumenta el riesgo de fraude tanto en el número de transacciones como en
el número de transacciones internacionales.
Para más información sobre la función r xCube y las referencias cruzadas, vea Resúmenes de datos mediante
RevoScaleR.

Pasos siguientes
Creación de modelos de R con datos de SQL Server
Creación de modelos de R (tutorial de SQL Server y
RevoScaleR)
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 7 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
Ha enriquecido los datos de entrenamiento. En este tutorial, analizará los datos mediante un modelo de
regresión. Los modelos lineales son una herramienta importante en el mundo del análisis predictivo. El paquete
RevoScaleR incluye algoritmos de regresión que pueden subdividir la carga de trabajo y ejecutarla en paralelo.
Crear un modelo de regresión lineal
Crear un modelo de regresión logística

Crear un modelo de regresión lineal


En este paso, creará un modelo lineal simple que calcula el saldo de la tarjeta de crédito del cliente, usando
como variables independientes los valores de las columnas gender y creditLine.
Para ello, usará la función rxLinMod, que es compatible con contextos de proceso remoto.
1. Cree una variable de R para almacenar el modelo completado y llame a la función r xLinMod , pasando
una fórmula apropiada.

linModObj <- rxLinMod(balance ~ gender + creditLine, data = sqlFraudDS)

2. Para ver un resumen de los resultados, llame a la función summar y de R estándar en el objeto de
modelo.

summary(linModObj)

Quizás piense que es peculiar que una función de R sin formato como summar y funcione aquí, ya que en el
paso anterior estableció el contexto de cálculo en el servidor. Pero incluso cuando la función r xLinMod usa el
contexto de cálculo remoto para crear el modelo, también devuelve un objeto que contiene el modelo en su
estación de trabajo local y lo almacena en el directorio compartido.
Por tanto, puede ejecutar comandos de R estándar en el modelo como si lo hubiera creado mediante el contexto
"local".
Resultados
Linear Regression Results for: balance ~ gender + creditLineData: sqlFraudDS (RxSqlServerData Data Source)
Dependent variable(s): balance
Total independent variables: 4 (Including number dropped: 1)
Number of valid observations: 10000
Number of missing observations: 0
Coefficients: (1 not defined because of singularities)

Estimate Std. Error t value Pr(>|t|) (Intercept)


3253.575 71.194 45.700 2.22e-16
gender=Male -88.813 78.360 -1.133 0.257
gender=Female Dropped Dropped Dropped Dropped
creditLine 95.379 3.862 24.694 2.22e-16
Signif. codes: 0 0.001 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3812 on 9997 degrees of freedom


Multiple R-squared: 0.05765
Adjusted R-squared: 0.05746
F-statistic: 305.8 on 2 and 9997 DF, p-value: < 2.2e-16
Condition number: 1.0184

Crear un modelo de regresión logística


Vamos a crear un modelo de regresión logística que indica si un cliente determinado es un riesgo de fraude.
Usará la función r xLogit de RevoScaleR, que admite el ajuste de modelos de regresión logística en contextos de
proceso remoto.
Deje el contexto de cálculo como está. También seguirá usando el mismo origen de datos.
1. Llame a la función r xLogit y pase la fórmula necesaria para definir el modelo.

logitObj <- rxLogit(fraudRisk ~ state + gender + cardholder + balance + numTrans + numIntlTrans +


creditLine, data = sqlFraudDS, dropFirst = TRUE)

Como es un modelo grande, que contiene 60 variables independientes, incluidas tres variables ficticias
que se descartan, es posible que tenga que esperar unos minutos a que el contexto de cálculo devuelva el
objeto.
El motivo por el que el modelo es tan grande es que, en R (y en el paquete RevoScaleR ), todos los
niveles de una variable de factor de categorías se tratan de forma automática como una variable ficticia
independiente.
2. Llame a la función summar y de R para ver un resumen del modelo devuelto.

summary(logitObj)

Resultados parciales
Logistic Regression Results for: fraudRisk ~ state + gender + cardholder + balance + numTrans + numIntlTrans
+ creditLine
Data: sqlFraudDS (RxSqlServerData Data Source)
Dependent variable(s): fraudRisk
Total independent variables: 60 (Including number dropped: 3)
Number of valid observations: 10000 -2

LogLikelihood: 2032.8699 (Residual deviance on 9943 degrees of freedom)

Coefficients:
Estimate Std. Error z value Pr(>|z|) (Intercept)
-8.627e+00 1.319e+00 -6.538 6.22e-11
state=AK Dropped Dropped Dropped Dropped
state=AL -1.043e+00 1.383e+00 -0.754 0.4511

(other states omitted)

gender=Male Dropped Dropped Dropped Dropped


gender=Female 7.226e-01 1.217e-01 5.936 2.92e-09
cardholder=Principal Dropped Dropped Dropped Dropped
cardholder=Secondary 5.635e-01 3.403e-01 1.656 0.0977
balance 3.962e-04 1.564e-05 25.335 2.22e-16
numTrans 4.950e-02 2.202e-03 22.477 2.22e-16
numIntlTrans 3.414e-02 5.318e-03 6.420 1.36e-10
creditLine 1.042e-01 4.705e-03 22.153 2.22e-16

Signif. codes: 0 '\*\*\*' 0.001 '\*\*' 0.01 '\*' 0.05 '.' 0.1 ' ' 1
Condition number of final variance-covariance matrix: 3997.308
Number of iterations: 15

Pasos siguientes
Puntuación de nuevos datos
Puntuación de datos nuevos (tutorial de SQL Server
y RevoScaleR)
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 8 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial, se usa el modelo de regresión logística que creó en el tutorial anterior para puntuar otro
conjunto de datos que use las mismas variables independientes como entradas.
Puntuación de nuevos datos
Creación de un histograma de las puntuaciones

NOTE
Se necesitan privilegios de administrador de DDL para algunos de estos pasos.

Generar y almacenar puntuaciones


1. Actualice el origen de datos de sqlScoreDS (creado en el tutorial dos) para usar la información de
columna creada en el tutorial anterior.

sqlScoreDS <- RxSqlServerData(


connectionString = sqlConnString,
table = sqlScoreTable,
colInfo = ccColInfo,
rowsPerRead = sqlRowsPerRead)

2. Para asegurarse de que no pierde los resultados, cree un nuevo objeto de origen de datos. Después, use
el nuevo objeto de origen de datos para rellenar una nueva tabla en la base de datos RevoDeepDive.

sqlServerOutDS <- RxSqlServerData(table = "ccScoreOutput",


connectionString = sqlConnString,
rowsPerRead = sqlRowsPerRead )

En este punto, la tabla no se ha creado. Esta instrucción solo define un contenedor para los datos.
3. Compruebe el contexto de proceso actual mediante r xGetComputeContext() y establezca el contexto
de proceso en el servidor si es necesario.

rxSetComputeContext(sqlCompute)

4. Como medida de precaución, compruebe la existencia de la tabla de salida. Si ya existe una con el mismo
nombre, obtendrá un error al intentar escribir en la nueva tabla.
Para hacer esto, llame a las funciones rxSqlServerTableExists y rxSqlServerDropTablepasando el nombre
de la tabla como entrada.
if (rxSqlServerTableExists("ccScoreOutput")) rxSqlServerDropTable("ccScoreOutput")

r xSqlSer verTableExists consulta al controlador ODBC y devuelve TRUE si la tabla existe o FALSE en
caso contrario.
r xSqlSer verDropTable ejecuta el DDL y devuelve TRUE si la tabla se ha quitado correctamente o
FALSE en caso contrario.
5. Ejecute rxPredict para crear las puntuaciones y guardarlas en la nueva tabla definida en el origen de
datos sqlScoreDS.

rxPredict(modelObject = logitObj,
data = sqlScoreDS,
outData = sqlServerOutDS,
predVarNames = "ccFraudLogitScore",
type = "link",
writeModelVars = TRUE,
overwrite = TRUE)

La función r xPredict es otra función que admite la ejecución en contextos de cálculo remotos. Puede
usar la función r xPredict para crear puntuaciones de modelos basados en rxLinMod, rxLogito rxGlm.
El parámetro writeModelVars está establecido en TRUE aquí. Esto significa que las variables que se
han usado para la estimación se incluirán en la nueva tabla.
El parámetro predVarNames especifica la variable en la que se almacenarán los resultados. Aquí
está pasando una nueva variable, ccFraudLogitScore .
El parámetro type para r xPredict define cómo quiere que se calculen las predicciones. Especifique
la palabra clave response para generar puntuaciones basadas en la escala de la variable de
respuesta. O use la palabra clave link para generar puntuaciones basadas en la función de vínculo
subyacente, en cuyo caso las predicciones se crean mediante una escala logística.
6. Después de un tiempo, puede actualizar la lista de tablas en Management Studio para ver la nueva tabla y
sus datos.
7. Para agregar variables adicionales para las predicciones de salida, use el argumento extraVarsToWrite. Por
ejemplo, en el siguiente código, se agrega la variable custID de la tabla de datos de puntuación a la tabla
de salida de predicciones.

rxPredict(modelObject = logitObj,
data = sqlScoreDS,
outData = sqlServerOutDS,
predVarNames = "ccFraudLogitScore",
type = "link",
writeModelVars = TRUE,
extraVarsToWrite = "custID",
overwrite = TRUE)

Mostrar puntuaciones en un histograma


Una vez creada la nueva tabla, calcule y muestre un histograma de las 10 000 puntuaciones de predicción. El
proceso es más rápido si se especifican los valores superior e inferior, así que obténgalos de la base de datos y
agréguelos a los datos de trabajo.
1. Cree un nuevo origen de datos, sqlMinMax, que envíe una consulta a la base de datos para obtener los
valores altos y bajos.
sqlMinMax <- RxSqlServerData(
sqlQuery = paste("SELECT MIN(ccFraudLogitScore) AS minVal,",
"MAX(ccFraudLogitScore) AS maxVal FROM ccScoreOutput"),
connectionString = sqlConnString)

Con este ejemplo puede ver lo fácil que es usar los objetos de origen de datos RxSqlSer verData para
definir conjuntos de datos arbitrarios basados en procedimientos almacenados, funciones o consultas de
SQL y, después, usarlos en su código de R. La variable no almacena los valores actuales, solo la definición
de origen de datos; la consulta se ejecuta para generar los valores solo cuando la usa en una función
como r xImpor t .
2. Use la función rxImport para colocar los valores en una trama de datos que se pueda compartir entre
varios contextos de proceso.

minMaxVals <- rxImport(sqlMinMax)


minMaxVals <- as.vector(unlist(minMaxVals))

Resultados

> minMaxVals

[1] -23.970256 9.786345

3. Ahora que los valores máximo y mínimo están disponibles, úselos para crear otro origen de datos para
las puntuaciones generadas.

sqlOutScoreDS <- RxSqlServerData(sqlQuery = "SELECT ccFraudLogitScore FROM ccScoreOutput",


connectionString = sqlConnString,
rowsPerRead = sqlRowsPerRead,
colInfo = list(ccFraudLogitScore = list(
low = floor(minMaxVals[1]),
high = ceiling(minMaxVals[2]) ) ) )

4. Use el objeto de origen de datos sqlOutScoreDS para obtener las puntuaciones, y calcular y mostrar un
histograma. Agregue el código para establecer el contexto de cálculo si es necesario.

# rxSetComputeContext(sqlCompute)
rxHistogram(~ccFraudLogitScore, data = sqlOutScoreDS)

Resultados
Pasos siguientes
Transformar datos mediante R
Transformación de datos mediante R (tutorial de
SQL Server y RevoScaleR)
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 9 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial, obtendrá información sobre las funciones RevoScaleR para transformar los datos en distintas
fases del análisis.
Usar r xDataStep para crear y transformar un subconjunto de datos.
Usar r xImpor t para transformar datos en tránsito hacia o desde un archivo XDF o una trama de datos en
memoria durante la importación.
Aunque no son específicas para el movimiento de datos, las funciones r xSummar y , r xCube , r xLinMod y
r xLogit admiten transformaciones de datos.

Uso de rxDataStep para transformar variables


La función rxDataStep procesa un fragmento de datos cada vez. Para ello, lo lee en un origen de datos y lo
escribe en otro. Puede especificar las columnas que se van a transformar, las transformaciones que se van a
cargar, etc.
Para que este ejemplo sea interesante, usaremos una función de otro paquete de R para transformar los datos.
El paquete boot es uno de los paquetes "recomendados", lo que significa que boot se incluye con todas las
distribuciones de R, pero no se carga automáticamente en el inicio. Por lo tanto, el paquete ya debe de estar
disponible en la instancia de SQL Server configurada para la integración de R.
Desde el paquete boot , use la función inv.logit que calcula el inverso de una función logit. Es decir, la función
inv.logit convierte una función logit a una probabilidad en la escala [0,1].

TIP
Otra manera de obtener predicciones en esta escala sería establecer el parámetro type en response en la llamada original
a r xPredict .

1. Empiece creando un origen de datos para almacenar los datos destinados a la tabla ccScoreOutput .

sqlOutScoreDS <- RxSqlServerData( table = "ccScoreOutput", connectionString = sqlConnString,


rowsPerRead = sqlRowsPerRead )

2. Agregue otro origen de datos para almacenar los datos para la tabla ccScoreOutput2 .

sqlOutScoreDS2 <- RxSqlServerData( table = "ccScoreOutput2", connectionString = sqlConnString,


rowsPerRead = sqlRowsPerRead )

En la tabla nueva, almacene todas las variables de la tabla ccScoreOutput anterior, además de la variable
recién creada.
3. Establezca el contexto de proceso en la instancia de SQL Server .

rxSetComputeContext(sqlCompute)

4. Use la función r xSqlSer verTableExists para comprobar si la tabla de salida ccScoreOutput2 ya existe y,
de ser así, use la función r xSqlSer verDropTable para eliminar la tabla.

if (rxSqlServerTableExists("ccScoreOutput2")) rxSqlServerDropTable("ccScoreOutput2")

5. Llame a la función r xDataStep y especifique las transformaciones deseadas en una lista.

rxDataStep(inData = sqlOutScoreDS,
outFile = sqlOutScoreDS2,
transforms = list(ccFraudProb = inv.logit(ccFraudLogitScore)),
transformPackages = "boot",
overwrite = TRUE)

Al definir las transformaciones que se aplican a cada columna, también puede especificar los paquetes de
R adicionales que se necesitan para realizar las transformaciones. Para obtener más información sobre
los tipos de transformaciones que puede realizar, vea Cómo transformar y crear un subconjunto de datos
mediante RevoScaleR.
6. Llame a r xGetVarInfo para ver un resumen de las variables del nuevo conjunto de datos.

rxGetVarInfo(sqlOutScoreDS2)

Resultados

Var 1: ccFraudLogitScore, Type: numeric


Var 2: state, Type: character
Var 3: gender, Type: character
Var 4: cardholder, Type: character
Var 5: balance, Type: integer
Var 6: numTrans, Type: integer
Var 7: numIntlTrans, Type: integer
Var 8: creditLine, Type: integer
Var 9: ccFraudProb, Type: numeric

Las puntuaciones originales de la función logit se conservan, pero se ha agregado una nueva columna,
ccFraudProb, en la que las puntuaciones de la función logit se representan como valores comprendidos entre 0
y 1.
Observe que las variables de factor se han escrito en la tabla ccScoreOutput2 como datos de caracteres. Para
usarlos como factores en análisis posteriores, use el parámetro colInfo para especificar los niveles.

Pasos siguientes
Cargar datos en memoria mediante rxImport
Carga de datos en memoria mediante rxImport
(tutorial de SQL Server y RevoScaleR)
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 10 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial, aprenderá cómo obtener datos de SQL Servery, después, usar la función r xImpor t para colocar
los datos de interés en un archivo local. De este modo, puede analizarlos en el contexto de cálculo local varias
veces, sin tener que volver a consultar la base de datos.
La función rxImport se puede usar para mover datos desde un origen de datos a una trama de datos en una
memoria de sesión o en un archivo XDF en disco. Si no especifica un archivo como destino, los datos se colocan
en memoria como una trama de datos.

Extracción de un subconjunto de datos desde SQL Server a la


memoria local
Ha decidido que solo quiere examinar los individuos de alto riesgo con más detalle. La tabla de origen de SQL
Server es grande, por lo que quiere obtener información única y exclusivamente sobre los clientes de alto
riesgo. Luego, cargará los datos en una trama de datos en la memoria de la estación de trabajo local.
1. Restablezca el contexto de cálculo a su estación de trabajo local.

rxSetComputeContext("local")

2. Cree un nuevo objeto de origen de datos de SQL Server proporcionando una instrucción de SQL válida
en el parámetro rxImport . En este ejemplo se obtiene un subconjunto de las observaciones con las
puntuaciones de riesgo más altas. De este modo, solo los datos que necesita realmente se colocan en la
memoria local.

sqlServerProbDS \<- RxSqlServerData(


sqlQuery = paste("SELECT * FROM ccScoreOutput2",
"WHERE (ccFraudProb > .99)"),
connectionString = sqlConnString)

3. Llame a la función rxImport para leer los datos en una trama de datos de la sesión de R local.

highRisk <- rxImport(sqlServerProbDS)

Si la operación se realiza correctamente, debería aparecer un mensaje de estado similar al siguiente:


"Filas leídas: 35, Total de filas procesadas: 35, Tiempo total de fragmentos: 0,036 segundos"
4. Ahora que las observaciones de alto riesgo están en una trama de datos en memoria, puede usar varias
funciones de R para manipular esa trama de datos. En este ejemplo, puede ordenar los clientes por su
puntuación de riesgo e imprimir una lista de aquellos que suponen un riesgo más alto.
orderedHighRisk <- highRisk[order(-highRisk$ccFraudProb),]
row.names(orderedHighRisk) <- NULL
head(orderedHighRisk)

Resultados

ccFraudLogitScore state gender cardholder balance numTrans numIntlTrans creditLine ccFraudProb1


9.786345 SD Male Principal 23456 25 5 75 0.99994382
9.433040 FL Female Principal 20629 24 28 75 0.99992003
8.556785 NY Female Principal 19064 82 53 43 0.99980784
8.188668 AZ Female Principal 19948 29 0 75 0.99972235
7.551699 NY Female Principal 11051 95 0 75 0.99947516
7.335080 NV Male Principal 21566 4 6 75 0.9993482

Más información sobre rxImport


Puede usar r xImpor t no solo para mover los datos, sino también para transformar los datos mientras se leen.
Por ejemplo, puede especificar el número de caracteres para las columnas de ancho fijo, proporcionar una
descripción de las variables, establecer niveles para las columnas de factor e incluso crear nuevos niveles para
usar después de la importación.
La función r xImpor t asigna nombres de variable a las columnas durante el proceso de importación, pero
puede indicar nombres de variable nuevos con el parámetro colInfo o cambiar los tipos de datos con el
parámetro colClasses.
Mediante la especificación de operaciones adicionales en el parámetro transforms , puede realizar un
procesamiento elemental en cada fragmento de datos que se lee.

Pasos siguientes
Crear una nueva tabla de SQL Server mediante rxDataStep
Creación de una tabla de SQL Server con
rxDataStep (tutorial de SQL Server y RevoScaleR)
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 11 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial, aprenderá a mover datos entre las tramas de datos en memoria, el contexto de SQL Server y
archivos locales.

NOTE
En este tutorial se usa un conjunto de datos diferente. El conjunto de datos Airline Delays es un conjunto de datos público
que se usa profusamente en los experimentos de Machine Learning. Los archivos de datos que se usan en este ejemplo
están disponibles en el mismo directorio que otros ejemplos de producto.

Carga de datos desde un archivo XDF local


En la primera parte de esta serie de tutoriales, usó la función RxTextData para importar datos en R de un
archivo de texto y, después, la función RxDataStep para mover los datos a SQL Server.
En este tutorial se usa un enfoque diferente, y se usan datos de un archivo guardado en formato XDF. Después
de realizar algunas transformaciones ligeras en los datos mediante el archivo XDF, los datos transformados se
guardan en una nueva tabla de SQL Server.
¿Qué es XDF?
El formato XDF es un estándar XML desarrollado para datos de dimensiones elevadas. Es un formato de archivo
binario con una interfaz de R que optimiza el análisis y el procesamiento de columnas y filas. Puede usarlo para
mover datos y almacenar los subconjuntos de datos que son útiles para el análisis.
1. Establezca el contexto de cálculo en la estación de trabajo local. En este paso se necesitan
permisos DDL.

rxSetComputeContext("local")

2. Defina un nuevo objeto de origen de datos mediante la función RxXdfData . Para definir un origen de
datos XDF, especifique la ruta de acceso al archivo de datos.
La ruta de acceso al archivo podría especificarse con una variable de texto, pero en este caso existe un
método abreviado útil, que consiste en usar la función r xGetOption y obtener el archivo
(AirlineDemoSmall.xdf) del directorio de datos de ejemplo.

xdfAirDemo <- RxXdfData(file.path(rxGetOption("sampleDataDir"), "AirlineDemoSmall.xdf"))

3. Llame a rxGetVarInfo en los datos en memoria para ver un resumen del conjunto de datos.
rxGetVarInfo(xdfAirDemo)

Resultados

Var 1: ArrDelay, Type: integer, Low/High: (-86, 1490)


Var 2: CRSDepTime, Type: numeric, Storage: float32, Low/High: (0.0167, 23.9833)
Var 3: DayOfWeek 7 factor levels: Monday Tuesday Wednesday Thursday Friday Saturday Sunday

NOTE
¿Se ha dado cuenta de que no necesita llamar a ninguna función para cargar los datos en el archivo XDF y puede llamar a
r xGetVarInfo en los datos inmediatamente? Eso es porque XDF es el método de almacenamiento provisional
predeterminado en RevoScaleR. Además de los archivos XDF, ahora la función r xGetVarInfo admite varios tipos de
orígenes.

Traslado del contenido a SQL Server


Con el origen de datos XDF creado en la sesión de R local, ahora puede pasar estos datos a una tabla de base de
datos y almacenar DayOfWeek como un entero con valores de 1 a 7.
1. Defina un objeto de origen de datos de SQL Server, especificando una tabla que contenga los datos y la
conexión al servidor remoto.

sqlServerAirDemo <- RxSqlServerData(table = "AirDemoSmallTest", connectionString = sqlConnString)

2. Como medida de precaución, incluya un paso que compruebe si ya existe una tabla con el mismo
nombre y elimínela en caso de que exista. Una tabla existente con el mismo nombre evitará que se cree
una nueva.

if (rxSqlServerTableExists("AirDemoSmallTest", connectionString = sqlConnString))


rxSqlServerDropTable("AirDemoSmallTest", connectionString = sqlConnString)

3. Cargue los datos en la tabla mediante r xDataStep . Esta función mueve los datos entre dos orígenes de
datos ya definidos y, opcionalmente, puede transformar los datos en tránsito.

rxDataStep(inData = xdfAirDemo, outFile = sqlServerAirDemo,


transforms = list( DayOfWeek = as.integer(DayOfWeek),
rowNum = .rxStartRow : (.rxStartRow + .rxNumRows - 1) ),
overwrite = TRUE )

Se trata de una tabla bastante grande, por lo que debe esperar hasta que vea un mensaje de estado final
como este: Filas leídas: 200000, Total de filas procesadas: 600000.

Carga de datos desde una tabla SQL


Una vez que los datos existen en la tabla, puede cargarlos usando una sencilla consulta SQL.
1. Cree un origen de datos de SQL Server. La entrada es una consulta sobre la nueva tabla que acaba de
crear y cargar con los datos. Esta definición agrega niveles de factor para la columna DayOfWeek
mediante el argumento colInfo en RxSqlSer verData .
sqlServerAirDemo2 <- RxSqlServerData(
sqlQuery = "SELECT * FROM AirDemoSmallTest",
connectionString = sqlConnString,
rowsPerRead = 50000,
colInfo = list(DayOfWeek = list(type = "factor", levels = as.character(1:7))))

2. Llame a r xSummar y otra vez para revisar un resumen de los datos de la consulta.

rxSummary(~., data = sqlServerAirDemo2)

Pasos siguientes
Realizar análisis de fragmentación mediante rxDataStep
Fragmentación de análisis con rxDataStep (tutorial
de SQL Server y RevoScaleR)
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 12 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial, usará la función r xDataStep para procesar datos en fragmentos, en lugar de requerir que el
conjunto de datos completo se cargue en memoria y se procese de una vez, como ocurre en el lenguaje R
tradicional. La función r xDataStep lee los datos en fragmentos, aplica funciones de R a cada fragmento de
datos y, después, guarda los resultados de resumen de cada fragmento en un origen de datos de SQL Server
común. Cuando se lean todos los datos, se combinan los resultados.

TIP
En este tutorial, calculará una tabla de contingencia usando la función table de R. Este ejemplo se incluye únicamente con
fines instructivos.
Si necesita tabular conjuntos de datos reales, le recomendamos que use las funciones r xCrossTabs o r xCube de
RevoScaleR, que se han optimizado para este tipo de operación.

Partición de datos por valores


1. Cree una función de R personalizada que llame a la función table de R en cada fragmento de datos, y
denomine la nueva función ProcessChunk .

ProcessChunk <- function( dataList) {


# Convert the input list to a data frame and compute contingency table
chunkTable <- table(as.data.frame(dataList))

# Convert table output to a data frame with a single row


varNames <- names(chunkTable)
varValues <- as.vector(chunkTable)
dim(varValues) <- c(1, length(varNames))
chunkDF <- as.data.frame(varValues)
names(chunkDF) <- varNames

# Return the data frame, which has a single row


return( chunkDF )
}

2. Establezca el contexto de cálculo en el servidor.

rxSetComputeContext(sqlCompute)

3. Defina un origen de datos de SQL Server para almacenar los datos que está procesando. Comience por
asignar una consulta de SQL a una variable. Luego, use esa variable en el argumento sqlQuery de un
nuevo origen de datos de SQL Server.
dayQuery <- "SELECT DayOfWeek FROM AirDemoSmallTest"
inDataSource <- RxSqlServerData(sqlQuery = dayQuery,
connectionString = sqlConnString,
rowsPerRead = 50000,
colInfo = list(DayOfWeek = list(type = "factor",
levels = as.character(1:7))))

4. Opcionalmente, puede ejecutar r xGetVarInfo en este origen de datos. Llegado este punto, contiene una
sola columna: Var 1: DayOfWeek, Tipo: factor, no hay niveles de factor disponibles
5. Antes de aplicar esta variable de factor en los datos de origen, cree una tabla independiente para
contener los resultados intermedios. De nuevo, simplemente use la función RxSqlSer verData para
definir los datos, procurando eliminar cualquier tabla existente con el mismo nombre.

iroDataSource = RxSqlServerData(table = "iroResults", connectionString = sqlConnString)


# Check whether the table already exists.
if (rxSqlServerTableExists(table = "iroResults", connectionString = sqlConnString)) {
rxSqlServerDropTable( table = "iroResults", connectionString = sqlConnString) }

6. Llame a la función personalizada ProcessChunk para transformar los datos a medida que se leen,
usándolos como el argumento transformFunc en la función r xDataStep .

rxDataStep( inData = inDataSource, outFile = iroDataSource, transformFunc = ProcessChunk, overwrite =


TRUE)

7. Para ver los resultados intermedios de ProcessChunk , asigne los resultados de r xImpor t a una variable
y, después, imprima los resultados en la consola.

iroResults <- rxImport(iroDataSource)


iroResults

Resultados parciales

F IL A # 1 2 3 4 5 6 7

1 8228 8924 6916 6932 6944 5602 6454

2 8321 5351 7329 7411 7409 6487 7692

8. Para calcular los resultados finales en todos los fragmentos, puede sumar las columnas y mostrar los
resultados en la consola.

finalResults <- colSums(iroResults)


finalResults

Resultados

1 2 3 4 5 6 7

97975 77725 78875 81304 82987 86159 94975

9. Para quitar la tabla de resultados intermedios, realice una llamada a r xSqlSer verDropTable .
rxSqlServerDropTable( table = "iroResults", connectionString = sqlConnString)

Pasos siguientes
Tutoriales de R para SQL Server
Movimiento de datos entre SQL Server y el archivo
XDF (tutorial de SQL Server y RevoScaleR)
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 13 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial, aprenderá a usar un archivo XDF para transferir datos entre contextos de cálculo remotos y
locales. El almacenamiento de los datos en un archivo XDF permite realizar transformaciones en los datos.
Cuando termine, use los datos en el archivo para crear una nueva tabla de SQL Server. La función rxDataStep
puede aplicar transformaciones a los datos y realiza la conversión entre tramas de datos y archivos .xdf.

Creación de una tabla de SQL Server desde un archivo XDF


Para este ejercicio, use de nuevo los datos de fraude de tarjetas de crédito. En este escenario, se le ha pedido
realizar un análisis adicional de los usuarios en los estados de California, Oregon y Washington. Para que sea
más eficaz, hemos decidido almacenar datos solo para estos estados en el equipo local, y trabajar únicamente
con las variables sexo, titular de la tarjeta, estado y saldo.
1. Vuelva a usar la variable stateAbb que ha creado anteriormente para identificar los niveles que quiere
incluir y escriba una nueva variable, statesToKeep .

statesToKeep <- sapply(c("CA", "OR", "WA"), grep, stateAbb)


statesToKeep

Resultados

CA O B IEN WA

5 38 48

2. Defina los datos que quiere traer de SQL Server mediante una consulta de Transact-SQL. Más adelante
use esta variable como el argumento inData para r xImpor t .

importQuery <- paste("SELECT gender,cardholder,balance,state FROM", sqlFraudTable, "WHERE (state =


5 OR state = 38 OR state = 48)")

Asegúrese de que no hay ningún carácter oculto como saltos de línea o tabulaciones en la consulta.
3. A continuación, defina las columnas que se van a usar al trabajar con los datos en R. Por ejemplo, en el
conjunto de datos más pequeño, solo necesita tres niveles de factor, porque la consulta solo devuelve
datos para tres estados. Aplique la variable statesToKeep para identificar los niveles correctos que incluir.
importColInfo <- list(
gender = list( type = "factor", levels = c("1", "2"), newLevels = c("Male", "Female")),
cardholder = list( type = "factor", levels = c("1", "2"), newLevels = c("Principal",
"Secondary")),
state = list( type = "factor", levels = as.character(statesToKeep), newLevels =
names(statesToKeep))
)

4. Establezca el contexto de cálculo en local , ya que quiere todos los datos disponibles en el equipo local.

rxSetComputeContext("local")

La función rxImport puede importar datos desde cualquier origen de datos que se admita a un archivo
XDF local. El uso de una copia local de los datos puede ser conveniente cuando quiera realizar muchos
análisis distintos en los datos, pero quiere evitar ejecutar la misma consulta una y otra vez.
5. Cree el objeto de origen de datos pasando las variables previamente definidas como argumentos a
RxSqlSer verData .

sqlServerImportDS <- RxSqlServerData(


connectionString = sqlConnString,
sqlQuery = importQuery,
colInfo = importColInfo)

6. Llame a r xImpor t para escribir los datos en un archivo denominado ccFraudSub.xdf , en el directorio de
trabajo actual.

localDS <- rxImport(inData = sqlServerImportDS,


outFile = "ccFraudSub.xdf",
overwrite = TRUE)

El objeto localDs devuelto desde la función r xImpor t es un objeto de origen de datos RxXdfData
ligero que representa el archivo de datos ccFraud.xdf almacenado localmente en el disco.
7. Llame a rxGetVarInfo en el archivo XDF para comprobar que el esquema de datos es el mismo.

rxGetVarInfo(data = localDS)

Resultados

rxGetVarInfo(data = localDS)
Var 1: gender, Type: factor, no factor levels available
Var 2: cardholder, Type: factor, no factor levels available
Var 3: balance, Type: integer, Low/High: (0, 22463)
Var 4: state, Type: factor, no factor levels available

8. Ahora puede llamar a varias funciones de R para analizar el objeto localDs , como haría con los datos de
origen en SQL Server. Por ejemplo, puede resumir por sexo:

rxSummary(~gender + cardholder + balance + state, data = localDS)

Pasos siguientes
En esta tutorial se concluye la serie de tutoriales de varias partes en RevoScaleR y SQL Server. Presenta
numerosos conceptos relacionados con los datos y de cálculo, lo que le proporciona una base para avanzar con
sus propios datos y requisitos de proyecto.
Para profundizar en los conocimientos de RevoScaleR , puede volver a la lista de tutoriales de R para repasar
todos y cada uno de los ejercicios que podría no haber realizado. Como alternativa, revise los artículos de
procedimientos de la tabla de contenido para obtener información sobre las tareas generales.
Tutoriales de R para SQL Server
Ejecución de funciones de R personalizadas en
SQL Server mediante rxExec (tutorial de
SQL Server y RevoScaleR)
14/07/2021 • 5 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


Este es el tutorial 14 de la serie de tutoriales de RevoScaleR sobre el uso de las funciones de RevoScaleR con
SQL Server.
En este tutorial, usará datos simulados para mostrar la ejecución de una función de R personalizada que se
ejecuta en un servidor remoto.
Puede ejecutar funciones de R personalizadas en el contexto de SQL Server pasando la función a través de
rxExec, siempre y cuando las bibliotecas requeridas por el script también estén instaladas en el servidor y sean
compatibles con la distribución base de R.
La función r xExec de RevoScaleR proporciona un mecanismo para ejecutar cualquier script de R que necesite.
Además, r xExec puede distribuir explícitamente el trabajo entre varios núcleos en un solo servidor, agregando
escala a los scripts que, de otro modo, se limitan a las restricciones de recursos del motor de R nativo.

Prerrequisitos
SQL Server Machine Learning Services (con R) o SQL Server 2016 R Services (en base de datos)
Permisos de base de datos y un inicio de sesión de usuario de base de datos de SQL Server
Una estación de trabajo de desarrollo con las bibliotecas de RevoScaleR
La distribución de R en la estación de trabajo del cliente proporciona una herramienta integrada de Rgui que
puede usar para ejecutar el script de R en este tutorial. También puede usar un IDE como RStudio o
Herramientas de R para Visual Studio.

Creación del contexto de proceso remoto


Ejecute los siguientes comandos de R en una estación de trabajo del cliente. Por ejemplo, si usa Rgui , inícielo
desde esta ubicación: C:\Archivos de programa\Microsoft\R Client\R_SERVER\bin\x64..
1. Especifique la cadena de conexión para la instancia de SQL Server en la que se realizan los cálculos. El
servidor debe estar configurado para la integración de R. El nombre de la base de datos no se usa en este
ejercicio, pero la cadena de conexión requiere uno. Si tiene una base de datos de prueba o de ejemplo,
puede usarla.
Con un inicio de sesión de SQL

sqlConnString <- "Driver=SQL Server;Server=<SQL-Server-instance-name>; Database=<database-name>;Uid=


<SQL-user-name>;Pwd=<password>"

Con la autenticación de Windows


sqlConnString <- "Driver=SQL Server;Server=<SQL-Server-instance-name>;Database=<database-
name>;Trusted_Connection=True"

2. Cree un contexto de proceso remoto en la instancia de SQL Server a la que se hace referencia en la
cadena de conexión.

sqlCompute <- RxInSqlServer(connectionString = sqlConnString)

3. Active el contexto de proceso y, después, devuelva la definición del objeto como un paso de confirmación.
Debería ver las propiedades del objeto del contexto de proceso.

rxSetComputeContext(sqlCompute)
rxGetComputeContext()

Creación de la función personalizada


En este ejercicio, creará una función de R personalizada que simula un juego de casino común que consiste en
lanzar un par de dados. Las reglas del juego determinan un resultado de ganancia o pérdida:
Si saca 7 u 11 en el lanzamiento inicial, gana.
Si saca 2, 3 o 12, pierde.
Si saca 4, 5, 6, 8, 9 o 10, ese número se convierte en su puntuación, y sigue lanzando hasta que vuelve a
sacar sus puntos de nuevo (en cuyo caso gana) o saca un 7, en cuyo caso pierde.
El juego se simula con facilidad en R si crea una función personalizada y, después, la ejecuta muchas veces.
1. Cree la función personalizada mediante el siguiente código de R:

rollDice <- function()


{
result <- NULL
point <- NULL
count <- 1
while (is.null(result))
{
roll <- sum(sample(6, 2, replace=TRUE))

if (is.null(point))
{ point <- roll }
if (count == 1 && (roll == 7 || roll == 11))
{ result <- "Win" }
else if (count == 1 && (roll == 2 || roll == 3 || roll == 12))
{ result <- "Loss" }
else if (count > 1 && roll == 7 )
{ result <- "Loss" }
else if (count > 1 && point == roll)
{ result <- "Win" }
else { count <- count + 1 }
}
result
}

2. Simule un solo juego de dados, ejecutando la función.

rollDice()
¿Ha ganado o perdido?
Ahora que tiene un script operacional, veamos cómo puede ejecutar la función r xExec varias veces para crear
una simulación que ayude a determinar la probabilidad de ganar.

Pasar rollDice () en rxExec


Para ejecutar una función arbitraria en el contexto de una instancia remota de SQL Server, llame a la función
r xExec .
1. Llame a la función personalizada como un argumento de r xExec , junto con otros parámetros que
modifican la simulación.

sqlServerExec <- rxExec(rollDice, timesToRun=20, RNGseed="auto")


length(sqlServerExec)

Use el argumento timesToRun para indicar cuántas veces se debe ejecutar la función. En este caso,
lanza los dados 20 veces.
Los argumentos RNGseed y RNGkind pueden usarse para controlar la generación de números
aleatorios. Si RNGseed está establecido en auto , se inicializa una secuencia de números aleatorios
en paralelo en cada trabajo.
2. La función r xExec crea una lista con un elemento para cada ejecución, pero no verá que suceda mucho
hasta que la lista esté completa. Cuando estén completas todas las iteraciones, la línea que empieza con
length devolverá un valor.
Después puede ir al paso siguiente para obtener un resumen del registro de perdidas y ganadas.
3. Convierta la lista devuelta en un vector con la función unlist de R, y resuma los resultados mediante la
función table .

table(unlist(sqlServerExec))

Los resultados deben tener el siguiente aspecto:


Perdidas Ganadas 12 8

Conclusión
Aunque este ejercicio es simplista, muestra un mecanismo importante para integrar funciones de R arbitrarias
en el script de R que se ejecuta en SQL Server. Como resumen de los puntos clave que hacen posible esta
técnica:
SQL Server se debe configurar para el aprendizaje automático y la integración de R: SQL Server Machine
Learning Services con la función R o SQL Server 2016 R Services (en base de datos).
Debe tener instaladas en SQL Server las bibliotecas de código abierto o de terceros que se usan en la
función, incluidas las dependencias. Para obtener más información, vea Instalación de nuevos paquetes
de R.
Si mueve el script de un entorno de desarrollo a un entorno de producción protegido se pueden
presentar restricciones de firewall y de red. Realice una prueba detenidamente para asegurarse de que el
script puede funcionar según lo previsto.

Pasos siguientes
Para obtener un ejemplo más complejo del uso de r xExec , consulte este artículo: Paralelismo de grano grueso
con foreach y rxExec
Datos de demostración de la llegada de vuelos de
líneas aéreas para tutoriales de Python y R de SQL
Server
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores


En este ejercicio, va a crear una base de datos de SQL Server para almacenar los datos importados de los
conjuntos de datos de demostración de líneas aéreas integradas en R o Python. Las distribuciones de R y Python
proporcionan datos equivalentes, que puede importar a una base de datos de SQL Server mediante
Management Studio.
Para completar este ejercicio, debe tener SQL Server Management Studio u otra herramienta que pueda ejecutar
consultas de T-SQL.
Entre los tutoriales y las guías de inicio rápido que usan este conjunto de datos se incluyen los siguientes:
Creación de un modelo de Python mediante revoscalepy

Creación de la base de datos


1. Inicie SQL Server Management Studio, conéctese a una instancia del motor de base de datos que tenga
integración con R o Python.
2. En Explorador de objetos, haga clic con el botón derecho en Bases de datos y cree una nueva base de
datos denominada flightdata .
3. Haga clic con el botón derecho en flightdata , haga clic en Tareas y haga clic en Impor tar archivo
plano .
4. Abra el archivo AirlineDemoData.csv proporcionado en la distribución de R o Python, en función del
lenguaje de computación que haya instalado.
Para R, vaya a AirlineDemoSmall.csv en C:\Program Files\Microsoft SQL
Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\SampleData
Para Python, vaya a AirlineDemoSmall.csv at C:\Program Files\Microsoft SQL
Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\Lib\site-packages\revoscalepy\data\sample_data
Al seleccionar el archivo, el nombre y el esquema de la tabla se rellenan con los valores predeterminados.
Haga clic en las páginas restantes y acepte los valores predeterminados para importar los datos.

Consultar los datos


Como paso de validación, ejecute una consulta para confirmar que se han cargado los datos.
1. En Explorador de objetos, debajo de Bases de datos, haga clic con el botón derecho en la base de datas
flightdata e inicie una nueva consulta.
2. Ejecute algunas consultas sencillas:

SELECT TOP(10) * FROM AirlineDemoSmall;


SELECT COUNT(*) FROM AirlineDemoSmall;

Pasos siguientes
En la lección siguiente, creará un modelo de regresión lineal basado en estos datos.
Creación de un modelo de Python mediante revoscalepy
Datos de demostración de Iris para tutoriales de
Python y R con aprendizaje automático de
SQL Server
14/07/2021 • 4 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En este ejercicio va a crear una base de datos para almacenar los datos del conjunto de datos flor Iris y los
modelos basados en los mismos datos. Los datos de Iris se incluyen en las distribuciones de R y Python y se
usan en los tutoriales de aprendizaje automático para SQL Machine Learning.
Para completar este ejercicio, debe tener SQL Server Management Studio u otra herramienta que pueda ejecutar
consultas de T-SQL.
Entre los tutoriales y las guías de inicio rápido que usan este conjunto de datos se incluyen los siguientes:
Inicio rápido: Creación y puntuación de un modelo predictivo en Python

Creación de la base de datos


1. Inicie SQL Server Management Studio y abra una nueva ventana Consultas .
2. Cree una nueva base de datos para este proyecto y cambie el contexto de la ventana Consulta para usar
la nueva base de datos.

CREATE DATABASE irissql


GO
USE irissql
GO

3. Agregue algunas tablas vacías: una para almacenar los datos y otra para almacenar los modelos
entrenados. La tabla iris_models se utiliza para almacenar los modelos serializados generados en otros
ejercicios.
En el código siguiente se crea la tabla para los datos de entrenamiento.

DROP TABLE IF EXISTS iris_data;


GO
CREATE TABLE iris_data (
id INT NOT NULL IDENTITY PRIMARY KEY
, "Sepal.Length" FLOAT NOT NULL, "Sepal.Width" FLOAT NOT NULL
, "Petal.Length" FLOAT NOT NULL, "Petal.Width" FLOAT NOT NULL
, "Species" VARCHAR(100) NOT NULL, "SpeciesId" INT NOT NULL
);

4. Ejecute el código siguiente para crear la tabla utilizada para almacenar el modelo entrenado. Para guardar
los modelos de Python (o R) en SQL Server, se deben serializar y almacenar en una columna de tipo
varbinar y(max) .
DROP TABLE IF EXISTS iris_models;
GO

CREATE TABLE iris_models (


model_name VARCHAR(50) NOT NULL DEFAULT('default model') PRIMARY KEY,
model VARBINARY(MAX) NOT NULL
);
GO

Además del contenido del modelo, normalmente también se agregan columnas para otros metadatos
útiles, como el nombre del modelo, la fecha en que se entrenó, el algoritmo y los parámetros de origen,
los datos de origen, etc. Por ahora, no nos complicaremos y usaremos solo el nombre del modelo.

Relleno de la tabla
Puede obtener datos de iris integrados desde R o Python. Puede usar Python o R para cargar los datos en una
trama de datos y después insertarlos en una tabla de la base de datos. El traslado de los datos de entrenamiento
de una sesión externa a una tabla es un proceso que consta de varios pasos:
Diseñar un procedimiento almacenado que obtenga los datos deseados.
Ejecutar el procedimiento almacenado para obtener realmente los datos.
Crear una instrucción INSERT para especificar dónde deben guardarse los datos recuperados.
1. En sistemas con integración de Python, cree el siguiente procedimiento almacenado que utiliza el código
de Python para cargar los datos.

CREATE PROCEDURE get_iris_dataset


AS
BEGIN
EXEC sp_execute_external_script @language = N'Python',
@script = N'
from sklearn import datasets
iris = datasets.load_iris()
iris_data = pandas.DataFrame(iris.data)
iris_data["Species"] = pandas.Categorical.from_codes(iris.target, iris.target_names)
iris_data["SpeciesId"] = iris.target
',
@input_data_1 = N'',
@output_data_1_name = N'iris_data'
WITH RESULT SETS (("Sepal.Length" float not null, "Sepal.Width" float not null, "Petal.Length" float
not null, "Petal.Width" float not null, "Species" varchar(100) not null, "SpeciesId" int not null));
END;
GO

Al ejecutar este código, debería obtener el mensaje "Los comandos se han completado correctamente".
Todo esto significa que el procedimiento almacenado se ha creado según sus especificaciones.
2. En los sistemas que tienen una integración con R, también puede crear un procedimiento que use R.
CREATE PROCEDURE get_iris_dataset
AS
BEGIN
EXEC sp_execute_external_script @language = N'R',
@script = N'
library(RevoScaleR)
data(iris)
iris$SpeciesID <- c(unclass(iris$Species))
iris_data <- iris
',
@input_data_1 = N'',
@output_data_1_name = N'iris_data'
WITH RESULT SETS (("Sepal.Length" float not null, "Sepal.Width" float not null, "Petal.Length" float
not null, "Petal.Width" float not null, "Species" varchar(100) not null, "SpeciesId" int not null));
END;
GO

3. Para que la tabla se rellene, ejecute el procedimiento almacenado y especifique la tabla en la que se
deben escribir los datos. Al ejecutarse, el procedimiento almacenado ejecuta el código de Python o R, que
carga el conjunto de datos de iris integrado y después inserta los datos en la tabla iris_data .

INSERT INTO iris_data ("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species",


"SpeciesId")
EXEC dbo.get_iris_dataset;

Si no está familiarizado con T-SQL, tenga en cuenta que la instrucción INSERT solo agrega nuevos datos,
pero no comprueba si hay datos existentes ni elimina y vuelve a recompilar la tabla. Para que no se hagan
varias copias de los mismos datos en una tabla, puede ejecutar esta instrucción primero:
TRUNCATE TABLE iris_data . Con la instrucción TRUNCATE TABLE de T-SQL se eliminan los datos existentes,
pero se mantiene intacta la estructura de la tabla.

Consultar los datos


Como paso de validación, ejecute una consulta para confirmar que se han cargado los datos.
1. En Explorador de objetos, debajo de Bases de datos, haga clic con el botón derecho en la base de datas
irissql e inicie una nueva consulta.
2. Ejecute algunas consultas sencillas:

SELECT TOP(10) * FROM iris_data;


SELECT COUNT(*) FROM iris_data;

Pasos siguientes
En la guía de inicio rápido siguiente, va a crear un modelo de aprendizaje automático y a guardarlo en una tabla.
Después, usará el modelo para generar los resultados previstos.
Inicio rápido: Creación y puntuación de un modelo predictivo en Python
Datos de demostración de los taxis de Nueva York
para tutoriales de Python y R en SQL Server
14/07/2021 • 5 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
En este artículo se explica cómo configurar una base de datos de ejemplo formada por datos públicos
procedentes de la Comisión de taxis y limusinas de la ciudad de Nueva York. Estos datos se usan en varios
tutoriales de R y Python para el análisis de bases de datos en SQL Server. Para que el código de ejemplo se
ejecute más rápidamente, hemos creado una muestra representativa del 1 % de los datos. En el sistema, el
archivo de copia de seguridad de base de datos es ligeramente superior a 90 MB, lo que proporciona 1,7
millones de filas en la tabla de datos principal.
Para completar este ejercicio, debe tener SQL Server Management Studio u otra herramienta que pueda
restaurar un archivo de copia de seguridad de la base de datos y ejecutar consultas de T-SQL.
Entre los tutoriales y las guías de inicio rápido que usan este conjunto de datos se incluyen los siguientes:
Obtenga información sobre el análisis de bases de datos con R en SQL Server
Obtenga información sobre el análisis de bases de datos con Python en SQL Server

Descarga de archivos
La base de datos de ejemplo es un archivo BAK de SQL Server 2016 hospedado por Microsoft. Puede
restaurarlo en SQL Server 2016 y versiones posteriores. La descarga de archivos comienza inmediatamente al
hacer clic en el vínculo.
El tamaño del archivo es de aproximadamente 90 MB.

NOTE
Para restaurar la base de datos de ejemplo en clústeres de macrodatos de SQL Server, descargue NYCTaxi_Sample.bak y
siga las instrucciones de Restauración de una base de datos en la instancia maestra del clúster de macrodatos de
SQL Server.

NOTE
Para restaurar la base de datos de ejemplo en Machine Learning Services, en Azure SQL Managed Instance, siga las
instrucciones de Inicio rápido: Restauración de una base de datos a Azure SQL Managed Instance mediante el archivo. bak
de la base de datos de taxis de Nueva York: https://sqlmldoccontent.blob.core.windows.net/sqlml/NYCTaxi_Sample.bak.

1. Haga clic en NYCTaxi_Sample. bak para descargar el archivo de copia de seguridad de la base de datos.
2. Copie el archivo en la carpeta C:\Program files\Microsoft SQL Server\MSSQL-instance-
name\MSSQL\Backup.
3. En Management Studio, haga clic con el botón derecho en Bases de datos y seleccione Restaurar
archivos y grupos de archivos .
4. Escriba NYCTaxi_Sample como nombre de la base de datos.
5. Haga clic en Desde el dispositivo y después abra la página de selección de archivos para seleccionar el
archivo de copia de seguridad. Haga clic en Agregar para seleccionar NYCTaxi_Sample.bak.
6. Active la casilla Restaurar y haga clic en Aceptar para restaurar la base de datos.

Revisión de los objetos de base de datos


Confirme que los objetos de base de datos están en la instancia de SQL Server mediante SQL Server
Management Studio. Tendría que ver la base de datos, las tablas, las funciones y los procedimientos
almacenados.

Objetos en la base de datos NYCTaxi_Sample


En la tabla siguiente se resumen los objetos creados en la base de datos de demostración de los taxis de Nueva
York.

N O M B RE DE O B JETO T IP O DE O B JETO DESC RIP C IÓ N

NYCTaxi_Sample database Crea una base de datos y dos tablas:

Tabla dbo.nyctaxi_sample: contiene el


conjunto de datos NYC Taxi principal.
Un índice de almacén de columnas
agrupado se agrega a la tabla para
mejorar el rendimiento de
almacenamiento y de consulta. La
muestra del 1 % del conjunto de datos
NYC Taxi se inserta en esta tabla.

Tabla dbo.nyc_taxi_models: se usa para


conservar el modelo de análisis
avanzado entrenado.

fnCalculateDistance función escalar Calcula la distancia directa entre las


ubicaciones de origen y destino. Esta
función se usa al crear características
de datos mediante R y T-SQL, al
entrenar y guardar un modelo y al
hacer operativo el modelo R.
N O M B RE DE O B JETO T IP O DE O B JETO DESC RIP C IÓ N

fnEngineerFeatures función con valores de tabla Crea nuevas características de datos


para el entrenamiento del modelo. Esta
función se usa al rear características de
datos y al acer operativo el modelo R.

Los procedimientos almacenados se crean mediante el script de R y Python que se encuentra en varios
tutoriales. En la tabla siguiente se resumen los procedimientos almacenados que se pueden agregar
opcionalmente a la base de datos de demostración de los taxis de Nueva York al ejecutar un script desde varias
lecciones.

P RO C EDIM IEN TO A L M A C EN A DO L EN GUA JE DESC RIP C IÓ N

RxPlotHistogram R Llama a la función RevoScaleR


rxHistogram para trazar el histograma
de una variable y, después, devuelve el
gráfico como un objeto binario. Este
procedimiento almacenado se usa al
xplorar y visualizar los datos.

RPlotRHist R Crea un gráfico mediante una función


de Hist y guarda el resultado como un
archivo PDF local. Este procedimiento
almacenado se usa al xplorar y
visualizar los datos.

RxTrainLogitModel R Entrena un modelo de regresión


logística mediante una llamada a un
paquete de R. El modelo predice el
valor de la columna tipped y se
entrena usando un 70 % de los datos
seleccionados aleatoriamente. El
resultado del procedimiento
almacenado es el modelo entrenado,
que se guarda en la tabla
nyc_taxi_models. Este procedimiento
almacenado se usa al ntrenar y