Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

SQL Server Machine Learning

Descargar como pdf o txt
Descargar como pdf o txt
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
guardar un modelo.

RxPredictBatchOutput R Llama al modelo entrenado para crear


predicciones usando el modelo. El
procedimiento almacenado acepta una
consulta como su parámetro de
entrada y devuelve una columna de
valores numéricos que contiene los
resultados para las filas de entrada.
Este procedimiento almacenado se usa
al redecir posibles resultados.

RxPredictSingleRow R Llama al modelo entrenado para crear


predicciones usando el modelo. Este
procedimiento almacenado acepta una
observación nueva como entrada, con
valores de características individuales
pasados como parámetros en línea, y
devuelve un valor que predice el
resultado de la nueva observación.
Este procedimiento almacenado se usa
al redecir posibles resultados.
P RO C EDIM IEN TO A L M A C EN A DO L EN GUA JE DESC RIP C IÓ N

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 datos
NYCTaxi_Sample e inicie una nueva consulta.
2. Ejecute algunas consultas sencillas:

SELECT TOP(10) * FROM dbo.nyctaxi_sample;


SELECT COUNT(*) FROM dbo.nyctaxi_sample;

La base de datos contiene 1,7 millones de filas.


3. Dentro de la base de datos hay la tabla nyctaxi_sample , que contiene el conjunto de datos. Esta tabla se
ha optimizado para cálculos basados en conjuntos con la incorporación de un índice de almacén de
columnas. Ejecute esta instrucción para generar un resumen rápido en la tabla.

SELECT DISTINCT [passenger_count]


, ROUND (SUM ([fare_amount]),0) as TotalFares
, ROUND (AVG ([fare_amount]),0) as AvgFares
FROM [dbo].[nyctaxi_sample]
GROUP BY [passenger_count]
ORDER BY AvgFares DESC

Los resultados deberían ser similares a los que se muestran en la captura de pantalla siguiente.

Pasos siguientes
Ahora están disponibles los datos de ejemplo de los taxis de Nueva York para poder ponerlos en práctica para el
aprendizaje.
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
Arquitectura de extensibilidad en SQL Server
Machine Learning Services
14/07/2021 • 9 minutes to read

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


En este artículo se describe la arquitectura del marco de extensibilidad para ejecutar un script externo de R o
Python en SQL Server Machine Learning Services. El script se ejecuta en un entorno de ejecución de lenguajes
como extensión del motor de base de datos principal.

Información previa
El marco de extensibilidad se ha introducido en SQL Server 2016 para admitir el entorno de ejecución de R con
R Services. SQL Server 2017 y versiones posteriores admiten Python con Machine Learning Services.
El propósito del marco de extensibilidad es proporcionar una interfaz entre SQL Server y los lenguajes de
ciencia de datos como R y Python. El objetivo es reducir la fricción al trasladar las soluciones de ciencia de datos
al entorno de producción y proteger los datos expuestos durante el proceso de desarrollo. Al ejecutar un
lenguaje de scripting de confianza en un marco seguro que administra SQL Server, los administradores de bases
de datos pueden mantener la seguridad y, al mismo tiempo, permitir el acceso a los científicos de datos a los
datos empresariales.
En el diagrama siguiente se describen visualmente las oportunidades y ventajas que ofrece la arquitectura
extensible.

Un script externo se puede ejecutar llamando a un procedimiento almacenado. En este caso, los resultados se
devuelven como resultados tabulares directamente a SQL Server. Esto facilita la generación o consumo de
aprendizaje automático desde cualquier aplicación que pueda enviar una consulta SQL y controlar los
resultados.
La ejecución de scripts externos está sujeta a la seguridad de datos de SQL Server. Un usuario que ejecuta
un script externo solo puede tener acceso a los datos que estén igualmente disponibles en una consulta
SQL. Si se produce un error en una consulta debido a permisos insuficientes, un script que ejecute el
mismo usuario también producirá un error por el mismo motivo. La seguridad de SQL Server se aplica
en el nivel de la tabla, la base de datos y la instancia. Los administradores de bases de datos pueden
administrar el acceso de los usuarios, los recursos utilizados por los scripts externos y las bibliotecas de
código externo agregadas al servidor.
Las oportunidades de escala y optimización tienen una base dual: beneficios a través de la plataforma de
base de datos (índices de almacén de columnas y gobernanza de recursos) y mejoras específicas de la
extensión, por ejemplo, al usar las bibliotecas de Microsoft de R y Python para los modelos de ciencia de
datos. Mientras que R es de subproceso único, las funciones de RevoScaleR son multiproceso y pueden
distribuir una carga de trabajo en varios núcleos.
La implementación utiliza las metodologías de SQL Server. Estas pueden ser procedimientos
almacenados que encapsulen un script externo, consultas SQL incrustadas o consultas T-SQL que llamen
a funciones como PREDICT para devolver los resultados de los modelos de previsión que se conserven
en el servidor.
Los desarrolladores con aptitudes consolidadas en herramientas y IDE específicos pueden escribir código
en esas herramientas y, después, portar el código a SQL Server.

Diagrama de la arquitectura
La arquitectura está diseñada de modo que los scripts externos se ejecuten en un proceso independiente de
SQL Server, pero con componentes que administran internamente la cadena de solicitudes de datos y
operaciones en SQL Server. En función de la versión de SQL Server, las extensiones de lenguaje compatibles
incluyen R, Python y lenguajes de terceros, como Java y .NET.
Arquitectura de los componentes en Windows:

Arquitectura de los componentes en Linux:

Los componentes incluyen un servicio Launchpad que se usa para invocar los entornos de ejecución externos y
la lógica específica de la biblioteca a fin de cargar intérpretes y bibliotecas. El iniciador carga un entorno de
ejecución de lenguajes, además de cualquier módulo de propietario. Por ejemplo, si el código incluye funciones
de RevoScaleR, se cargará un intérprete de RevoScaleR. BxlSer ver y SQL Satellite administran la
comunicación y la transferencia de datos con SQL Server.
En Linux, SQL usa un servicio Launchpad a fin de comunicarse con un proceso de Launchpad independiente
para cada usuario.

Launchpad
SQL Server Launchpad es un servicio que administra y ejecuta scripts externos, de modo similar a la forma en la
que el servicio de consulta e indexación de texto completo inicia un host independiente para procesar consultas
de texto completo. El servicio Launchpad solo puede empezar iniciadores de confianza publicados o certificados
por Microsoft, lo que garantiza que cumplan los requisitos de rendimiento y administración de los recursos.

IN IC IA DO RES DE C O N F IA N Z A EXT EN SIÓ N VERSIO N ES DE SQ L SERVER

RLauncher.dll para el lenguaje R en Extensión de R SQL Server 2016 y posterior


Windows

Pythonlauncher.dll para Python 3.5 en Extensión de Python SQL Server 2017 y versiones
Windows posteriores

RLauncher.so para el lenguaje R en Extensión de R SQL Server 2019 y versiones


Linux posteriores

Pythonlauncher.so para Python 3.5 en Extensión de Python SQL Server 2019 y versiones
Linux posteriores

El servicio SQL Server Launchpad se ejecuta en su propia cuenta de usuario. Si cambia la cuenta que ejecuta
Launchpad, asegúrese de hacerlo mediante el Administrador de configuración de SQL Server para garantizar
que los cambios se escriban en los archivos pertinentes.
En Windows, se crea un servicio SQL Server Launchpad independiente para cada instancia del motor de base de
datos a la que se ha agregado SQL Server Machine Learning Services. Hay un servicio Launchpad para cada
instancia del motor de base de datos, de modo que si tiene varias instancias que admitan scripts externos,
contará con un servicio Launchpad para cada una de ellas. Una instancia del motor de base de datos se enlaza al
servicio Launchpad creado para dicha instancia. Todas las invocaciones del script externo de un procedimiento
almacenado o de T-SQL resultan en una llamada de SQL Server al servicio Launchpad creado para la misma
instancia.
Para ejecutar tareas en un lenguaje específico admitido, Launchpad obtiene una cuenta de trabajo segura del
grupo e inicia un proceso satélite para administrar el entorno de ejecución externo. Cada proceso satélite hereda
la cuenta de usuario de Launchpad y usa esa cuenta de trabajo mientras dure la ejecución del script. Si el script
usa procesos paralelos, estos se crean en la misma cuenta de trabajo única.
En Linux, solo se admite una instancia del motor de base de datos, y hay un servicio Launchpad enlazado a la
instancia. Cuando se ejecuta un script, el servicio Launchpad inicia un proceso de Launchpad independiente con
la cuenta de usuario con pocos privilegios mssql_satellite . Cada proceso satélite hereda la cuenta de usuario
mssql_satellite de Launchpad y la usa durante la ejecución del script.

BxlServer y SQL Satellite


BxlSer ver es un ejecutable proporcionado por Microsoft que administra la comunicación entre SQL Server y el
entorno de ejecución de lenguajes. Crea los objetos de trabajo de Windows para Windows, o bien los espacios
de nombres para Linux, que se usan para contener sesiones de scripts externos. También aprovisiona carpetas
de trabajo seguras para cada trabajo de script externo y utiliza SQL Satellite a fin de administrar la transferencia
de datos entre el entorno de ejecución externo y SQL Server. Si ejecuta el Explorador de procesos mientras se
está ejecutando un trabajo, es posible que vea una o varias instancias de BxlServer.
En efecto, BxlServer es un complemento de un entorno de ejecución de lenguajes que funciona con SQL Server
para transferir datos y administrar tareas. BXL son las siglas en inglés de "lenguaje de intercambio binario" y
hace referencia al formato de datos que se usa para mover datos de manera eficiente entre SQL Server y
procesos externos.
SQL Satellite es una nueva API de extensibilidad incluida en el motor de base de datos que admite código
externo o entornos de ejecución externos implementados mediante C o C++.
BxlServer usa SQL Satellite para las tareas siguientes:
Leer datos de entrada
Escritura de datos de salida
Obtener argumentos de entrada
Escribir argumentos de salida
Control de errores
Escribir STDOUT y STDERR de vuelta en el cliente
SQL Satellite usa un formato de datos personalizado que está optimizado para una transferencia de datos
rápida entre SQL Server y lenguajes de script externos. Realiza conversiones de tipos y define los esquemas de
los conjuntos de datos de entrada y salida durante las comunicaciones entre SQL Server y el entorno de
ejecución de scripts externos.
SQL Satellite puede supervisarse mediante eventos extendidos de Windows (xEvents). Para obtener más
información, vea Eventos extendidos para SQL Server Machine Learning Services.

Canales de comunicación entre componentes


En esta sección se describen los protocolos de comunicación entre los componentes y las plataformas de datos.
TCP/IP
De forma predeterminada, la comunicación interna entre SQL Server y SQL Satellite usa TCP/IP.
Canalizaciones con nombre
El transporte de datos internos entre BxlServer y SQL Server a través de SQL Satellite usa un formato de
datos comprimidos de propietario para mejorar el rendimiento. Los datos se intercambian entre los
entornos de ejecución de lenguajes y BxlServer en formato BXL mediante canalizaciones con nombre.
ODBC
Las comunicaciones entre los clientes de ciencia de datos externos y una instancia remota de SQL Server
usan ODBC. La cuenta que envía los trabajos de script a SQL Server debe tener permisos para conectarse
a la instancia y para ejecutar scripts externos.
Además, en función de la tarea, la cuenta podría necesitar los siguientes permisos:
Lectura de datos que usa el trabajo.
Escritura de datos en tablas; por ejemplo, al guardar los resultados en una tabla.
Creación de objetos de bases de datos: por ejemplo, si se guarda el script externo como parte de un
procedimiento almacenado nuevo.
Cuando se usa SQL Server como contexto de proceso para un script ejecutado desde un cliente remoto y
el ejecutable debe recuperar datos de un origen externo, se usa ODBC para la escritura diferida.
SQL Server asigna la identidad del usuario mediante la emisión del comando remoto a la identidad del
usuario en la instancia actual y ejecuta el comando ODBC con las credenciales del usuario. La cadena de
conexión necesaria para realizar esta llamada ODBC se obtiene del código de cliente.
RODBC (solo R)
Se pueden realizar llamadas ODBC adicionales dentro del script mediante RODBC . RODBC es un popular
paquete de R que se usa para obtener acceso a datos de bases de datos relacionales, pero su rendimiento
suele ser más lento que el de proveedores equiparables que usa SQL Server. Muchos scripts de R usan
llamadas insertadas a RODBC como una manera de recuperar conjuntos de datos "secundarios" para su
uso en el análisis. Por ejemplo, el procedimiento almacenado que entrena un modelo podría definir una
consulta SQL para obtener datos para entrenar un modelo, pero podría usar una llamada RODBC
insertada para obtener factores adicionales, realizar búsquedas u obtener nuevos datos de orígenes
externos, como archivos de texto o Excel.
El código siguiente muestra una llamada RODBC insertada en un script de R:

library(RODBC);
connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name,
";Trusted_Connection=true;", sep="");
dbhandle <- odbcDriverConnect(connStr)
OutputDataSet <- sqlQuery(dbhandle, "select * from table_name");

Otros protocolos
Los procesos que puede que necesiten trabajar en "fragmentos" o transferir datos de nuevo a un cliente
remoto también pueden utilizar el formato de archivo XDF. La transferencia de datos real se realiza a
través de blobs codificados.

Consulte también
Extensión de R en SQL Server
Extensión de Python en SQL Server
Extensión del lenguaje Python en SQL Server
Machine Learning Services
14/07/2021 • 6 minutes to read

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


En este artículo se describe la extensión de Python para ejecutar scripts de Python externos con SQL Server
Machine Learning Services. La extensión agrega:
Un entorno de ejecución de Python
La distribución de Anaconda con el intérprete y el runtime de Python 3.5
Herramientas y bibliotecas estándar
Paquetes de Python en Microsoft:
revoscalepy para el análisis a escala.
microsoftml para algoritmos de aprendizaje automático.
La instalación del intérprete y del runtime de Python 3.5 garantiza una compatibilidad casi completa con las
soluciones de Python estándar. Python se ejecuta en un proceso aparte de SQL Server para garantizar que las
operaciones de base de datos no se ponen en riesgo.

Componentes de Python
SQL Server incluye paquetes tanto de código abierto como de propietario. El runtime de Python que se instala
con el programa de instalación es Anaconda 4.2 con Python 3.5. El runtime de Python se instala
independientemente de las herramientas de SQL, y se ejecuta fuera de los procesos principales del motor, en el
marco de extensibilidad. Como parte de la instalación de Machine Learning Services con Python, debe aceptar
las condiciones de la licencia pública de GNU.
SQL Server no modifica los ejecutables de Python, pero se debe usar la versión de Python que instale el
programa de instalación, ya que es en esa versión donde se compilan y prueban los paquetes de propietario.
Para ver una lista de los paquetes admitidos por la distribución de Anaconda, vaya al sitio de Continuum
Analytics: Lista de paquetes de Anaconda.
La distribución de Anaconda asociada a una determinada instancia de motor de base de datos está en la carpeta
relativa a esa instancia. Por ejemplo, si instaló el motor de base de datos de SQL Server 2017 con Machine
Learning Services y Python en la instancia predeterminada, mire en
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES .

Los paquetes de Python que Microsoft agrega para cargas de trabajo paralelas y distribuidas incluyen las
siguientes bibliotecas.

B IB L IOT EC A DESC RIP C IÓ N

revoscalepy Admite objetos de origen de datos y la exploración,


manipulación, transformación y visualización de datos.
Admite la creación de contextos de proceso remotos, así
como varios modelos de aprendizaje automático escalables,
como r xLinMod . Para más información, vea Módulo
revoscalepy en SQL Server.
B IB L IOT EC A DESC RIP C IÓ N

microsoftml Contiene algoritmos de Machine Learning que se han


optimizado para ser más rápidos y precisos, así como
transformaciones en línea para trabajar con texto e
imágenes. Para más información, vea Módulo microsoftml en
SQL Server.

Microsoftml y revoscalepy están estrechamente ligados; así, los orígenes de datos usados en microsoftml se
definen como objetos de revoscalepy. Las limitaciones de contexto de proceso de revoscalepy se trasladan a
microsoftml; es decir, todas las funciones están disponibles para las operaciones locales, pero cambiar a un
contexto de proceso remoto requiere RxInSqlServer.

Uso de Python en SQL Server


Hay que importar el módulo revoscalepy al código de Python y, después, llamar a las funciones desde ese
módulo, como cualquier otra función de Python.
Entre los orígenes de datos admitidos se incluyen las bases de datos ODBC, SQL Server y el formato de archivo
XDF para intercambiar datos con otros orígenes o con soluciones de R. Los datos de entrada de Python deben
ser tabulares. Todos los resultados de Python se deben devolver con un formato de trama de datos pandas .
Entre los contextos de proceso admitidos se incluyen el contexto de proceso local o remoto de SQL Server. Un
contexto de proceso remoto hace referencia a la ejecución de código que se inicia en un equipo como, por
ejemplo, una estación de trabajo, pero que luego cambia la ejecución del script a un equipo remoto. Cambiar el
contexto de proceso requiere que ambos sistemas tengan la misma biblioteca revoscalepy.
El contexto de proceso local, como cabría esperar, incluye la ejecución de código de Python en el mismo servidor
que la instancia del motor de base de datos, con código dentro de T-SQL o insertado en un procedimiento
almacenado. También se puede ejecutar el código desde un IDE de Python local y hacer que el script se ejecute
en el equipo de SQL Server, mediante la definición de un contexto de proceso remoto.

Arquitectura de la ejecución
En los siguientes diagramas se describe la interacción de los componentes de SQL Server con el runtime de
Python en cada uno de los escenarios admitidos: la ejecución de un script en la base de datos y la ejecución de
forma remota desde un terminal de Python, usando un contexto de proceso de SQL Server.
Scripts de Python ejecutados en base de datos
Cuando Python se ejecuta "dentro de" SQL Server, el script de Python se debe encapsular dentro de un
procedimiento almacenado especial, sp_execute_external_script.
Una vez que el script esté insertado en el procedimiento almacenado, cualquier aplicación que pueda realizar
una llamada a un procedimiento almacenado podrá iniciar la ejecución del código de Python. A partir de
entonces, SQL Server administra la ejecución del código de Python, como se resume en el siguiente diagrama.
1. Con el parámetro @language='Python' pasado al procedimiento almacenado se indica una solicitud de
runtime de Python. SQL Server envía esta solicitud al servicio Launchpad. En Linux, SQL usa un servicio
Launchpad a fin de comunicarse con un proceso de Launchpad independiente para cada usuario. Vea el
Diagrama de la arquitectura de extensibilidad para más información.
2. El servicio Launchpad inicia el selector adecuado, en este caso, PythonLauncher.
3. PythonLauncher inicia el proceso Python35 externo.
4. BxlServer coordina con el runtime de Python la administración de intercambios de datos y el
almacenamiento de los resultados del trabajo.
5. SQL Satellite administra las comunicaciones sobre las tareas y los procesos relacionados con SQL Server.
6. BxlServer usa SQL Satellite para comunicar el estado y los resultados a SQL Server.
7. SQL Server obtiene los resultados y cierra las tareas y los procesos relacionados.
Scripts de Python ejecutados desde un cliente remoto
Puede ejecutar scripts de Python desde un equipo remoto (como un equipo portátil) y hacer que se ejecuten en
el contexto del equipo de SQL Server si se cumplen estas condiciones:
Los scripts están diseñados correctamente.
El equipo remoto tiene instaladas las bibliotecas de extensibilidad que se usan en Machine Learning Services.
El paquete revoscalepy es necesario para usar contextos de proceso remotos.
En el siguiente diagrama se resume el flujo de trabajo general cuando se envían scripts desde un equipo
remoto.

1. En el caso de las funciones que se admiten en revoscalepy , el runtime de Python llama a una función de
enlace, que a su vez llama a BxlServer.
2. BxlServer se incluye en Machine Learning Services (en base de datos) y se ejecuta en un proceso
independiente del runtime de Python.
3. BxlServer determina el destino de la conexión e inicia una conexión mediante ODBC. Para ello, pasa las
credenciales proporcionadas como parte de la cadena de conexión en el script de Python.
4. BxlServer abre una conexión con la instancia de SQL Server.
5. Cuando se llama a un runtime de script externo, se invoca el servicio Launchpad, que a su vez abre el
iniciador adecuado; en este caso, PythonLauncher.dll. A partir de ese momento, el procesamiento de código
de Python se controla en un flujo de trabajo similar al de un procedimiento almacenado en T-SQL.
6. PythonLauncher realiza una llamada a la instancia del runtime de Python que hay instalada en el equipo de
SQL Server.
7. Los resultados se devuelven a BxlServer.
8. SQL Satellite administra la comunicación con SQL Server y la limpieza de los objetos de trabajo relacionados.
9. SQL Server devuelve los resultados al cliente.

Pasos siguientes
Módulo revoscalepy en SQL Server
Referencia a la función revoscalepy
Marco de extensibilidad en SQL Server
Extensiones de R y Machine Learning en SQL Server
Obtención de información de paquetes de Python
Instalación de paquetes de Python con sqlmlutils
Extensión del lenguaje R en SQL Server Machine
Learning Services
14/07/2021 • 6 minutes to read

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


En este artículo se describe la extensión de R para ejecutar scripts de Python externos con SQL Server Machine
Learning Services y SQL Server 2016 R Services. La extensión agrega:
Un entorno de ejecución dinámico
La distribución base de R con herramientas y bibliotecas estándar
Bibliotecas de Microsoft R:
RevoScaleR para el análisis a escala.
MicrosoftML para algoritmos de aprendizaje automático.
Otras bibliotecas para el acceso a los datos o al código R en SQL Server.

Componentes de R
SQL Server incluye paquetes tanto de código abierto como de propietario. Las bibliotecas de R base se instalan
a través de la distribución de R de código abierto de Microsoft: Microsoft R Open (MRO). Los usuarios actuales
de R deben poder portar su código de R y ejecutarlo como un proceso externo en SQL Server con pocas
modificaciones o ninguna. MRO se instala independientemente de las herramientas de SQL y se ejecuta fuera de
los procesos principales del motor, en el marco de extensibilidad. Durante la instalación, debe dar su
consentimiento a los términos de la licencia de código abierto. Cuando lo haga, podrá ejecutar paquetes de R
estándar sin necesidad de realizar ninguna modificación más, tal y como sucede con cualquier otra distribución
de código abierto de R.
SQL Server no modifica los ejecutables base de R, pero se debe usar la versión de R que instala el programa de
instalación, ya que esa versión es en la que se compilan y prueban los paquetes de propietario. Para obtener
más información sobre las diferencias entre MRO y una distribución base de R que podría obtener de CRAN,
vea Interoperabilidad con el lenguaje R y los productos y características de Microsoft R.
La distribución de paquetes base de R que instala el programa de instalación se puede encontrar en la carpeta
asociada a la instancia. Por ejemplo, si se ha instalado R Services en la instancia predeterminada de SQL Server,
las bibliotecas de R estarán en esta carpeta
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library de forma predeterminada. De
forma similar, las herramientas de R asociadas a la instancia predeterminada se encontrarían en la carpeta
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\bin por defecto.

Los paquetes de R que agrega Microsoft para cargas de trabajo paralelas y distribuidas incluyen las bibliotecas
siguientes.

B IB L IOT EC A DESC RIP C IÓ N


B IB L IOT EC A DESC RIP C IÓ N

RevoScaleR Admite objetos de origen de datos y la exploración,


manipulación, transformación y visualización de datos.
Admite la creación de contextos de proceso remotos, así
como varios modelos de aprendizaje automático escalables,
como r xLinMod . Estas API se han optimizado para analizar
los conjuntos de datos que son demasiado grandes para
caber en la memoria, así como para realizar cálculos que se
distribuyen a través de varios núcleos o procesadores. El
paquete RevoScaleR también admite el formato de archivo
XDF, lo que permite mover y almacenar más rápidamente los
datos empleados en los análisis. El formato XDF usa el
almacenamiento en columnas, es portátil y se puede usar
para cargar y manipular datos procedentes de distintos
orígenes, como texto, SPSS o una conexión ODBC.

MicrosoftML Contiene algoritmos de Machine Learning que se han


optimizado para ser más rápidos y precisos, así como
transformaciones en línea para trabajar con texto e
imágenes. Para obtener más información, vea MicrosoftML
en SQL Server.

Uso de R en SQL Server


Puede generar scripts de R mediante funciones base, pero para beneficiarse del procesamiento múltiple, debe
importar los módulos RevoScaleR y MicrosoftML en el código R y, después, llamar a sus funciones para crear
modelos que se ejecuten en paralelo.
Entre los orígenes de datos admitidos se incluyen las bases de datos ODBC, SQL Server y el formato de archivo
XDF para intercambiar datos con otros orígenes o con soluciones de R. Los datos de entrada deben ser
tabulares. Todos los resultados de R se deben devolver en formato de trama de datos.
Entre los contextos de proceso admitidos se incluyen el contexto de proceso local o remoto de SQL Server. Un
contexto de proceso remoto hace referencia a la ejecución de código que se inicia en un equipo como, por
ejemplo, una estación de trabajo, pero que luego cambia la ejecución del script a un equipo remoto. Cambiar el
contexto de proceso requiere que ambos sistemas tengan la misma biblioteca RevoScaleR.
El contexto de proceso local, como cabría esperar, incluye la ejecución de código de R en el mismo servidor que
la instancia del motor de base de datos, con código dentro de T-SQL o incrustado en un procedimiento
almacenado. También se puede ejecutar el código desde un IDE de R local y hacer que el script se ejecute en el
equipo de SQL Server mediante la definición de un contexto de proceso remoto.

Arquitectura de la ejecución
En los diagramas siguientes se describe la interacción de los componentes de SQL Server con el entorno de
ejecución de R en cada uno de los escenarios admitidos: ejecutar un script en la base de datos y ejecutarlo de
forma remota desde una línea de comandos de R, utilizando un contexto de proceso de SQL Server.
Scripts de R ejecutados desde SQL Server en una base de datos
El código de R que se ejecuta desde "dentro" de SQL Server se ejecuta mediante una llamada a un
procedimiento almacenado. Por lo tanto, cualquier aplicación que pueda llamar a un procedimiento almacenado
podrá iniciar la ejecución de código de R. A partir de entonces, SQL Server administra la ejecución del código de
R, como se resume en el diagrama siguiente.
1. Mediante el parámetro @language='R' pasado al procedimiento almacenado sp_execute_external_script, se
indica una solicitud para el tiempo de ejecución de R. SQL Server envía esta solicitud al servicio Launchpad.
En Linux, SQL usa un servicio Launchpad a fin de comunicarse con un proceso de Launchpad independiente
para cada usuario. Vea el Diagrama de la arquitectura de extensibilidad para más información.
2. El servicio Launchpad inicia el selector adecuado, en este caso, RLauncher.
3. RLauncher inicia el proceso externo de R.
4. BxlServer coordina con el entorno de ejecución de R la administración de los intercambios de datos con
SQL Server y el almacenamiento de los resultados del trabajo.
5. SQL Satellite administra las comunicaciones sobre las tareas y los procesos relacionados con SQL Server.
6. BxlServer usa SQL Satellite para comunicar el estado y los resultados a SQL Server.
7. SQL Server obtiene los resultados y cierra las tareas y los procesos relacionados.
Scripts de R ejecutados desde un cliente remoto
Al conectarse desde un cliente de ciencia de datos remoto que admite Microsoft R, puede ejecutar funciones de
R en el contexto de SQL Server mediante funciones de RevoScaleR. Este es un flujo de trabajo diferente del
anterior y se resume en el diagrama siguiente.

1. Para las funciones de RevoScaleR, el entorno de ejecución de R llama a una función de enlace que a su vez
llama a BxlServer.
2. BxlServer se proporciona con Microsoft R y se ejecuta en un proceso independiente del tiempo de ejecución
de R.
3. BxlServer determina el destino de la conexión e inicia una conexión mediante ODBC. Para ello, pasa las
credenciales proporcionadas como parte de la cadena de conexión en el objeto de origen de datos de R.
4. BxlServer abre una conexión con la instancia de SQL Server.
5. Para una llamada de R, se invoca el servicio LaunchPad, que a su vez inicia el selector adecuado, RLauncher.
Posteriormente, el procesamiento del código de R es similar al proceso para ejecutar código de R desde T-
SQL.
6. RLauncher realiza una llamada a la instancia del entorno de ejecución de R que está instalada en el equipo
con SQL Server.
7. Los resultados se devuelven a BxlServer.
8. SQL Satellite administra la comunicación con SQL Server y la limpieza de los objetos de trabajo relacionados.
9. SQL Server devuelve los resultados al cliente.

Consulte también
Marco de extensibilidad en SQL Server
Extensiones de Python y aprendizaje automático en SQL Server
Arquitectura de seguridad del marco de
extensibilidad en SQL Server Machine Learning
Services
14/07/2021 • 18 minutes to read

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


En este artículo se describe la arquitectura de seguridad que se usa para integrar el motor de base de datos de
SQL Server y los componentes relacionados con el marco de extensibilidad en SQL Server Machine Learning
Services. Examina los elementos protegibles, los servicios, la identidad del proceso y los permisos. Los puntos
clave que se describen en este artículo incluyen la finalidad de launchpad, SQLRUserGroup y las cuentas de
trabajo, el aislamiento de procesos de scripts externos, y cómo se asignan las identidades de usuario a las
cuentas de trabajo.
Para obtener más información sobre los conceptos clave y los componentes de extensibilidad en SQL Server,
vea Arquitectura de extensibilidad en SQL Server Machine Learning Services.

Elementos protegibles para scripts externos


Los scripts externos se envían como parámetros de entrada a un procedimiento almacenado del sistema creado
para este propósito, o bien se ajustan en un procedimiento almacenado que deberá definir personalmente. Los
scripts pueden estar escritos en R, Python o lenguajes externos como Java o .NET. También puede tener en una
tabla de base de datos modelos previamente entrenados y almacenados en un formato binario, a los que puede
llamar en una función PREDICT de T-SQL.
Dado que el script se proporciona a través de objetos de esquema de base de datos, procedimientos
almacenados y tablas existentes, no hay ningún elemento protegible nuevo para SQL Server Machine Learning
Services.
Independientemente de la forma en que use el script o de lo que lo conforme, los objetos de base de datos se
crearán y, probablemente, se guardarán, pero no se introducirá ningún nuevo tipo de objeto para el script de
almacenamiento. Como resultado, la capacidad de consumir, crear y guardar objetos de base de datos depende
en gran medida de los permisos de base de datos ya definidos para los usuarios.

Permisos
El modelo de seguridad de datos de SQL Server de inicios de sesión y roles de base de datos se extiende al
script externo. Se requiere un inicio de sesión de SQL Server o una cuenta de usuario de Windows para ejecutar
scripts externos que utilicen datos de SQL Server o que se ejecuten con SQL Server como contexto de proceso.
Los usuarios de bases de datos que tienen permisos para ejecutar una consulta pueden acceder a los mismos
datos desde el script externo.
El inicio de sesión o la cuenta de usuario identifica la entidad de seguridad, que podría necesitar varios niveles
de acceso, dependiendo de los requisitos de los scripts externos:
Permiso para acceder a la base de datos donde se habilitan los scripts externos.
Permisos para leer datos de objetos protegidos como tablas.
La capacidad de escribir nuevos datos en una tabla, como un modelo o los resultados de la puntuación.
La capacidad de crear objetos, como tablas, procedimientos almacenados que usan el script externo o
funciones personalizadas que usan el trabajo de script externo.
El derecho a instalar nuevos paquetes en el equipo de SQL Server o a usar paquetes proporcionados a un
grupo de usuarios.
Cada persona que ejecuta un script externo mediante SQL Server como contexto de ejecución debe estar
asignada a un usuario de la base de datos. En lugar de establecer individualmente los permisos de usuario de la
base de datos, puede crear roles para administrar conjuntos de permisos y asignar usuarios a esos roles, en
lugar de establecer individualmente los permisos de usuario.
Para obtener más información, vea Concesión de permiso a los usuarios para SQL Server Machine Learning
Services.

Permisos al usar una herramienta de cliente externa


Los usuarios que utilizan el script en una herramienta de cliente externa deben tener su cuenta o inicio de sesión
asignada a un usuario de la base de datos si tienen que ejecutar un script externo en la base de datos, o bien
acceder a datos y objetos de base de datos. Los mismos permisos son necesarios si el script externo se envía
desde un cliente de ciencia de datos remoto o se ejecuta mediante un procedimiento almacenado de T-SQL.
Por ejemplo, supongamos que ha creado un script externo que se ejecuta en el equipo local y desea ejecutar ese
script en SQL Server. Debe asegurarse de que se cumplan las condiciones siguientes:
La base de datos permite las conexiones remotas.
El inicio de sesión de SQL o la cuenta de Windows que ha usado para acceder a la base de datos se ha
agregado al SQL Server en el nivel de instancia.
El inicio de sesión de SQL o el usuario de Windows deben tener permiso para ejecutar scripts externos. Por lo
general, este permiso solo lo puede agregar un administrador de bases de datos.
El inicio de sesión de SQL o el usuario de Windows deben agregarse como usuario con los permisos
adecuados en cada base de datos en la que el script externo realice cualquiera de estas operaciones:
Recuperar datos.
Escribir o actualizar datos.
Crear objetos como tablas o procedimientos almacenados.
Una vez que se ha aprovisionado el inicio de sesión o la cuenta de usuario de Windows y se han dado los
permisos necesarios, puede ejecutar un script externo en SQL Server usando un objeto de origen de datos en R
o la biblioteca revoscalepy en Python, o llamando a un procedimiento almacenado que contenga el script
externo.
Siempre que se inicie un script externo desde SQL Server, la seguridad del motor de base de datos obtiene el
contexto de seguridad del usuario que ha iniciado el trabajo y administra las asignaciones del usuario o del
inicio de sesión a objetos protegibles.
Por lo tanto, todos los scripts externos que se inician desde un cliente remoto deben especificar la información
de usuario o inicio de sesión como parte de la cadena de conexión.

Servicios usados en el procesamiento externo (launchpad)


El marco de extensibilidad agrega un nuevo servicio NT a la lista de servicios en una instalación de SQL Server:
SQL Ser ver Launchpad (MSSSQLSERVER) .
El motor de base de datos usa el servicio launchpad de SQL Server para crear instancias de una sesión de
scripts externos como un proceso independiente. El proceso se ejecuta con una cuenta con pocos privilegios
diferente a SQL Server, Launchpad y la identidad del usuario en la que se ha ejecutado el procedimiento
almacenado o la consulta de host. La ejecución de un script en un proceso independiente, en una cuenta con
pocos privilegios, es la base del modelo de aislamiento y seguridad para los scripts externos en SQL Server.
SQL Server también mantiene una asignación de la identidad del usuario que realiza la llamada a la cuenta de
trabajo sin privilegios que se usa para iniciar el proceso satélite. En algunos escenarios, en los que el script o el
código devuelven la llamada a SQL Server para los datos y las operaciones, SQL Server puede administrar la
transferencia de identidad sin problemas. El script que contiene instrucciones SELECT o funciones de llamada y
otros objetos de programación normalmente se realizará correctamente si el usuario que realiza la llamada
tiene permisos suficientes.

NOTE
De forma predeterminada, SQL Server Launchpad está configurado para ejecutarse con NT Ser vice\MSSQLLaunchpad ,
que se aprovisiona con todos los permisos necesarios para ejecutar scripts externos. Para obtener más información sobre
las opciones configurables, vea Configuración del servicio launchpad de SQL Server.

Servicios usados en el procesamiento externo (launchpad)


El marco de extensibilidad agrega un nuevo servicio NT a la lista de servicios en una instalación de SQL Server:
SQL Ser ver Launchpad (MSSSQLSERVER) .
El motor de base de datos usa el servicio launchpad de SQL Server para crear instancias de una sesión de
scripts externos como un proceso independiente. El proceso se ejecuta con la identidad de usuario de
launchpad, pero con la restricción agregada de estar contenida dentro de un objeto AppContainer. La ejecución
de un script en un proceso independiente, bajo AppContainer, es la base del modelo de aislamiento y seguridad
para los script externos en SQL Server.
SQL Server también mantiene una asignación de la identidad del usuario que realiza la llamada a la cuenta de
trabajo sin privilegios que se usa para iniciar el proceso satélite. En algunos escenarios, en los que el script o el
código devuelven la llamada a SQL Server para los datos y las operaciones, SQL Server puede administrar la
transferencia de identidad sin problemas. El script que contiene instrucciones SELECT o funciones de llamada y
otros objetos de programación normalmente se realizará correctamente si el usuario que realiza la llamada
tiene permisos suficientes.

NOTE
De forma predeterminada, SQL Server Launchpad está configurado para ejecutarse con NT Ser vice\MSSQLLaunchpad ,
que se aprovisiona con todos los permisos necesarios para ejecutar scripts externos. Para obtener más información sobre
las opciones configurables, vea Configuración del servicio launchpad de SQL Server.

Servicios usados en el procesamiento externo


El marco de extensibilidad agrega un nuevo demonio en una instalación de SQL Server: mssql-launchpadd.
mssql-launchpadd se ejecuta bajo la cuenta sin privilegios mssql_launchpadd que se crea al instalar el paquete
mssql-server-extensibility.
Solo se admite una instancia del motor de base de datos, y hay un servicio launchpad enlazado a la instancia.
Cuando se ejecuta un script, el servicio launchpad inicia un proceso launchpad independiente con la cuenta de
usuario sin privilegios mssql_satellite en su propio PID nuevo, IPC, montaje y espacio de nombres de red. Cada
proceso satélite hereda la cuenta de usuario mssql_satellite de Launchpad y la usa durante la ejecución del
script.
Para obtener más información, vea Arquitectura de extensibilidad en SQL Server Machine Learning Services.
Identidades usadas durante el procesamiento (SQLRUserGroup)
SQLRUserGroup (grupo de usuarios restringidos de SQL) está creado por el programa de instalación SQL
Server y contiene un grupo de cuentas de usuario de Windows locales con pocos privilegios. Cuando se necesita
un proceso externo, launchpad toma una cuenta de trabajo disponible y la usa para ejecutar un proceso. En
concreto, launchpad activa una cuenta de trabajo disponible, la asigna a la identidad del usuario que realiza la
llamada y ejecuta el script en la cuenta de trabajo.
SQLRUserGroup está vinculado a una instancia específica. Para cada instancia en la que se haya
habilitado el aprendizaje automático, se requiere un grupo de cuentas profesionales independiente de
cuentas. Las cuentas no se pueden compartir entre instancias.
El tamaño del grupo de cuentas de usuario es estático y el valor predeterminado es 20, que admite 20
sesiones simultáneas. El número de sesiones del runtime externas que se puede iniciar de forma
simultánea está limitado por el tamaño de este grupo de cuentas de usuario.
Los nombres de las cuentas profesionales del bloque presentan el formato SQLInstanceName nn. Por
ejemplo, en una instancia predeterminada, SQLRUserGroup contiene las cuentas denominadas
MSSQLSERVER01, MSSQLSERVER02 y así sucesivamente hasta MSSQLSERVER20.
Las tareas en paralelo no consumen cuentas adicionales. Por ejemplo, si un usuario ejecuta una tarea de
puntuación que utiliza el procesamiento en paralelo, se reutiliza la misma cuenta de trabajo para todos los
subprocesos. Si piensa hacer un uso intensivo del aprendizaje automático, puede aumentar el número de
cuentas que se usan para ejecutar scripts externos. Para obtener más información, vea Escalar la ejecución
simultánea de scripts externos en SQL Server Machine Learning Services.
Permisos concedidos a SQLRUserGroup
De forma predeterminada, los miembros de SQLRUserGroup tienen permisos de lectura y ejecución en los
archivos de los directorios de SQL Server Binn , R_SERVICES y PYTHON_SERVICES . Esto incluye el acceso a
los archivos ejecutables, las bibliotecas y los conjuntos de archivos integrados en las distribuciones de R y
Python instaladas con SQL Server.
Para proteger los recursos confidenciales en SQL Server, puede optar por definir una lista de control de acceso
(ACL) que deniegue el acceso a SQLRUserGroup . Asimismo, también puede conceder permisos a los recursos
de datos locales que existen en el equipo host, además del mismo SQL Server.
De forma predeterminada, SQLRUserGroup no tiene ningún permiso ni inicio de sesión de base de datos para
ningún dato. En determinadas circunstancias, es posible que le interese crear un inicio de sesión para permitir
las conexiones de bucle invertido, especialmente cuando una identidad de Windows de confianza se
corresponde con el usuario que realiza la llamada. Esta capacidad se denomina autenticación implícita. Para
obtener más información, vea Agregar SQLRUserGroup como usuario de base de datos.

Asignación de identidades
Cuando se inicia una sesión, launchpad asigna la identidad del usuario que realiza la llamada a una cuenta de
trabajo. Solo se puede asignar un usuario externo de Windows o un inicio de sesión de SQL válido a una cuenta
profesional mientras dure el procedimiento almacenado de SQL que ejecuta el script externo. Las consultas en
paralelo desde el mismo inicio de sesión se asignan a la misma cuenta de trabajo de usuario.
Durante la ejecución, launchpad crea carpetas temporales para almacenar datos de la sesión y los elimina
cuando finaliza la sesión. Los directorios tienen acceso restringido. En R, RLauncher realiza esta tarea. En Python,
PythonLauncher realiza esta tarea. Cada cuenta profesional individual está restringida a su propia carpeta y no
puede acceder a los archivos contenidos en carpetas situadas por encima de su propio nivel. Sin embargo, las
cuentas profesionales pueden leer, escribir o eliminar elementos secundarios en la carpeta de trabajo de la
sesión que se ha creado. Si es administrador del equipo, puede ver los directorios creados para cada proceso.
Cada directorio se identifica mediante su GUID de sesión.
Aislamiento de AppContainer
El aislamiento se consigue a través de instancias de AppContainer. En tiempo de ejecución, cuando se detecta un
script externo 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. Para obtener más información, vea Configuración de firewall para SQL Server Machine
Learning Services.

Asignación de identidades
Cuando se inicia una sesión, launchpad asigna la identidad del usuario que realiza la llamada a un objeto
AppContainer .

NOTE
En SQL Server 2019 y versiones posteriores, SQLRUserGroup solo tiene un miembro que ahora es la única cuenta de
servicio de SQL Server Launchpad, en lugar de varias cuentas de trabajo.

Asignación de identidades
El demonio de Launchpadd (con doble "D": mssql-launchpadd) asigna la identidad del usuario que realiza la
llamada a un proceso launchpad (con una sola "D") independiente con una carpeta "launchpad GUID" y un
certificado satélite. Estas carpetas launchpad GUID se crean en /var/opt/mssql-extensibility/data/ . El proceso
de launchpad usa este certificado para volver a autenticarse en SQL y, después, crea carpetas temporales para
cada GUID de sesión en la carpeta launchpad GUID. El proceso satélite (R, Python o ExtHost) puede acceder a la
carpeta launchpad GUID, el certificado que contiene y su carpeta GUID de sesión.
El script de SQL siguiente imprime el contenido de las carpetas launchpad.

EXECUTE sp_execute_external_script @language = N'R'


,@script = N'
print("Contents of /var/opt/mssql-extensibility/data :");
print(system("ls -al /var/opt/mssql-extensibility/data"));
print("Contents of Launchpad GUID folder:");
print(system("ls -al /var/opt/mssql-extensibility/data/*"));
print(system("ls -al /var/opt/mssql-extensibility/data/*/*"))
'
,@input_data_1 = N'SELECT 1 AS hello'

Autenticación implícita (solicitudes de bucle invertido)


La autenticación implícita describe el comportamiento de la solicitud de conexión en la que los procesos
externos que funcionan como cuentas de trabajo sin privilegios se presentan como una identidad de usuario de
confianza para SQL Server en solicitudes de bucle invertido para datos u operaciones. Como concepto, la
autenticación implícita es exclusiva de la autenticación de Windows, en cadenas de conexión de SQL Server que
especifican una conexión de confianza, en las solicitudes que se originan en procesos externos como el script de
R o Python. A veces también se denomina bucle invertido.
Las conexiones de confianza se pueden ejecutar desde el script externo, pero solo con una configuración
adicional. En la arquitectura de extensibilidad, los procesos externos se ejecutan en cuentas de trabajo y heredan
los permisos del elemento SQLRUserGroup principal. Cuando una cadena de conexión especifica
Trusted_Connection=True , la identidad de la cuenta profesional se presenta en la solicitud de conexión, que SQL
Server desconoce de forma predeterminada.
Para que las conexiones de confianza se realicen correctamente, debe crear un inicio de sesión de base de datos
para SQLRUserGroup . Después de hacerlo, cualquier conexión de confianza de cualquier miembro de
SQLRUserGroup tiene derechos de inicio de sesión en SQL Server. Para obtener instrucciones paso a paso, vea
Add SQLRUserGroup to a database login (Agregar SQLRUserGroup a un inicio de sesión de base de datos).
Las conexiones de confianza no son la formulación más habitual para una solicitud de conexión. Cuando el
script externo especifica una conexión, puede ser más común usar un inicio de sesión de SQL o un nombre de
usuario y una contraseña completos si la conexión es a un origen de datos ODBC.
Cómo funciona la autenticación implícita para sesiones de script externas
En el diagrama siguiente se muestra la interacción de los componentes de SQL Server con el runtime del
lenguaje y cómo realiza la autenticación implícita en Windows.

Autenticación implícita (solicitudes de bucle invertido)


La autenticación implícita describe el comportamiento de la solicitud de conexión en la que los procesos
externos que se ejecutan en objetos AppContainer se presentan como una identidad de usuario de confianza
para SQL Server en solicitudes de bucle invertido para datos u operaciones. Como concepto, la autenticación
implícita ya no es exclusiva de la autenticación de Windows, en cadenas de conexión de SQL Server que
especifican una conexión de confianza, en las solicitudes que se originan en procesos externos como el script de
R o Python. A veces también se denomina bucle invertido.
Mediante la administración de la identidad y las credenciales, AppContainer impide el uso de las credenciales de
usuario para acceder a recursos o iniciar sesión en otros entornos. El entorno de AppContainer crea un
identificador que usa las identidades combinadas del usuario y la aplicación, por lo que las credenciales son
únicas para cada emparejamiento de usuario y aplicación, y la aplicación no puede suplantar al usuario. Para
más información, vea Aislamiento de AppContainer.
Para obtener más información sobre las conexiones de bucle invertido, vea Conexión de bucle invertido a
SQL Server desde un script de Python o R.
Cómo funciona la autenticación implícita para sesiones de script externas
En el diagrama siguiente se muestra la interacción de los componentes de SQL Server con el runtime del
lenguaje y cómo realiza la autenticación implícita en Windows.

Autenticación implícita (solicitudes de bucle invertido)


La autenticación implícita describe el comportamiento de la solicitud de conexión en la que los procesos
externos que funcionan como usuarios mssql_satellite sin privilegios en sus propios espacios de nombres se
presentan como una identidad de usuario de confianza para SQL Server en solicitudes de bucle invertido para
datos u operaciones. A veces también se denomina bucle invertido.
Una conexión de bucle invertido se consigue mediante el certificado satélite de la carpeta de launchpad GUID
para volver a autenticarse en SQL Server con el proceso satélite. La identidad del usuario que realiza la llamada
se asigna a este certificado y, por tanto, el proceso satélite que se vuelve a conectar a SQL Server con el
certificado se puede asignar de nuevo al usuario que realiza la llamada.
Para obtener más información, vea Conexión de bucle invertido a SQL Server desde un script de Python o R.
Cómo funciona la autenticación implícita para sesiones de script externas
En el diagrama siguiente se muestra la interacción de los componentes de SQL Server con el runtime del
lenguaje y cómo realiza la autenticación implícita en Linux.

No se admite el cifrado de datos transparente en reposo


El cifrado de datos transparente (TDE) no se admite para los datos enviados al runtime del script externo o que
se reciban de este. La razón es que el proceso externo se ejecuta fuera del proceso de SQL Server. Por lo tanto,
los datos utilizados por el runtime externo no están protegidos por las características de cifrado del motor de
base de datos. Este comportamiento no se diferencia en nada de cualquier otro cliente que se ejecute en el
equipo de SQL Server, que lea los datos de la base de datos y haga una copia.
Por este motivo, el TDE no se aplica a ningún dato que se use en los scripts externos, a ningún dato que se
guarde en el disco ni a ningún resultado intermedio persistente. Sin embargo, se siguen aplicando otros tipos de
cifrado, como el cifrado de BitLocker de Windows o cifrado de terceros en el nivel de archivo o carpeta.
En el caso de Always Encrypted, los runtimes externos no tienen acceso a las claves de cifrado. Por lo tanto, no
se pueden enviar datos a los scripts.

Pasos siguientes
En este artículo, ha aprendido los componentes y el modelo de interacción de la arquitectura de seguridad
integrada en el marco de extensibilidad. Los puntos clave que se describen en este artículo incluyen la finalidad
de launchpad, SQLRUserGroup y las cuentas de trabajo, el aislamiento de procesos de scripts externos, y cómo
se asignan las identidades de usuario a las cuentas de trabajo.
Como paso siguiente, revise las instrucciones para conceder permisos. En el caso de los servidores que usan la
autenticación de Windows, también debe revisar Add SQLRUserGroup to a database login (Agregar
SQLRUserGroup a un inicio de sesión de base de datos).
Conexión de bucle invertido con SQL Server desde
un script de Python o R
14/07/2021 • 3 minutes to read

Se aplica a: SQL Server 2019 (15.x) Instancia administrada de Azure SQL


Obtenga información sobre cómo usar una conexión de bucle invertido con Machine Learning Services para
volver a conectar con SQL Server a través de ODBC a fin de leer o escribir datos de un script de Python o R
ejecutado desde sp_execute_external_script. Se puede utilizar cuando no sea posible usar los argumentos
InputDataSet y OutputDataSet de sp_execute_external_script .

Cadena de conexión
Para crear una conexión de bucle invertido, debe usar una cadena de conexión correcta. Los argumentos
obligatorios comunes son el nombre del controlador ODBC, la dirección del servidor y el nombre de la base de
datos.
Cadena de conexión en Windows
Para la autenticación en SQL Server en Windows, el script de Python o R puede usar el atributo de cadena de
conexión Trusted_Connection para autenticarse como el mismo usuario que ejecutó
sp_execute_external_script.
Este es un ejemplo de la cadena de conexión de bucle invertido en Windows:

"Driver=SQL Server;Server=.;Database=nameOfDatabase;Trusted_Connection=Yes;"

Cadena de conexión en Linux


Para la autenticación en SQL Server en Linux, el script de Python o R debe utilizar los atributos
ClientCer tificate y ClientKey del controlador ODBC para autenticarse como el mismo usuario que ejecutó
sp_execute_external_script . Esto requiere el uso del controlador ODBC más reciente versión 17.4.1.1.

Este es un ejemplo de la cadena de conexión de bucle invertido en Linux:

"Driver=ODBC Driver 17 for SQL


Server;Server=fe80::8012:3df5:0:5db1%eth0;Database=nameOfDatabase;ClientCertificate=file:/var/opt/mssql-
extensibility/data/baeaac72-60b3-4fae-acfd-c50eff5d34a2/sqlsatellitecert.pem;ClientKey=file:/var/opt/mssql-
extensibility/data/baeaac72-60b3-4fae-acfd-
c50eff5d34a2/sqlsatellitekey.pem;TrustServerCertificate=Yes;Trusted_Connection=no;Encrypt=Yes"

La dirección del servidor, la ubicación del archivo de certificado de cliente y la ubicación del archivo de clave de
cliente son únicas para cada sp_execute_external_script y se pueden obtener mediante el uso de la API
r x_get_sql_loopback_connection_string() para Python o r xGetSqlLoopbackConnectionString() para R.
Para obtener más información sobre los atributos de la cadena de conexión, consulte Palabras clave y atributos
de DSN y de la cadena de conexión para Microsoft ODBC Driver for SQL Server.
Cadena de conexión en Azure SQL Managed Instance
Para generar la cadena de conexión para Azure SQL Managed Instance, vea los ejemplos de las secciones
siguientes. Utilice ODBC Driver 11 for SQL Ser ver como controlador ODBC para las conexiones de bucle
invertido.
Generación de una cadena de conexión con revoscalepy para Python
Puede usar la API r x_get_sql_loopback_connection_string() en revoscalepy con el fin de generar una
cadena de conexión correcta para una conexión de bucle invertido en un script de Python.
Acepta los argumentos siguientes:

A RGUM EN TO DESC RIP C IÓ N

name_of_database Nombre de la base de datos con la que se va a realizar la


conexión

odbc_driver Nombre del controlador ODBC

Ejemplos
Ejemplo para SQL Server en Windows:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from revoscalepy import rx_get_sql_loopback_connection_string, RxSqlServerData, rx_data_step
loopback_connection_string = rx_get_sql_loopback_connection_string(odbc_driver="SQL Server",
name_of_database="DBName")
print("Connection String:{0}".format(loopback_connection_string))
data_set = RxSqlServerData(sql_query = "select col1, col2 from tableName",
connection_string = loopback_connection_string)
OutputDataSet = rx_data_step(data_set)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Ejemplo para SQL Server en Linux:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from revoscalepy import rx_get_sql_loopback_connection_string, RxSqlServerData, rx_data_step
loopback_connection_string = rx_get_sql_loopback_connection_string(odbc_driver="ODBC Driver 17 for SQL
Server",
name_of_database="DBName")
print("Loopback Connection String:{0}".format(loopback_connection_string))
data_set = RxSqlServerData(sql_query = "select col1, col2 from tableName",
connection_string = loopback_connection_string)
OutputDataSet = rx_data_step(data_set)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Ejemplo para Azure SQL Managed Instance:


EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from revoscalepy import rx_get_sql_loopback_connection_string, RxSqlServerData, rx_data_step
loopback_connection_string = rx_get_sql_loopback_connection_string(odbc_driver="ODBC Driver 11 for SQL
Server", name_of_database="DBName")
print("Connection String:{0}".format(loopback_connection_string))
data_set = RxSqlServerData(sql_query = "select col1, col2 from tableName",
connection_string = loopback_connection_string)
OutputDataSet = rx_data_step(data_set)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Generación de una cadena de conexión con RevoScaleR para R


Puede usar la API r xGetSqlLoopbackConnectionString() en RevoScaleR para generar una cadena de
conexión correcta para una conexión de bucle invertido en un script de R.
Acepta los argumentos siguientes:

A RGUM EN TO DESC RIP C IÓ N

nameOfDatabase Nombre de la base de datos con la que se va a realizar la


conexión

odbcDriver Nombre del controlador ODBC

Ejemplos
Ejemplo para SQL Server en Windows:

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
loopbackConnectionString <- rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName", odbcDriver ="SQL
Server")
print(paste("Connection String:", loopbackConnectionString))
dataSet <- RxSqlServerData(sqlQuery = "select col1, col2 from tableName",
connectionString = loopbackConnectionString)
OutputDataSet <- rxDataStep(dataSet)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Ejemplo para SQL Server en Linux:


EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
loopbackConnectionString <- rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName",
odbcDriver ="ODBC Driver 17 for SQL
Server")
print(paste("Connection String:", loopbackConnectionString))
dataSet <- RxSqlServerData(sqlQuery = "select col1, col2 from tableName",
connectionString = loopbackConnectionString)
OutputDataSet <- rxDataStep(dataSet)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Ejemplo para Azure SQL Managed Instance:

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
loopbackConnectionString <- rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName", odbcDriver ="ODBC
Driver 11 for SQL Server")
print(paste("Connection String:", loopbackConnectionString))
dataSet <- RxSqlServerData(sqlQuery = "select col1, col2 from tableName",
connectionString = loopbackConnectionString)
OutputDataSet <- rxDataStep(dataSet)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Pasos siguientes
Microsoft ODBC driver for SQL Server
revoscalepy
RevoScaleR
Uso de datos de cubos OLAP en R
14/07/2021 • 7 minutes to read

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


El paquete olapR es un paquete de R en SQL Server Machine Learning Services que permite ejecutar consultas
MDX para obtener datos de cubos OLAP. Con este paquete, no necesita crear servidores vinculados ni limpiar
conjuntos de filas planas; se pueden obtener datos OLAP directamente de R.
Este artículo describe la API, junto con una introducción a OLAP y MDX para los usuarios de R que podrían ser
nuevos en las bases de datos de cubos multidimensionales.

IMPORTANT
Una instancia de Analysis Services puede admitir cubos multidimensionales convencionales o modelos tabulares, pero una
instancia no puede admitir ambos tipos de modelos. Por lo tanto, antes de intentar crear una consulta MDX en un cubo,
compruebe que la instancia de Analysis Services contiene modelos multidimensionales.

¿Qué es un cubo OLAP?


OLAP es la forma abreviada para designar el procesamiento analítico en línea. Las soluciones OLAP se usan
mucho para capturar y almacenar datos empresariales críticos a lo largo del tiempo. Hay una serie de
herramientas, paneles y visualizaciones que usan datos OLAP para el análisis empresarial. Para obtener más
información, vea Procesamiento analítico en línea.
Microsoft proporciona Analysis Services, que permite diseñar, implementar y consultar datos OLAP en forma de
cubos o modelos tabulares. Un cubo es una base de datos multidimensional. Las dimensiones son similares a
las de los datos, o factores en R: las dimensiones se utilizan para identificar un subconjunto determinado de
datos que desea resumir o analizar. Por ejemplo, el tiempo es una dimensión importante, tanto para que muchas
soluciones OLAP incluyan varios calendarios definidos de forma predeterminada, como para usarlo al
segmentar y resumir los datos.
Por motivos de rendimiento, una base de datos OLAP calcula normalmente resúmenes (o agregaciones) de
antemano y, a continuación, los almacena para una recuperación más rápida. Los resúmenes se basan en
medidas, que representan las fórmulas que se pueden aplicar a los datos numéricos. Las dimensiones se utilizan
para definir un subconjunto de datos y, a continuación, se calcula la medida sobre dichos datos. Por ejemplo, se
usaría una medida para calcular las ventas totales de una determinada línea de producto en varios trimestres
menos impuestos, para informar del promedio de costos de envío de un proveedor determinado, los salarios
acumulados anuales hasta la fecha pagados, etc.
MDX, la abreviatura que se utiliza para hacer referencia a las expresiones multidimensionales, es el lenguaje que
se usa para consultar los cubos. Una consulta MDX contiene normalmente una definición de datos que incluye
una o más dimensiones, y al menos una medida, aunque las consultas MDX pueden ser considerablemente más
complejas e incluir ventanas con desplazamiento, promedios acumulados, sumas, clasificaciones o percentiles.
Estos son algunos otros términos que pueden resultar útiles al empezar a crear consultas MDX:
La segmentación toma un subconjunto del cubo usando valores de una sola dimensión.
El desglose crea un subcubo al especificar un intervalo de valores en varias dimensiones.
La obtención de detalles va desde un resumen a los detalles.
La exploración pasa de los detalles a un mayor nivel de agregación.
La acumulación resume los datos en una dimensión.
La dinamización gira el cubo o la selección de datos.

Cómo usar olapR para crear consultas MDX


En el siguiente artículo se proporcionan ejemplos detallados de la sintaxis para crear o ejecutar consultas en un
cubo:
Cómo crear consultas MDX con R

API de olapR
El paquete olapR admite dos métodos de creación de consultas MDX:
Uso del generador MDX. Utilice las funciones de R en el paquete para generar una consulta MDX
simple, eligiendo un cubo y, a continuación, estableciendo los ejes y las segmentaciones. Esta es una
manera fácil de crear consultas MDX válidas si no tiene acceso a herramientas tradicionales de OLAP o no
tenga un conocimiento profundo del lenguaje MDX.
No todas las consultas MDX se pueden crear con este método, ya que MDX puede ser complejo. Sin
embargo, esta API admite la mayoría de las operaciones más habituales y útiles, como segmentar,
desglosar, obtener detalles, acumular y dinamizar en N dimensiones.
Copiado y pegado de MDX con formato correcto. Cree manualmente y luego pegue en cualquier
consulta MDX. Esta opción es la mejor si tiene consultas MDX existentes que quiere volver a usar o si la
consulta que quiere compilar es demasiado compleja para que olapR la controle.
Después de crear el MDX con cualquier utilidad de cliente, como SSMS o Excel, guarde la cadena de
consulta. Proporcione esta cadena MDX como argumento para el controlador de consultas SSAS en el
paquete de olapR . El proveedor envía la consulta al servidor de Analysis Services especificado y vuelve a
pasar los resultados a R.
Para ver ejemplos de cómo compilar una consulta MDX o ejecutar una consulta MDX existente, vea Cómo crear
consultas MDX con R.

Problemas conocidos
En esta sección se enumeran algunos problemas conocidos y preguntas comunes sobre el paquete de olapR .
Compatibilidad con modelos tabulares
Si conecta una instancia de Analysis Services que contiene un modelo tabular, la función explore notifica el
éxito con un valor devuelto de TRUE. Sin embargo, los objetos de modelo tabular son diferentes de los objetos
multidimensionales y la estructura de una base de datos multidimensional es diferente a la de un modelo
tabular.
Aunque DAX (Expresiones de análisis de datos) es el lenguaje que se suele usar con los modelos tabulares,
puede diseñar consultas MDX válidas en un modelo tabular si ya está familiarizado con MDX. No puede utilizar
los constructores de olapR para crear consultas MDX válidas en un modelo tabular.
Sin embargo, las consultas MDX son una forma ineficaz de recuperar datos de un modelo tabular. Si necesita
obtener datos de un modelo tabular para su uso en R, le recomendamos usar estos métodos en su lugar:
Habilite DirectQuery en el modelo y agregue el servidor como servidor vinculado en SQL Server.
Si el modelo tabular se ha creado en un data mart relacional, obtenga los datos directamente del origen.
Cómo determinar si una instancia contiene modelos tabulares o multidimensionales
Una sola instancia de Analysis Services solo puede contener un tipo de modelo, aunque puede contener varios
modelos. La razón es que existen diferencias fundamentales entre los modelos tabulares y los modelos
multidimensionales que controlan la forma en que se almacenan y procesan los datos. Por ejemplo, los modelos
tabulares se almacenan en la memoria y aprovechan los índices de almacén de columnas para realizar cálculos
muy rápidos. En los modelos multidimensionales, los datos se almacenan en el disco y las agregaciones se
definen de antemano y se recuperan mediante consultas MDX.
Si se conecta a Analysis Services mediante un cliente como SQL Server Management Studio, puede conocer
inmediatamente qué tipo de modelo se admite, examinando el icono de la base de datos.
También puede ver y consultar las propiedades del servidor para determinar qué tipo de modelo admite la
instancia. La propiedad Modo de ser vidor admite dos valores: multidimensional o tabular.
Vea el artículo siguiente para obtener información general sobre los dos tipos de modelos:
Comparación de modelos multidimensionales y tabulares
Vea el siguiente artículo para obtener información acerca de las propiedades del servidor:
OLE DB para los conjuntos de filas de esquema OLAP
No se admite la reescritura
No es posible volver a escribir los resultados de los cálculos de R personalizados en el cubo.
En general, incluso cuando un cubo está habilitado para la reescritura, solo se admiten operaciones limitadas y
es posible que se requiera una configuración adicional. Recomendamos usar MDX para dichas operaciones.
Dimensiones habilitadas para escritura
Particiones habilitadas para escritura
Establecimiento del acceso personalizado a los datos de las celdas
Las consultas MDX de ejecución prolongada bloquean el procesamiento de cubos
Aunque el paquete de olapR solo realiza operaciones de lectura, las consultas MDX de ejecución prolongada
pueden crear bloqueos que impiden que se procese el cubo. Pruebe siempre las consultas MDX de antemano
para saber cuántos datos deben devolverse.
Si intenta conectarse a un cubo que está bloqueado, es posible que reciba un error que le informará de que no
se puede alcanzar el almacenamiento de datos de SQL Server. Las resoluciones sugeridas incluyen la
habilitación de conexiones remotas, la comprobación del nombre del servidor o de la instancia, etc. Sin
embargo, tenga en cuenta la posibilidad de que exista una conexión abierta anterior.
Un administrador de SSAS puede evitar problemas de bloqueo mediante la identificación y finalización de las
sesiones abiertas. También se puede aplicar una propiedad de tiempo de expiración a las consultas MDX en el
nivel de servidor para forzar la finalización de todas las consultas de ejecución prolongada.

Recursos
Si no está familiarizado con OLAP o con las consultas MDX, vea estos artículos de Wikipedia:
Cubos OLAP
Consultas MDX
Procedimiento para crear consultas MDX en R
mediante olapR
14/07/2021 • 6 minutes to read

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


El paquete olapR de SQL Server Machine Learning Services admite consultas MDX en cubos hospedados en
SQL Server Analysis Services. Puede crear una consulta en un cubo existente, explorar dimensiones y otros
objetos de cubo y pegar las consultas MDX existentes para recuperar los datos.
En este artículo se describen los dos usos principales del paquete olapR :
Crear una consulta MDX desde R, con los constructores proporcionados en el paquete olapR
Ejecutar una consulta MDX válida existente mediante olapR y un proveedor OLAP
No se admiten estas operaciones:
Consultas DAX en un modelo tabular
Creación de nuevos objetos OLAP
Escritura diferida en particiones, incluidas medidas o sumas

Creación de una consulta MDX desde R


1. Defina una cadena de conexión que especifique el origen de datos OLAP (instancia de SSAS) y el
proveedor MSOLAP.
2. Use la función OlapConnection(connectionString) para crear un identificador para la consulta MDX y
pasar la cadena de conexión.
3. Use el constructor Query() para crear instancias de un objeto de consulta.
4. Use las siguientes funciones del asistente para proporcionar más detalles sobre las dimensiones y las
medidas que se deben incluir en la consulta MDX:
cube() : especifique el nombre de la base de datos SSAS. Si se conecta a una instancia con
nombre, proporcione el nombre de la máquina y el nombre de la instancia.
: proporcione los nombres de las medidas que se usarán en el argumento ON
columns()
COLUMNS .
rows() : proporcione los nombres de las medidas que se usarán en el argumento ON ROWS .
slicers(): especifique un campo o los miembros que se usarán como segmentación. Una
segmentación se parece a un filtro que se aplica a todos los datos de consulta MDX.
axis() : especifique el nombre de un eje adicional para usarlo en la consulta.
Un cubo OLAP puede contener hasta 128 ejes de consulta. Por lo general, los primeros cuatro ejes
se denominan Columnas , Filas , Páginas y Capítulos .
Si la consulta es relativamente sencilla, puede usar las funciones columns , rows , etc. para crear la
consulta. También puede usar la función axis() con un valor de índice distinto de cero para crear
una consulta MDX con varios calificadores o para agregar dimensiones adicionales como
calificadores.
5. Pase el manipulador y la consulta MDX completada a una de las siguientes funciones, según la forma de
los resultados:
executeMD : devuelve una matriz multidimensional
execute2D : devuelve una trama de datos bidimensional (tabular)

Ejecución de una consulta MDX válida desde R


1. Defina una cadena de conexión que especifique el origen de datos OLAP (instancia de SSAS) y el
proveedor MSOLAP.
2. Use la función OlapConnection(connectionString) para crear un identificador para la consulta MDX y
pasar la cadena de conexión.
3. Defina una variable de R para almacenar el texto de la consulta MDX.
4. Pase el identificador y la variable que contiene la consulta MDX en las funciones executeMD o execute2D ,
en función de la forma de los resultados.
executeMD : devuelve una matriz multidimensional
execute2D : devuelve una trama de datos bidimensional (tabular)

Ejemplos
Los ejemplos siguientes se basan en el data mart AdventureWorks y el proyecto de cubo, porque ese proyecto
está disponible en varias versiones, incluidos los archivos de copia de seguridad que se pueden restaurar
fácilmente a Analysis Services. Si no tiene un cubo existente, obtenga un cubo de ejemplo con cualquiera de
estas opciones:
Cree el cubo que se usa en estos ejemplos siguiendo el tutorial de Analysis Services hasta la lección 4:
Crear un cubo OLAP
Descargue un cubo existente como copia de seguridad y restáurelo en una instancia de Analysis Services.
Por ejemplo, este sitio proporciona un cubo totalmente procesado en formato comprimido: Modelo
multidimensional de Adventure Works de SQL 2014. Extraiga el archivo y después restáurelo en la
instancia de SSAS. Para más información, vea Realizar una copia de seguridad y restaurarla o Cmdlet
Restore-ASDatabase.
1. MDX básico con segmentación
Esta consulta MDX selecciona measures (medidas) de count (recuento) y amount (cantidad) del recuento de
ventas por Internet y el importe de las ventas, y los coloca en el eje Columna. Agrega un miembro de la
dimensión Sales Territory (Territorio de ventas) como segmentación para filtrar la consulta de manera que en los
cálculos solo se usen las ventas de Australia.

SELECT {[Measures].[Internet Sales Count], [Measures].[InternetSales-Sales Amount]} ON COLUMNS,


{[Product].[Product Line].[Product Line].MEMBERS} ON ROWS
FROM [Analysis Services Tutorial]
WHERE [Sales Territory].[Sales Territory Country].[Australia]

En las columnas puede especificar varias medidas como elementos de una cadena separada por comas.
El eje Fila usa todos los valores posibles (todos los MIEMBROS) de la dimensión "Product Line" (Línea de
productos).
Esta consulta devolvería una tabla con tres columnas, con un resumen acumulado de las ventas por Internet
de todos los países.
La cláusula WHERE especifica el eje segmentador. En este ejemplo, el segmentador usa un miembro de la
dimensión Sales Territor y para filtrar la consulta de manera que en los cálculos solo se usen las ventas de
Australia.
Para crear esta consulta con las funciones proporcionadas en olapR

cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"


ocs <- OlapConnection(cnnstr)

qry <- Query()


cube(qry) <- "[Analysis Services Tutorial]"
columns(qry) <- c("[Measures].[Internet Sales Count]", "[Measures].[Internet Sales-Sales Amount]")
rows(qry) <- c("[Product].[Product Line].[Product Line].MEMBERS")
slicers(qry) <- c("[Sales Territory].[Sales Territory Country].[Australia]")

result1 <- executeMD(ocs, qry)

En el caso de una instancia con nombre, asegúrese de usar el carácter de escape para los caracteres que podrían
considerarse caracteres de control en R. Por ejemplo, esta cadena de conexión hace referencia a una instancia de
OLAP01, en un servidor denominado ContosoHQ:

cnnstr <- "Data Source=ContosoHQ\\OLAP01; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"

Para ejecutar esta consulta como una cadena MDX predefinida

cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"


ocs <- OlapConnection(cnnstr)

mdx <- "SELECT {[Measures].[Internet Sales Count], [Measures].[InternetSales-Sales Amount]} ON COLUMNS,


{[Product].[Product Line].[Product Line].MEMBERS} ON ROWS FROM [Analysis Services Tutorial] WHERE [Sales
Territory].[Sales Territory Country].[Australia]"

result2 <- execute2D(ocs, mdx)

Si define una consulta con el Generador MDX en SQL Server Management Studio y después guarda la cadena
de MDX, se enumerarán los ejes a partir del 0, como se muestra aquí:

SELECT {[Measures].[Internet Sales Count], [Measures].[Internet Sales-Sales Amount]} ON AXIS(0),


{[Product].[Product Line].[Product Line].MEMBERS} ON AXIS(1)
FROM [Analysis Services Tutorial]
WHERE [Sales Territory].[Sales Territory Countr,y].[Australia]

Aun así, puede ejecutar esta consulta como una cadena MDX predefinida, aunque para crear la misma consulta
en R usando la función axis() , debe asegurarse enumerar los ejes a partir del 1.
2. Explorar los cubos y sus campos en una instancia SSAS
Puede usar la función explore para devolver una lista de cubos, dimensiones o miembros que se usarán en la
construcción de la consulta. Esto resulta práctico si no tiene acceso a otras herramientas de exploración de OLAP
o si quiere manipular o construir la consulta MDX mediante programación.
Para consultar la lista de cubos disponibles en la conexión especificada
Para ver todos los cubos o perspectivas en la instancia en la que tiene permiso de visualización, proporcione el
identificador como argumento de explore .
IMPORTANT
El resultado final no es un cubo: TRUE solo indica que la operación de metadatos se ha efectuado correctamente. Si los
argumentos no son válidos, se produce un error.

cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"


ocs <- OlapConnection(cnnstr)
explore(ocs)

RESULT S

Analysis Services Tutorial

Internet Sales

Reseller Sales

Sales Summary

[1] TRUE

Para obtener una lista de dimensiones de cubo


Para ver todas las dimensiones del cubo o de la perspectiva, especifique el nombre del cubo o de la perspectiva.

cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"


ocs \<- OlapConnection(cnnstr)
explore(ocs, "Sales")

RESULT S

Cliente

Date

Región

Para devolver todos los miembros de la jerarquía y la dimensión especificadas


Después de definir el origen y de crear el identificador, especifique el cubo, la dimensión y la jerarquía que va a
devolver. En los resultados devueltos, los elementos que tienen el prefijo -> representan los elementos
secundarios del miembro anterior.

cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"


ocs <- OlapConnection(cnnstr)
explore(ocs, "Analysis Services Tutorial", "Product", "Product Categories", "Category")

RESULT S

Accessories

Bikes
RESULT S

Clothing

Componentes

-> Assembly Components

-> Assembly Components

Consulte también
Uso de datos de cubos OLAP en R
Trazado de histogramas en Python
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server (todas las versiones admitidas) Azure SQL Database Instancia
administrada de Azure SQL
En este artículo se describe cómo trazar datos mediante el paquete de Python pandas'.hist (). Una base de datos
SQL es el origen que se usa para visualizar los intervalos de datos del histograma que tienen valores
consecutivos no superpuestos.

Requisitos previos:
SQL Server para Windows o para Linux.
Azure SQL Database
Instancia administrada de Azure SQL
SQL Server Management Studio para restaurar la base de datos de ejemplo en Azure SQL Managed
Instance.
Azure Data Studio. Para realizar la instalación, vea Azure Data Studio.
Restaure la base de datos DW de ejemplo para obtener los datos de ejemplo que se usan en este artículo.

Comprobación de la base de datos restaurada


Para comprobar que la base de datos restaurada existe, consulte la tabla Person.Countr yRegion :

USE AdventureWorksDW;
SELECT * FROM Person.CountryRegion;

Instalación de paquetes de Python


Descarga e instalación de Azure Data Studio.
Instale los siguientes paquetes de Python:
pyodbc
Pandas
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 .

Trazado del histograma


Los datos distribuidos que se muestran en el histograma están basados en una consulta SQL de
AdventureWorksDW. El histograma visualiza los datos y la frecuencia de los valores de los mismos. Edite las
variables de cadena de conexión: "Server", "Database", "Username" y "Password" para conectarse a SQL
Database.
Para crear un nuevo cuaderno:
1. En Azure Data Studio, seleccione Archivo y luego Nuevo cuaderno .
2. En el bloc de notas, seleccione el kernel Python3 y luego el comando +Código .
3. Pegue el código en el bloc de notas y seleccione Ejecutar todo .

import pyodbc
import pandas as plt
# Some other example server values are
# server = 'localhost\sqlexpress' # for a named instance
# server = 'myserver,port' # to specify an alternate port
server = 'servername'
database = 'AdventureWorksDW'
username = 'yourusername'
password = 'databasename'
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+
password)
cursor = cnxn.cursor()
sql = "SELECT DATEDIFF(year, c.BirthDate, GETDATE()) AS Age FROM [dbo].[FactInternetSales] s INNER JOIN
dbo.DimCustomer c ON s.CustomerKey = c.CustomerKey"
df = pd.read_sql(sql, cnxn)
df.hist(bins=10)

La pantalla muestra la distribución de edad de los clientes en la tabla FactInternetSales.


Inserción de datos de una tabla SQL en un
dataframe de Pandas de Python
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server (todas las versiones admitidas) Azure SQL Database Instancia
administrada de Azure SQL
En este artículo se describe cómo insertar datos de SQL en un dataframe de Pandas mediante el paquete
pyodbc en Python. Las filas y las columnas de datos contenidas en el dataframe se pueden usar para seguir
explorando los datos.

Requisitos previos
SQL Server para Windows o para Linux.
Azure SQL Database
Instancia administrada de Azure SQL
SQL Server Management Studio para restaurar la base de datos de ejemplo en Azure SQL Managed
Instance.
Azure Data Studio. Para realizar la instalación, vea Azure Data Studio.
Restaure la base de datos de ejemplo para obtener los datos de ejemplo que se usan en este artículo.

Comprobación de la base de datos restaurada


Para comprobar que la base de datos restaurada existe, consulte la tabla Person.Countr yRegion :

USE AdventureWorks;
SELECT * FROM Person.CountryRegion;

Instalación de paquetes de Python


Descarga e instalación de Azure Data Studio.
Instale los siguientes paquetes de Python:
pyodbc
Pandas
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 .

Insertar datos
Use el siguiente script para seleccionar datos de la tabla Person.CountryRegion e insertarlos en un dataframe.
Edite las variables de cadena de conexión: "Server", "Database", "Username" y "Password" para conectarse a SQL.
Para crear un nuevo cuaderno:
1. En Azure Data Studio, seleccione Archivo y luego Nuevo cuaderno .
2. En el bloc de notas, seleccione el kernel Python3 y luego el comando +Código .
3. Pegue el código en el bloc de notas y seleccione Ejecutar todo .

import pyodbc
import pandas as pd
# Some other example server values are
# server = 'localhost\sqlexpress' # for a named instance
# server = 'myserver,port' # to specify an alternate port
server = 'servername'
database = 'AdventureWorks'
username = 'yourusername'
password = 'databasename'
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+
password)
cursor = cnxn.cursor()
# select 26 rows from SQL table to insert in dataframe.
query = "SELECT [CountryRegionCode], [Name] FROM Person.CountryRegion;"
df = pd.read_sql(query, cnxn)
print(df.head(26))

Salida
El comando print del script anterior muestra las filas de datos del dataframe df de pandas .

CountryRegionCode Name
0 AF Afghanistan
1 AL Albania
2 DZ Algeria
3 AS American Samoa
4 AD Andorra
5 AO Angola
6 AI Anguilla
7 AQ Antarctica
8 AG Antigua and Barbuda
9 AR Argentina
10 AM Armenia
11 AW Aruba
12 AU Australia
13 AT Austria
14 AZ Azerbaijan
15 BS Bahamas, The
16 BH Bahrain
17 BD Bangladesh
18 BB Barbados
19 BY Belarus
20 BE Belgium
21 BZ Belize
22 BJ Benin
23 BM Bermuda
24 BT Bhutan
25 BO Bolivia

Pasos siguientes
Inserción de un dataframe de Python en SQL
Insertar un dataframe de Python en una tabla SQL
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server (todas las versiones admitidas) Azure SQL Database Instancia
administrada de Azure SQL
En este artículo se describe cómo insertar un dataframe de Pandas en una base de datos SQL mediante el
paquete pyodbc en Python.

Requisitos previos
SQL Server para Windows o para Linux.
Azure SQL Database
Instancia administrada de Azure SQL
SQL Server Management Studio para restaurar la base de datos de ejemplo en Azure SQL Managed
Instance.
Azure Data Studio. Para realizar la instalación, vea Azure Data Studio.
Restaure la base de datos de ejemplo para obtener los datos de ejemplo que se usan en este artículo.

Comprobación de la base de datos restaurada


Para comprobar que la base de datos restaurada existe, consulte la tabla HumanResources.Depar tment :

USE AdventureWorks;
SELECT * FROM HumanResources.Department;

Instalación de paquetes de Python


Descarga e instalación de Azure Data Studio
Instale los siguientes paquetes de Python:
pyodbc
Pandas
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 .

Conectarse a SQL Server con Azure Data Studio


Conexión mediante Azure Data Studio.
1. Conéctese a la base de datos AdventureWorks para crear la nueva tabla, HumanResources.DepartmentTest.
La tabla SQL se utilizará para la inserción de un dataframe.
CREATE TABLE [HumanResources].[DepartmentTest](
[DepartmentID] [smallint] NOT NULL,
[Name] [dbo].[Name] NOT NULL,
[GroupName] [dbo].[Name] NOT NULL
)
GO

Creación de un archivo CSV


Copie el texto y guarde el archivo como department.csv para el dataframe.

DepartmentID,Name,GroupName,
1,Engineering,Research and Development,
2,Tool Design,Research and Development,
3,Sales,Sales and Marketing,
4,Marketing,Sales and Marketing,
5,Purchasing,Inventory Management,
6,Research and Development,Research and Development,
7,Production,Manufacturing,
8,Production Control,Manufacturing,
9,Human Resources,Executive General and Administration,
10,Finance,Executive General and Administration,
11,Information Services,Executive General and Administration,
12,Document Control,Quality Assurance,
13,Quality Assurance,Quality Assurance,
14,Facilities and Maintenance,Executive General and Administration,
15,Shipping and Receiving,Inventory Management,
16,Executive,Executive General and Administration

Conexión a SQL mediante Python


1. Edite las variables de cadena de conexión "Server", "Database", "Username" y "Password" para conectarse
a la base de datos SQL.
2. Edite la ruta de acceso del archivo CSV.

Carga del dataframe de un archivo CSV


Use el paquete pandas de Python para crear un dataframe y cargue el archivo CSV. Conéctese a SQL para
cargar un dataframe en la nueva tabla SQL, HumanResources.DepartmentTest.
Para crear un nuevo cuaderno:
1. En Azure Data Studio, seleccione Archivo y luego Nuevo cuaderno .
2. En el bloc de notas, seleccione el kernel Python3 y luego el comando +Código .
3. Pegue el código en el bloc de notas y seleccione Ejecutar todo .
import pyodbc
import pandas as pd
# insert data from csv file into dataframe.
# working directory for csv file: type "pwd" in Azure Data Studio or Linux
# working directory in Windows c:\users\username
df = pd.read_csv("c:\\user\\username\department.csv")
# Some other example server values are
# server = 'localhost\sqlexpress' # for a named instance
# server = 'myserver,port' # to specify an alternate port
server = 'yourservername'
database = 'AdventureWorks'
username = 'username'
password = 'yourpassword'
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+
password)
cursor = cnxn.cursor()
# Insert Dataframe into SQL Server:
for index, row in df.iterrows():
cursor.execute("INSERT INTO HumanResources.DepartmentTest (DepartmentID,Name,GroupName) values(?,?,?)",
row.DepartmentID, row.Name, row.GroupName)
cnxn.commit()
cursor.close()

Confirmación del recuento de filas en SQL


Ejecute la instrucción SQL para confirmar que la tabla se cargó correctamente con los datos del dataframe.

SELECT count(*) from HumanResources.DepartmentTest;

Results

(No column name)


16

Pasos siguientes
Trazado de un histograma para la exploración de datos con Python
Uso de ODBC para guardar y cargar objetos de R
en SQL Server Machine Learning Services
14/07/2021 • 3 minutes to read

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


Obtenga información sobre cómo usar el paquete RevoScaleR para almacenar objetos de R serializados en una
tabla y, luego, cargar el objeto desde la tabla según sea necesario con SQL Server Machine Learning Services.
Esto puede usarse al entrenar y guardar un modelo y emplearse más adelante para la puntuación o el análisis.

Paquete RevoScaleR
El paquete RevoScaleR incluye funciones de serialización y deserialización que pueden almacenar objetos de R
de forma compacta en SQL Server y, luego, leer los objetos de la tabla. En general, cada llamada a la función usa
un almacén de valores de clave simple, en el que la clave es el nombre del objeto y el valor asociado a la clave es
el objeto varbinary de R que se va a mover dentro o fuera de una tabla.
Para guardar objetos de R en SQL Server directamente desde un entorno de R, debe hacer lo siguiente:
Establecer una conexión a SQL Server mediante el origen de datos RxOdbcData
Llamar a las nuevas funciones a través de la conexión ODBC
Opcionalmente, puede especificar que el objeto no se serialice. Luego, elija un nuevo algoritmo de
compresión, que se usará en lugar del algoritmo de compresión predeterminado.
De forma predeterminada, cualquier objeto al que se llame desde R para moverlo a SQL Server se serializa y se
comprime. Por el contrario, cuando se carga un objeto desde una tabla de SQL Server para usarlo en el código
R, el objeto se deserializa y se descomprime.

Lista de funciones nuevas


rxWriteObject escribe un objeto de R en SQL Server mediante el origen de datos ODBC.
rxReadObject lee un objeto de R desde una base de datos de SQL Server mediante un origen de datos
ODBC
rxDeleteObject elimina un objeto de R de la base de datos de SQL Server especificada en el origen de
datos ODBC. Si hay varios objetos que se identifican mediante la combinación de clave y versión, se
eliminan todos.
rxListKeys enumera todos los objetos disponibles como pares de clave y valor. Esto ayuda a determinar
los nombres y las versiones de los objetos de R.
Para obtener ayuda detallada sobre la sintaxis de cada función, use la Ayuda de R. Encontrará detalles también
en la Referencia de ScaleR.

Cómo almacenar objetos de R en SQL Server mediante ODBC


Este procedimiento muestra cómo usar las nuevas funciones para crear un modelo y guardarlo en SQL Server.
1. Configure la cadena de conexión de SQL Server.
conStr <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'

2. Cree un objeto de origen de datos rxOdbcData en R con la cadena de conexión.

ds <- RxOdbcData(table="robjects", connectionString=conStr)

3. Elimine la tabla si ya existe y no quiere realizar un seguimiento de las versiones anteriores de los objetos.

if(rxSqlServerTableExists(ds@table, ds@connectionString)) {
rxSqlServerDropTable(ds@table, ds@connectionString)
}

4. Defina una tabla que se pueda usar para almacenar objetos binarios.

ddl <- paste(" CREATE TABLE [", ds@table, "]


("," [id] varchar(200) NOT NULL,
"," [value] varbinary(max),
"," CONSTRAINT unique_id UNIQUE (id))",
sep = "")

5. Abra la conexión de ODBC para crear la tabla y, cuando haya finalizado la instrucción DDL, cierre la
conexión.

rxOpen(ds, "w")
rxExecuteSQLDDL(ds, ddl)
rxClose(ds)

6. Genere los objetos de R que quiere almacenar.

infertLogit <- rxLogit(case ~ age + parity + education + spontaneous + induced,


data = infert)

7. Use el objeto RxOdbcData creado anteriormente para guardar el modelo en la base de datos.

rxWriteObject(ds, "logit.model", infertLogit)

Cómo leer objetos de R desde SQL Server mediante ODBC


Este procedimiento muestra cómo usar las nuevas funciones para cargar un modelo desde SQL Server.
1. Configure la cadena de conexión de SQL Server.

conStr2 <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'

2. Cree un objeto de origen de datos rxOdbcData en R con la cadena de conexión.

ds <- RxOdbcData(table="robjects", connectionString=conStr2)

3. Lea el modelo desde la tabla al especificar su nombre de objeto de R.


infertLogit2 <- rxReadObject(ds, "logit.model")

Pasos siguientes
¿Qué es SQL Server Machine Learning Services?
Crear varios modelos mediante rxExecBy
14/07/2021 • 3 minutes to read

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


Obtenga información sobre cómo usar la función r xExecBy en RevoScaleR para procesar en paralelo varios
modelos relacionados con SQL Server Machine Learning Services. En lugar de entrenar un modelo grande en
función de los datos de varias entidades similares, puede crear rápidamente muchos modelos relacionados,
cada uno con datos específicos de una sola entidad.

Qué puede hacer rxExecBy


Por ejemplo, supongamos que está supervisando los errores del dispositivo y captura los datos para muchos
tipos diferentes de equipos. Mediante rxExecBy, puede proporcionar un único conjunto de datos grande como
entrada, especificar una columna en la que quiera estratificar el conjunto de datos —por ejemplo, el tipo de
dispositivo—, y, después, crear varios modelos para dispositivos individuales.
Este caso de uso se ha denominado "pleasingly parallel" (agradablemente paralelo) ya que divide un problema
complejo grande en partes componentes para un procesamiento simultáneo.
Entre las aplicaciones típicas de este enfoque se incluye la previsión de los medidores inteligentes domésticos
individuales, la creación de proyecciones de ingresos para líneas de productos independientes o la creación de
modelos para aprobaciones de préstamos que se adaptan a sucursales bancarias individuales.

Funcionamiento de rxExecBy
La función rxExecBy de RevoScaleR está diseñada para el procesamiento paralelo de gran volumen en un gran
número de conjuntos de datos pequeños.
1. Llame a la función rxExecBy como parte del código de R y pase un conjunto de datos no ordenados.
2. Especifique la partición por la que se deben agrupar y ordenar los datos.
3. Defina una función de transformación o modelado que se deba aplicar a cada partición de datos.
4. Cuando se ejecuta la función, las consultas de datos se procesan en paralelo si su entorno lo admite. Además,
las tareas de modelado o transformación se distribuyen entre núcleos individuales y se ejecutan en paralelo.
RxSpark y RxInSQLServer son contextos de proceso admitidos.
5. Se devuelven varios resultados.

Sintaxis y ejemplos de rxExecBy


r xExecBy toma cuatro entradas, una de las cuales es un conjunto de datos o un objeto de origen de datos que
se puede particionar en una columna key especificada. La función devuelve una salida para cada partición. La
forma de la salida depende de la función que se pasa como argumento. Por ejemplo, si se pasa una función de
modelado como rxLinMod, podría devolver un modelo entrenado independiente para cada partición del
conjunto de datos.
Funciones admitidas
Modelado: rxLinMod , rxLogit , rxGlm , rxDtree

Puntuación: rxPredict

Transformación o análisis: rxCovCor


Ejemplo
En el ejemplo siguiente se muestra cómo crear varios modelos mediante el conjunto de datos Airline, que está
particionado en la columna [DayOfWeek]. La función definida por el usuario, delayFunc , se aplica a cada una de
las particiones mediante una llamada a rxExecBy. La función crea modelos independientes para los lunes, los
martes, etc.

EXEC sp_execute_external_script
@language = N'R'
, @script = N'
delayFunc <- function(key, data, params) {
df <- rxImport(inData = airlineData)
rxLinMod(ArrDelay ~ CRSDepTime, data = df)
}
OutputDataSet <- rxExecBy(airlineData, c("DayOfWeek"), delayFunc)
'
, @input_data_1 = N'select ArrDelay, DayOfWeek, CRSDepTime from AirlineDemoSmall]'
, @input_data_1_name = N'airlineData'

Si obtiene el error varsToPartition is invalid , compruebe si el nombre de la columna o columnas de clave está
escrito correctamente. El lenguaje de R distingue mayúsculas de minúsculas.
Este ejemplo concreto no está optimizado para SQL Server y, en muchos casos, puede lograr un mejor
rendimiento si usa SQL para agrupar los datos. Sin embargo, con rxExecBy, puede crear trabajos paralelos desde
R.
En el ejemplo siguiente se muestra el proceso en R, usando SQL Server como contexto de proceso:

sqlServerConnString <- "SERVER=hostname;DATABASE=TestDB;UID=DBUser;PWD=Password;"


inTable <- paste("airlinedemosmall")
sqlServerDataDS <- RxSqlServerData(table = inTable, connectionString = sqlServerConnString)

# user function
".Count" <- function(keys, data, params)
{
myDF <- rxImport(inData = data)
return (nrow(myDF))
}

# Set SQL Server compute context with level of parallelism = 2


sqlServerCC <- RxInSqlServer(connectionString = sqlServerConnString, numTasks = 4)
rxSetComputeContext(sqlServerCC)

# Execute rxExecBy in SQL Server compute context


sqlServerCCResults <- rxExecBy(inData = sqlServerDataDS, keys = c("DayOfWeek"), func = .Count)

Pasos siguientes
¿Qué es SQL Server Machine Learning Services?
Asignaciones de tipos de datos entre Python y
SQL Server
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 enumeran los tipos de datos admitidos y las conversiones de tipos de datos que se realizan
cuando se usa la característica de integración de Python en SQL Server Machine Learning Services.
En comparación con SQL Server, Python admite un número limitado de tipos de datos. Por consiguiente, cada
vez que se usan datos de SQL Server en scripts de Python, es posible que los datos de SQL se conviertan
implícitamente en un tipo de datos de Python compatible. Si bien, a menudo no se puede realizar una
conversión exacta automáticamente y se devuelve un error.

Tipos de datos de SQL y Python


En esta tabla se enumeran las conversiones implícitas que se proporcionan. No se admiten otros tipos de datos.

T IP O SQ L T IP O DE P Y T H O N DESC RIP C IÓ N

bigint float64

binar y bytes

bit bool

char str

date datetime

datetime datetime Compatible con SQL Server 2017 CU6


y versiones posteriores (con matrices
NumPy de tipo datetime.datetime
o Pandas pandas.Timestamp ).
sp_execute_external_script ahora
admite tipos de datetime con
fracciones de segundo.

float float64

nchar str

nvarchar str

nvarchar(max) str

real float64

smalldatetime datetime
T IP O SQ L T IP O DE P Y T H O N DESC RIP C IÓ N

smallint int32

tinyint int32

uniqueidentifier str

varbinar y bytes

varbinar y(max) bytes

varchar(n) str

ntext str

Consulte también
Asignaciones de tipos de datos entre R y SQL Server
Asignaciones de tipos de datos entre R y
SQL Server
14/07/2021 • 9 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 enumeran los tipos de datos admitidos y las conversiones de tipos de datos que se realizan
cuando se usa la característica de integración de R en SQL Server Machine Learning Services.

Versión de R base
SQL Server 2016 R Services y SQL Server Machine Learning Services con R están en consonancia con versiones
específicas de Microsoft R Open. Por ejemplo, la versión más reciente, SQL Server 2019 Machine Learning
Services, se basa en Microsoft R Open 3.5.2.
Para ver la versión de R asociada a una instancia determinada de SQL Server, abra RGui en la instancia de SQL.
Por ejemplo, la ruta de acceso de la instancia predeterminada en SQL Server 2019 sería:
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\R_SERVICES\bin\x64\Rgui.exe .

La herramienta carga Base R y otras bibliotecas. La información de versión del paquete se proporciona en una
notificación para cada paquete que se carga en el inicio de la sesión.

Tipos de datos de SQL y R


Aunque SQL Server admite varias decenas de tipos de datos, R tiene un número limitado de tipos de datos
escalares (numérico, entero, complejo, lógico, carácter, fecha/hora y sin formato). Por consiguiente, cada vez que
se usan datos de SQL Server en scripts de R, es posible que los datos se conviertan implícitamente en un tipo de
datos compatible. Si bien, a menudo no se puede realizar una conversión exacta automáticamente y se devuelve
un error, como "Unhandled SQL data type" (Tipo de datos SQL no controlado).
En esta sección se indican las conversiones implícitas que se ofrecen y los tipos de datos no admitidos. Se
ofrecen algunas instrucciones para asignar tipos de datos entre R y SQL Server.

Conversiones implícitas de tipos de datos


En la tabla siguiente se muestran los cambios que se producen en los tipos de datos y los valores cuando los
datos de SQL Server se usan en un script de R y después se devuelven a SQL Server.

T IP O DE C O N JUN TO DE
T IP O SQ L C L A SE DE R RESULTA DO S C O M EN TA RIO S
T IP O DE C O N JUN TO DE
T IP O SQ L C L A SE DE R RESULTA DO S C O M EN TA RIO S

bigint numeric float Ejecutar un script de R con


sp_execute_external_script
permite el tipo de datos
bigint como datos de
entrada. Sin embargo, dado
que se convierten al tipo
numérico de R, sufren una
pérdida de precisión con
valores muy altos o con
valores de separador
decimal. R solo admite
enteros de 53 bits y,
posteriormente, empezará a
tener una pérdida de
precisión.

binar y(n) raw varbinar y(max) Solo se permite como


n <= 8000 parámetro de entrada y
salida.

bit logical bit

char(n) character ntext El marco de datos de


n <= 8000 entrada (input_data_1) se
crea sin establecer
explícitamente el parámetro
de stringsAsFactors, por lo
que el tipo de columna
dependerá de
default.stringsAsFactors() en
R.

datetime POSIXct datetime Se representa como GMT.

date POSIXct datetime Se representa como GMT.

decimal(p,s) numeric float Ejecutar un script de R con


sp_execute_external_script
permite el tipo de datos
decimal como datos de
entrada. No obstante, dado
que se convierten al tipo
numérico de R, sufren una
pérdida de precisión con
valores muy altos o con
valores de separador
decimal.
sp_execute_external_script
con un script de R no
admite el rango completo
del tipo de datos y
modificaría los últimos
dígitos decimales,
especialmente aquellos con
fracción.

float numeric float


T IP O DE C O N JUN TO DE
T IP O SQ L C L A SE DE R RESULTA DO S C O M EN TA RIO S

int integer int

money numeric float Ejecutar un script de R con


sp_execute_external_script
permite el tipo de datos
money como datos de
entrada. No obstante, dado
que se convierten al tipo
numérico de R, sufren una
pérdida de precisión con
valores muy altos o con
valores de separador
decimal. A veces, los valores
de céntimos podrían ser
imprecisos y, en este caso,
se emitiría una advertencia:
Advertencia: No se pueden
representar con precisión
los valores de céntimos.

numeric(p,s) numeric float Ejecutar un script de R con


sp_execute_external_script
permite el tipo de datos
numeric como datos de
entrada. No obstante, dado
que se convierten al tipo
numérico de R, sufren una
pérdida de precisión con
valores muy altos o con
valores de separador
decimal.
sp_execute_external_script
con un script de R no
admite el rango completo
del tipo de datos y
modificaría los últimos
dígitos decimales,
especialmente aquellos con
fracción.

real numeric float

smalldatetime POSIXct datetime Se representa como GMT.

smallint integer int

smallmoney numeric float

tinyint integer int

uniqueidentifier character ntext

varbinar y(n) raw varbinar y(max) Solo se permite como


n <= 8000 parámetro de entrada y
salida.
T IP O DE C O N JUN TO DE
T IP O SQ L C L A SE DE R RESULTA DO S C O M EN TA RIO S

varbinar y(max) raw varbinar y(max) Solo se permite como


parámetro de entrada y
salida.

varchar(n) character ntext El marco de datos de


n <= 8000 entrada (input_data_1) se
crea sin establecer
explícitamente el parámetro
de stringsAsFactors, por lo
que el tipo de columna
dependerá de
default.stringsAsFactors() en
R.

Tipos de datos no compatibles con R


De las categorías de tipos de datos compatibles con el sistema de tipos de SQL Server, es probable que los
siguientes tipos planteen problemas al pasarlos a código de R:
Tipos de datos mostrados en la sección Otros tipos de datos del artículo sobre el sistema de tipos de SQL:
cursor , timestamp , hierarchyid , uniqueidentifier , sql_variant , xml , table
Todos los tipos espaciales
image

Tipos de datos cuya conversión puede ser deficiente


La mayoría de los tipos de fecha y hora deberían funcionar, salvo datetimeoffset .
Se admite la mayoría de los tipos de datos numéricos, pero es posible que las conversiones de money y
smallmoney no se realicen.
Se admite varchar , pero dado que SQL Server usa Unicode por norma, se recomienda usar nvarchar y
otros tipos de datos de texto Unicode siempre que sea posible.
Las funciones de la biblioteca RevoScaleR que usan el prefijo rx pueden tratar los tipos de datos binarios de
SQL (binar y y varbinar y ), pero en la mayoría de los escenarios se necesitará un tratamiento especial de
estos tipos. La mayor parte del código de R no puede trabajar con columnas binarias.
Para obtener más información sobre los tipos de datos de SQL Server, vea Data Types (Transact-SQL) [Tipos de
datos (Transact-SQL)].

Cambios en los tipos de datos entre versiones de SQL Server


Microsoft SQL Server 2016 y versiones posteriores incluyen mejoras en las conversiones de tipos de datos y en
otras operaciones. La mayoría de estas mejoras ofrecen mayor precisión en lo que respecta al uso de tipos de
datos de punto flotante, así como cambios menores en operaciones en tipos de datos datetime clásicos.
Estas mejoras están todas disponibles de manera predeterminada cuando se usa un nivel de compatibilidad de
la base de datos de 130 o posterior. Pero si usa otro nivel de compatibilidad de la base de datos o se conecta a la
base de datos con una versión anterior, puede que observe diferencias en la precisión de números u otros
resultados.
Para obtener más información, vea Mejoras de SQL Server 2016 en el control de algunos tipos de datos y
operaciones infrecuentes.
Comprobar esquemas de datos de SQL y R de antemano
En general, siempre que tenga alguna duda sobre cómo se usa en R un tipo o una estructura de datos en
concreto, use la función str() para obtener la estructura interna y el tipo del objeto de R. El resultado de la
función se imprime en la consola de R y también está disponible en los resultados de la consulta, en la pestaña
Mensajes de Management Studio.
Al recuperar datos de una base de datos para su uso en código de R, debe eliminar siempre las columnas que
no se puedan usar en R, así como las columnas que no sean útiles para el análisis, como GUID (uniqueidentifier),
marcas de tiempo y otras columnas que se usan en auditoría, o información de linaje creada con procesos de
ETL.
Tenga en cuenta que la inclusión de columnas innecesarias puede reducir considerablemente el rendimiento del
código de R, especialmente si se usan columnas de alta cardinalidad como factores. Por consiguiente, se
recomienda usar vistas de información y procedimientos almacenados del sistema de SQL Server para obtener
de antemano los tipos de datos de una tabla determinada y eliminar o convertir las columnas incompatibles.
Para obtener más información, vea Vistas de esquema de información del sistema (Transact-SQL)
Si R no admite un tipo de datos de SQL Server en concreto, pero hay que usar las columnas de datos en el script
de R, se recomienda que use las funciones CAST y CONVERT (Transact-SQL) para garantizar que las
conversiones de los tipos de datos se realicen como se espera antes de usar los datos en el script de R.

WARNING
Si usa el r xDataStep para quitar columnas incompatibles al mover los datos, tenga en cuenta que los argumentos
varsToKeep y varsToDrop no son compatibles con el tipo de origen de datos RxSqlSer verData .

Ejemplos
Ejemplo 1: Conversión implícita
En el ejemplo siguiente se muestra cómo se transforman los datos al hacer el recorrido de ida y vuelta entre
SQL Server y R.
En la consulta se obtiene una serie de valores de una tabla de SQL Server y se usa el procedimiento almacenado
sp_execute_external_script para generar los valores con el runtime de R.

CREATE TABLE MyTable (


c1 int,
c2 varchar(10),
c3 uniqueidentifier
);
go
INSERT MyTable VALUES(1, 'Hello', newid());
INSERT MyTable VALUES(-11, 'world', newid());
SELECT * FROM MyTable;

EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
inputDataSet["cR"] <- c(4, 2)
str(inputDataSet)
outputDataSet <- inputDataSet'
, @input_data_1 = N'SELECT c1, c2, c3 FROM MyTable'
, @input_data_1_name = N'inputDataSet'
, @output_data_1_name = N'outputDataSet'
WITH RESULT SETS((C1 int, C2 varchar(max), C3 varchar(max), C4 float));
Resultados

F IL A # C1 C2 C3 C4

1 1 Hola 6e225611-4b58- 4
4995-a0a5-
554d19012ef1

2 -11 world 6732ea46-2d5d- 2


430b-8ao1-
86e7f3351c3e

Observe el uso de la función str en R para obtener el esquema de los datos de salida. Esta función devuelve la
siguiente información:

'data.frame':2 obs. of 4 variables:


$ c1: int 1 -11
$ c2: Factor w/ 2 levels "Hello","world": 1 2
$ c3: Factor w/ 2 levels "6732EA46-2D5D-430B-8A01-86E7F3351C3E",..: 2 1
$ cR: num 4 2

Aquí puede ver que las siguientes conversiones de tipos de datos se han realizado implícitamente como parte
de esta consulta:
Columna C1 . La columna se representa como int en SQL Server, integer en R y int en el conjunto de
resultados de salida.
No se ha realizado ninguna conversión de tipo.
Columna C2 . La columna se representa como varchar(10) en SQL Server, factor en R y
varchar(max) en la salida.
Observe los cambios que se han producido en la salida: todas las cadenas de R (tanto si son un factor
como una cadena normal) se representarán como varchar(max) , independientemente de la longitud de
las cadenas.
Columna C3 . La columna se representa como uniqueidentifier en SQL Server, character en R y
varchar(max) en la salida.
Observe la conversión de tipo de datos que se ha producido. SQL Server admite uniqueidentifier , pero
R no. Por eso, los identificadores se representan como cadenas.
Columna C4 . La columna contiene valores generados por el script de R que no están presentes en los
datos originales.

Ejemplo 2: Selección de columnas dinámicas con R


En el ejemplo siguiente se muestra cómo puede usar código de R para buscar tipos de columnas no válidos.
Luego se obtiene el esquema de una tabla especificada mediante vistas del sistema de SQL Server y se quitan
las columnas que tengan un tipo no válido especificado.

connStr <- "Server=.;Database=TestDB;Trusted_Connection=Yes"


data <- RxSqlServerData(connectionString = connStr, sqlQuery = "SELECT COLUMN_NAME FROM
TestDB.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'testdata' AND DATA_TYPE <> 'image';")
columns <- rxImport(data)
columnList <- do.call(paste, c(as.list(columns$COLUMN_NAME), sep = ","))
sqlQuery <- paste("SELECT", columnList, "FROM testdata")
Consulte también
Asignaciones de tipos de datos entre Python y SQL Server
Modificación de código de R/Python para que se
ejecute en instancias de SQL Server (en la base de
datos)
14/07/2021 • 9 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
Este artículo proporciona una guía en detalle sobre cómo modificar el código de R o Python para que se ejecute
como procedimiento almacenado de SQL Server con el fin de mejorar el rendimiento al acceder a los datos de
SQL.
Cuando se traslada el código de R/Python desde un IDE local u otro entorno a SQL Server, el código funciona
generalmente sin más modificaciones. Esto es cierto especialmente para el código simple, como una función
que toma algunas entradas y devuelve un valor. También es más fácil portar soluciones que usen los paquetes
RevoScaleR /revoscalepy o MicrosoftML , que admiten la ejecución en distintos contextos de ejecución con el
mínimo de cambios.
Aún así, es posible que tenga que realizar cambios importantes en el código si se da cualquiera de estas
condiciones:
Se usan bibliotecas que tienen acceso a la red o que no se pueden instalar en SQL Server.
El código realiza llamadas independientes a orígenes de datos fuera de SQL Server, como hojas de cálculo de
Excel, archivos en recursos compartidos y otras bases de datos.
Quiere parametrizar el procedimiento almacenado y ejecutar el código en el parámetro @script de
sp_execute_external_script.
La solución original incluye varios pasos que podrían ser más eficaces en un entorno de producción si se
ejecutan de forma independiente, como la preparación de datos o la ingeniería de características, frente al
entrenamiento del modelo, la puntuación o la creación de informes.
Puede optimizar el rendimiento si cambia las bibliotecas, usa la ejecución en paralelo o descarga algún
procesamiento para SQL Server.

Paso 1. Planear requisitos y recursos


Paquetes
Determine qué paquetes se necesitan y asegúrese de que funcionan en SQL Server.
Instale los paquetes con antelación en la biblioteca de paquetes predeterminada que usa Machine
Learning Services. No se admiten las bibliotecas de usuarios.
Orígenes de datos
Si tiene previsto insertar el código en sp_execute_external_script, identifique los orígenes de datos
principales y secundarios.
Los orígenes de datos principales son grandes conjuntos de datos, como los datos de
entrenamiento del modelo o los datos de entrada para las predicciones. Planee la asignación del
conjunto de datos más grande al parámetro de entrada de sp_execute_external_script.
Los orígenes de datos secundarios suelen ser conjuntos de datos más pequeños, como listas de
factores o variables de agrupación adicionales.
Actualmente, sp_execute_external_script solo admite un único conjunto de datos como entrada para el
procedimiento almacenado, pero puede agregar varias entradas escalares o binarias.
Las llamadas al procedimiento almacenado precedidas por EXECUTE no se pueden usar como entrada
para sp_execute_external_script. Puede usar consultas, vistas o cualquier otra instrucción SELECT válida.
Determine las salidas que necesita. Si ejecuta el código mediante sp_execute_external_script, el
procedimiento almacenado puede generar una sola trama de datos como resultado. Pero también puede
generar varias salidas escalares, como trazados y modelos en formato binario, así como otros valores
escalares derivados del código o de los parámetros SQL.
Tipos de datos
Para obtener una visión detallada de las asignaciones de tipos de datos entre R/Python y SQL Server, consulte
los siguientes artículos:
Asignaciones de tipos de datos entre R y SQL Server
Asignaciones de tipos de datos entre Python y SQL Server
Eche un vistazo a los tipos de datos que se usan en el código de R/Python y haga lo siguiente:
Haga una lista de comprobación de posibles problemas de tipos de datos.
SQL Server Machine Learning Services admite todos los tipos de datos de R/Python. Sin embargo, SQL
Server admite una mayor variedad de tipos de datos que R o Python. Por tanto, al mover los datos de
SQL Server hacia y desde el código se realizan algunas conversiones implícitas de tipos de datos.
También podría necesitar convertir explícitamente algunos datos.
Se admiten valores NULL. Aún así, R usa la construcción de datos de na para representar los valores que
faltan, que son similares a los valores NULL.
Le recomendamos que elimine la dependencia de los datos que R no puede usar; por ejemplo, R no
puede usar los tipos de datos rowid y GUID de SQL Server y eso producirá errores.

Paso 2. Convertir o volver a empaquetar código


La cantidad de código que cambie dependerá de si quiere enviar el código desde un cliente remoto para que se
ejecute en el contexto de proceso de SQL Server o si pretende implementar el código como parte de un
procedimiento almacenado. Este último puede proporcionar un mejor rendimiento y seguridad de los datos,
aunque exige algunos requisitos adicionales.
Defina los datos de entrada principales como una consulta de SQL siempre que sea posible para evitar el
movimiento de datos.
Al ejecutar el código en un procedimiento almacenado, puede acceder directamente a varias entradas
escalares . En el caso de parámetros que quiera usar en la salida, agregue la palabra clave OUTPUT .
Por ejemplo, la siguiente entrada escalar @model_name contiene el nombre del modelo, que también se
genera en su propia columna en los resultados:

EXECUTE sp_execute_external_script @model_name = "DefaultModel" OUTPUT


,@language = N'R'
,@script = N'R code here'

Cualquier variable que se pase como parámetro del procedimiento almacenado


sp_execute_external_script debe asignarse a las variables en el código. De forma predeterminada, las
variables se asignan por nombre. Todas las columnas del conjunto de datos de entrada deben asignarse
también a las variables del script.
Por ejemplo, supongamos que el script de R contiene una fórmula como esta:

formula <- ArrDelay ~ CRSDepTime + DayOfWeek + CRSDepHour:DayOfWeek

Se produce un error si el conjunto de datos de entrada no contiene columnas con los nombres
coincidentes ArrDelay, CRSDepTime, DayOfWeek, CRSDepHour y DayOfWeek.
En algunos casos, es necesario definir un esquema de salida con antelación para los resultados.
Por ejemplo, para insertar los datos en una tabla, debe usar la cláusula WITH RESULT SET para
especificar el esquema.
También se necesita el esquema de salida si el script usa el argumento @parallel=1 . El motivo es que
SQL Server puede crear varios procesos para ejecutar la consulta en paralelo, con los resultados
recopilados al final. Por tanto, el esquema de salida debe prepararse antes de que se puedan crear los
procesos en paralelo.
En otros casos, se puede omitir el esquema de resultados mediante la opción WITH RESULT SETS
UNDEFINED . Esta instrucción devuelve el conjunto de datos a partir del script sin asignar nombres a las
columnas ni especificar los tipos de datos de SQL.
Le recomendamos que genere datos de seguimiento o de control de tiempo mediante T-SQL en lugar de
R/Python.
Por ejemplo, para pasar la hora del sistema u otra información usada para la auditoría y el
almacenamiento, puede agregar una llamada de T-SQL que se pasa a los resultados, en lugar de generar
datos similares en el script.
Mejorar el rendimiento y la seguridad
Evite escribir predicciones o resultados intermedios en un archivo. Escriba las predicciones en una tabla para
evitar el movimiento de datos.
Ejecute todas las consultas con antelación y revise los planes de consulta de SQL Server para identificar
las tareas que se pueden realizar en paralelo.
Si la consulta de entrada se puede paralelizar, establezca @parallel=1 como parte de los argumentos de
sp_execute_external_script.
Por lo general, el procesamiento en paralelo con este indicador es posible siempre que SQL Server pueda
trabajar con tablas con particiones o distribuir una consulta entre varios procesos y agregar los
resultados al final. Normalmente, el procesamiento en paralelo con este indicador no es posible si
entrena modelos mediante algoritmos que requieren que se lean todos los datos o si necesita crear
agregados.
Revise el código para determinar si hay pasos que se pueden realizar independientemente o de una
manera más eficiente, mediante una llamada de procedimiento almacenado independiente. Por ejemplo,
conseguirá un mejor rendimiento si realiza ingeniería de características o extracción de características por
separado y guarda los valores en una tabla.
Busque la manera de usar T-SQL en lugar de código de R/Python para computaciones basadas en
conjuntos.
Por ejemplo, esta solución de R muestra cómo las funciones de T-SQL definidas por el usuario y R
pueden realizar la misma tarea de ingeniería de características: Tutorial integral de ciencia de datos.
Póngase en contacto con un desarrollador de bases de datos para averiguar cómo mejorar el
rendimiento mediante el uso de características de SQL Server, como tablas optimizadas para memoria o
Resource Governor (si tiene Enterprise Edition).
Si usa R, reemplace las funciones de R convencionales por funciones de RevoScaleR que admitan la
ejecución distribuida si es posible. Para obtener más información, consulte Comparación de funciones de
Base R y RevoScaleR.

Paso 3. Preparar la implementación


Notifique al administrador para que los paquetes se puedan instalar y probar antes de implementar el
código.
En un entorno de desarrollo, podría ser conveniente instalar paquetes como parte del código, pero esto
es una práctica incorrecta en un entorno de producción.
No se admiten las bibliotecas de usuario, independientemente de si está usando un procedimiento
almacenado o si ejecuta código de R/Python en el contexto de proceso de SQL Server.
Empaquetado de código de R/Python en un procedimiento almacenado
Cree una función definida por el usuario de T-SQL e inserte el código mediante la instrucción sp-execute-
external-script.
Si tiene un código R complejo, use el paquete de R sqlrutils para convertir el código. Este paquete está
diseñado para ayudar a los usuarios de R con experiencia a escribir código de procedimiento almacenado
que sea adecuado. Vuelva a escribir el código de R como una sola función con entradas y salidas
claramente definidas y, a continuación, use el paquete sqlrutils para generar la entrada y las salidas en el
formato correcto. El paquete sqlrutils genera automáticamente el código del procedimiento almacenado
completo y también puede registrar el procedimiento almacenado en la base de datos.
Para más información y ejemplos, vea sqlrutils (SQL).
Integración con otros flujos de trabajo
Aproveche las herramientas de T-SQL y los procesos de ETL. Realice ingeniería de características,
extracción de características y limpieza de datos con antelación como parte de los flujos de trabajo de
datos.
Cuando se trabaja en un entorno de desarrollo dedicado, se pueden extraer datos en el equipo, analizar
los datos de forma iterativa y, luego, escribir o mostrar los resultados. En cambio, cuando se migra el
código independiente a SQL Server, gran parte de este proceso se puede simplificar o delegar a otras
herramientas de SQL Server.
Use estrategias de visualización asincrónicas que sean seguras.
Los usuarios de SQL Server a menudo no pueden acceder a los archivos del servidor y las herramientas
de cliente de SQL normalmente no admiten los dispositivos de gráficos de R/Python. Si genera trazados
u otros gráficos como parte de la solución, considere la opción de exportar los trazados como datos
binarios y guardarlos en una tabla o escribirlos.
Ajuste las funciones de predicción y puntuación en procedimientos almacenados para el acceso directo a
las aplicaciones.

Pasos siguientes
Para ver ejemplos de cómo se puede implementar soluciones de R y Python en SQL Server, consulte los
siguientes tutoriales:
Tutoriales de R
Desarrollo de un modelo predictivo en R con el aprendizaje automático de SQL
Predicción de tarifas de taxi de Nueva York con clasificación binaria
Desarrollo de SQL para científicos de datos de R
Tutoriales de Python
Predicción de alquileres de esquíes con regresión lineal con aprendizaje automático de SQL
Predicción de tarifas de taxi de Nueva York con clasificación binaria
Puntuación nativa mediante la función PREDICT de
T-SQL con aprendizaje automático en SQL
14/07/2021 • 5 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores Azure SQL Database Instancia
administrada de Azure SQL Azure Synapse Analytics
Obtenga información sobre cómo usar la puntuación nativa con la función PREDICT de T-SQL para generar
valores de predicción para nuevas entradas de datos casi en tiempo real. La puntuación nativa requiere que ya
haya un modelo entrenado.
La función PREDICT utiliza las capacidades de extensión nativas de C++ en el aprendizaje automático en SQL.
Esta metodología ofrece la velocidad de procesamiento más rápida posible de las cargas de trabajo de previsión
y predicción, y admite modelos en formato Open Neural Network Exchange (ONNX) o modelos entrenados con
los paquetes RevoScaleR y revoscalepy.

Cómo funciona la puntuación nativa


La puntuación nativa usa bibliotecas que pueden leer modelos en formato ONNX o un formato binario
predefinido, y generar puntuaciones para las nuevas entradas de datos que proporcione. Como el modelo ya
está entrenado, implementado y almacenado, se puede usar en la puntuación sin tener que llamar al intérprete
de R o de Python. Esto implica una reducción en la sobrecarga de varias interacciones de procesos, lo que da
lugar a un rendimiento de predicción mucho más rápido.
Para usar la puntuación nativa, llame a la función PREDICT de T-SQL y pase las siguientes entradas necesarias:
Un modelo compatible basado en un modelo y un algoritmo compatibles.
Datos de entrada, normalmente definidos como una consulta T-SQL.
La función devuelve predicciones de los datos de entrada, además de las columnas de datos de origen de paso a
través.

Prerrequisitos
PREDICT está disponible en:
Todas las ediciones de SQL Server 2017 y versiones posteriores en Windows y Linux
Instancia administrada de Azure SQL
Azure SQL Database
Azure SQL Edge
Azure Synapse Analytics
La función está habilitada de manera predeterminada. No es necesario instalar R o Python, ni habilitar otras
características.

Modelos admitidos
Los formatos de modelos admitidos por la función PREDICT dependen de la plataforma SQL en la que se realiza
la puntuación nativa. Vea la tabla siguiente para ver qué formatos de modelos se admiten en cada plataforma.
P L ATA F O RM A F O RM ATO DE M O DELO O N N X F O RM ATO DE M O DELO REVO SC A L E

SQL Server No Sí

Instancia administrada de Azure SQL Sí Sí

Azure SQL Database No Sí

Azure SQL Edge Sí No

Azure Synapse Analytics Sí No

Modelos de ONNX
El modelo debe estar en un formato de modelo Open Neural Network Exchange (ONNX).
Modelos RevoScale
El modelo se debe entrenar de antemano con uno de los algoritmos r x admitidos que se enumeran más abajo
mediante el paquete RevoScaleR o revoscalepy.
Serialice el modelo mediante rxSerialize para R y rx_serialize_model para Python. Estas funciones de
serialización se han optimizado para admitir la puntuación rápida.

Algoritmos RevoScale compatibles


Los algoritmos siguientes son compatibles con revoscalepy y RevoScaleR.
Algoritmos revoscalepy
rx_lin_mod
rx_logit
rx_btrees
rx_dtree
rx_dforest
Algoritmos RevoScaleR
rxLinMod
rxLogit
rxBTrees
rxDtree
rxDForest
Si necesita usar algoritmos de MicrosoftML o microsoftml, utilice Puntuación en tiempo real con sp_rxPredict.
Los tipos de modelos no compatibles son los siguientes:
Modelos que contienen otras transformaciones
Modelos que usan los algoritmos rxGlm o rxNaiveBayes en los equivalentes de RevoScaleR o revoscalepy
Modelos de PMML
Modelos creados con otras bibliotecas de código abierto o de terceros

Ejemplos
PREDICT con un modelo ONNX
En este ejemplo se muestra cómo usar un modelo ONNX almacenado en la tabla dbo.models para la
puntuación nativa.

DECLARE @model VARBINARY(max) = (


SELECT DATA
FROM dbo.models
WHERE id = 1
);

WITH predict_input
AS (
SELECT TOP (1000) [id]
, CRIM
, ZN
, INDUS
, CHAS
, NOX
, RM
, AGE
, DIS
, RAD
, TAX
, PTRATIO
, B
, LSTAT
FROM [dbo].[features]
)
SELECT predict_input.id
, p.variable1 AS MEDV
FROM PREDICT(MODEL = @model, DATA = predict_input, RUNTIME=ONNX) WITH (variable1 FLOAT) AS p;

NOTE
Dado que las columnas y los valores devueltos por PREDICT pueden variar según el tipo de modelo, debe definir el
esquema de los datos devueltos mediante una cláusula WITH .

PREDICT con un modelo RevoScale


En este ejemplo, se crea un modelo con RevoScaleR en R y, después, se llama a la función de predicción en
tiempo real desde T-SQL.
Paso 1. Preparar y guardar el modelo
Ejecute el siguiente código para crear la base de datos de ejemplo y las tablas necesarias.

CREATE DATABASE NativeScoringTest;


GO
USE NativeScoringTest;
GO
DROP TABLE IF EXISTS iris_rx_data;
GO
CREATE TABLE iris_rx_data (
"Sepal.Length" float not null, "Sepal.Width" float not null
, "Petal.Length" float not null, "Petal.Width" float not null
, "Species" varchar(100) null
);
GO

Use la siguiente instrucción para rellenar la tabla de datos con datos del conjunto de datos de iris .
INSERT INTO iris_rx_data ("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width" , "Species")
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'iris_data <- iris;'
, @input_data_1 = N''
, @output_data_1_name = N'iris_data';
GO

Ahora, cree una tabla para almacenar los modelos.

DROP TABLE IF EXISTS ml_models;


GO
CREATE TABLE ml_models ( model_name nvarchar(100) not null primary key
, model_version nvarchar(100) not null
, native_model_object varbinary(max) not null);
GO

El siguiente código crea un modelo basado en el conjunto de datos de iris y lo guarda en la tabla denominada
models .

DECLARE @model varbinary(max);


EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
iris.sub <- c(sample(1:50, 25), sample(51:100, 25), sample(101:150, 25))
iris.dtree <- rxDTree(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data =
iris[iris.sub, ])
model <- rxSerializeModel(iris.dtree, realtimeScoringOnly = TRUE)
'
, @params = N'@model varbinary(max) OUTPUT'
, @model = @model OUTPUT
INSERT [dbo].[ml_models]([model_name], [model_version], [native_model_object])
VALUES('iris.dtree','v1', @model) ;

NOTE
Asegúrese de usar la función rxSerializeModel de RevoScaleR para guardar el modelo. La función serialize de R
estándar no puede generar el formato que necesitamos.

Puede ejecutar una instrucción como la siguiente para ver el modelo almacenado en formato binario:

SELECT *, datalength(native_model_object)/1024. as model_size_kb


FROM ml_models;

Paso 2. Ejecutar PREDICT en el modelo


La siguiente instrucción PREDICT sencilla obtiene una clasificación del modelo de árbol de decisión mediante la
función de puntuación nativa . Predice las especies de iris a partir de los atributos proporcionados y de la
longitud y el ancho de pétalo.
DECLARE @model varbinary(max) = (
SELECT native_model_object
FROM ml_models
WHERE model_name = 'iris.dtree'
AND model_version = 'v1');
SELECT d.*, p.*
FROM PREDICT(MODEL = @model, DATA = dbo.iris_rx_data as d)
WITH(setosa_Pred float, versicolor_Pred float, virginica_Pred float) as p;
go

Si aparece el error "Error durante la ejecución de la función integrada PREDICT. El modelo está dañado o no es
válido", suele significar que la consulta no devolvió un modelo. Compruebe si escribió correctamente el nombre
del modelo, o si la tabla de modelos está vacía.

NOTE
Dado que las columnas y los valores devueltos por PREDICT pueden variar según el tipo de modelo, debe definir el
esquema de los datos devueltos mediante una cláusula WITH .

Pasos siguientes
PREDICT (Transact-SQL)
Documentación del aprendizaje automático en SQL
Aprendizaje automático e IA con ONNX en SQL Edge
Implementación y creación de predicciones con un modelo de ONNX en Azure SQL Edge
Puntuación de modelos de Machine Learning con PREDICT en Azure Synapse Analytics
Puntuación en tiempo real con sp_rxPredict en
SQL Server
14/07/2021 • 5 minutes to read

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


Obtenga información sobre cómo realizar la puntuación en tiempo real con el procedimiento almacenado del
sistema sp_rxPredict en SQL Server para las puntuaciones o predicciones de alto rendimiento en cargas de
trabajo de predicción.
La puntuación en tiempo real con sp_rxPredict es independiente del lenguaje y se ejecuta sin dependencias en
los entornos de ejecución de R o Python en Machine Learning Services. Mediante un modelo creado y
entrenado con las funciones de Microsoft y serializado a un formato binario en SQL Server, puede usar la
puntuación en tiempo real para generar resultados previstos sobre nuevas entradas de datos en instancias de
SQL Server que no tengan instalado el complemento de R o Python.

Funcionamiento de la puntuación en tiempo real


La puntuación en tiempo real se admite en determinados tipos de modelo basados en funciones de RevoScaleR
o MicrosoftML en R, o de revoscalepy o microsoftml en Python. Emplea bibliotecas de C++ nativas para generar
puntuaciones basadas en las entradas de usuario que se proporcionan a un modelo de aprendizaje automático
almacenado en un formato binario especial.
Como los modelos entrenados se pueden usar para la puntuación sin necesidad de llamar a un entorno de
tiempo de ejecución de lenguaje externo en Machine Learning Services, se reduce la sobrecarga de varios
procesos.
La puntuación en tiempo real es un proceso que consta de varios pasos:
1. Hay que habilitar en cada base de datos el procedimiento almacenado que realiza la puntuación.
2. Hay que cargar el modelo previamente entrenado en formato binario.
3. Se proporcionan nuevos datos de entrada para puntuarlos, ya sea mediante tablas o en filas individuales,
como entrada para el modelo.
4. Para generar puntuaciones, se llama al procedimiento almacenado sp_rxPredict.

Prerrequisitos
Habilitación de la integración de SQL Server con CLR.
Habilitar la puntuación en tiempo real.
El modelo se debe entrenar de antemano con uno de los algoritmos r x admitidos. Para más información,
consulte Algoritmos admitidos para sp_rxPredict .
Serialice el modelo mediante rxSerialize para R o rx_serialize_model para Python. Estas funciones de
serialización se han optimizado para admitir la puntuación rápida.
Guarde el modelo en la instancia del motor de base de datos desde el que quiere llamarlo. No es
necesario que esta instancia tenga la extensión en tiempo de ejecución de R o de Python.
NOTE
En la actualidad, la puntuación en tiempo real está optimizada para predicciones rápidas en conjuntos de datos más
pequeños, que van desde unas pocas filas hasta cientos de miles de filas. En conjuntos de datos grandes, el uso de
rxPredict podría ser más rápido.

Habilitar la puntuación en tiempo real


Habilite esta característica para cada base de datos que quiera usar para la puntuación. El administrador del
servidor debe ejecutar la utilidad de línea de comandos, RegisterRExt.exe, que se incluye con el paquete
RevoScaleR.
Cau t i on

Para que funcione la puntuación en tiempo real, es necesario habilitar la funcionalidad CLR de SQL en la
instancia; además, la base de datos debe estar marcada como de confianza. Al ejecutar el script, estas acciones
se realizan automáticamente. Sin embargo, no olvide las implicaciones de seguridad adicionales antes de
hacerlo.
1. Abra un símbolo del sistema con privilegios elevados y navegue hasta la carpeta donde se encuentra
RegisterRExt.exe. Puede usar esta ruta de acceso en una instalación predeterminada:
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\

2. Ejecute el siguiente comando, pero sustituya el nombre de la instancia y la base de datos de destino
donde quiera habilitar los procedimientos almacenados extendidos:
RegisterRExt.exe /installRts [/instance:name] /database:databasename

Por ejemplo, para agregar el procedimiento almacenado extendido a la base de datos CLRPredict en la
instancia predeterminada, escriba:
RegisterRExt.exe /installRts /database:CLRPRedict

El nombre de la instancia es opcional si la base de datos está en la instancia predeterminada. Si usa una
instancia con nombre, especifique el nombre de la instancia.
3. RegisterRExt.exe crea estos objetos:
ensamblados de confianza;
el procedimiento almacenado sp_rxPredict ,
un nuevo rol de base de datos, rxpredict_users . El administrador de bases de datos puede usar este
rol para conceder permiso a los usuarios que usan la función de puntuación en tiempo real.
4. Agregue los usuarios que tengan que ejecutar sp_rxPredict en el nuevo rol.

NOTE
En SQL Server 2017 y versiones posteriores, se aplican medidas de seguridad adicionales para evitar problemas con la
integración de CLR. Estas medidas también imponen restricciones adicionales sobre el uso de este procedimiento
almacenado.

Deshabilitar la puntuación en tiempo real


Para deshabilitar la función de puntuación en tiempo real, abra un símbolo del sistema con privilegios elevados
y ejecute este comando: RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]
Ejemplo
En este ejemplo se describen los pasos necesarios para preparar y guardar un modelo para la predicción en
tiempo real y se muestra un caso en R de cómo llamar a la función desde T-SQL.
Paso 1. Preparar y guardar el modelo
El formato binario que sp_rxPredict necesita es el mismo que el formato necesario para usar la función PREDICT.
Por lo tanto, en el código de R, incluya una llamada a rxSerializeModel y asegúrese de especificar
realtimeScoringOnly = TRUE , como en este ejemplo:

model <- rxSerializeModel(model.name, realtimeScoringOnly = TRUE)

Paso 2. Llamar a sp_rxPredict


Llame a sp_rxPredict como lo haría con cualquier otro procedimiento almacenado. En la versión actual, el
procedimiento almacenado solo toma dos parámetros: @model para el modelo en formato binario y
@inputData para los datos que se van a usar en la puntuación, definidos como una consulta SQL válida.
Como el formato binario es el mismo que el que usa la función PREDICT, puede utilizar los modelos y la tabla de
datos del ejemplo anterior.

DECLARE @irismodel varbinary(max)


SELECT @irismodel = [native_model_object] from [ml_models]
WHERE model_name = 'iris.dtree'
AND model_version = 'v1''

EXEC sp_rxPredict
@model = @irismodel,
@inputData = N'SELECT * FROM iris_rx_data'

NOTE
Se produce un error en la llamada a sp_rxPredict si los datos de entrada para la puntuación no incluyen columnas que
coincidan con los requisitos del modelo. Actualmente, solo se admiten los siguientes tipos de datos de .NET: double, float,
short, ushort, long, ulong y string.
Por tanto, es posible que tenga que filtrar los tipos no admitidos en los datos de entrada antes de usarlos para la
puntuación en tiempo real.
Para obtener información sobre los tipos de SQL correspondientes, vea Asignación de tipos de SQL-CLR o Asignación de
datos de parámetros de CLR.

Pasos siguientes
Puntuación nativa mediante la función PREDICT de T-SQL con aprendizaje automático en SQL
sp_rxPredict
Aprendizaje automático de SQL
Obtención de información de paquetes de Python
27/07/2021 • 5 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 describe cómo obtener información sobre los paquetes de Python instalados, incluidas las
versiones y las ubicaciones de instalación, en Machine Learning Services en SQL Server y en Clústeres de
macrodatos. Los scripts de Python de ejemplo muestran cómo mostrar información de paquetes, como la ruta
de instalación y la versión.
En este artículo se describe cómo obtener información sobre los paquetes de Python instalados, incluidas las
versiones y las ubicaciones de instalación, en SQL Server Machine Learning Services. Los scripts de Python de
ejemplo muestran cómo mostrar información de paquetes, como la ruta de instalación y la versión.
En este artículo se describe cómo obtener información sobre los paquetes de Python instalados, incluidas las
versiones y las ubicaciones de instalación, en Machine Learning Services en Azure SQL Managed Instance. Los
scripts de Python de ejemplo muestran cómo mostrar información de paquetes, como la ruta de instalación y la
versión.

Ubicación predeterminada de las bibliotecas de Python


Al instalar Machine Learning con SQL Server, se crea una biblioteca de paquetes en el nivel de instancia para
cada idioma que se instale. La biblioteca de instancias es una carpeta protegida que está registrada en
SQL Server.
Todo el script o código que se ejecuta en la base de datos en SQL Server debe cargar funciones desde la
biblioteca de instancias. SQL Server no puede obtener acceso a los paquetes instalados en otras bibliotecas.
También se aplica a los clientes remotos: cualquier código de Python que se ejecute en el contexto del proceso
del servidor solo puede usar paquetes instalados en la biblioteca de instancias. Para proteger los recursos del
servidor, la biblioteca de instancias predeterminadas solo la puede modificar un administrador del equipo.
La ruta de acceso predeterminada de los archivos binarios de Python es:
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES

Se da por sentado que la instancia predeterminada de SQL es MSSQLSERVER. Si se instala SQL Server como
instancia con nombre definida por el usuario, se usará el nombre especificado.
La ruta de acceso predeterminada de los archivos binarios de Python es:
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES

Se da por sentado que la instancia predeterminada de SQL es MSSQLSERVER. Si se instala SQL Server como
instancia con nombre definida por el usuario, se usará el nombre especificado.
Para habilitar los scripts externos, ejecute los comandos SQL siguientes:

sp_configure 'external scripts enabled', 1;


RECONFIGURE WITH override;
IMPORTANT
En Azure SQL Managed Instance, la ejecución de los comandos sp_configure y RECONFIGURE desencadena un reinicio de
SQL Server para que la configuración de RG surta efecto. Esto puede generar unos segundos de no disponibilidad.

Ejecute la instrucción SQL siguiente si quiere comprobar la biblioteca predeterminada de la instancia actual. En
este ejemplo se devuelve la lista de carpetas incluidas en la variable sys.path de Python. La lista incluye el
directorio actual y la ruta de acceso de la biblioteca estándar.

EXECUTE sp_execute_external_script
@language =N'Python',
@script=N'import sys; print("\n".join(sys.path))'

Para obtener más información sobre la variable sys.path y cómo se usa para establecer la ruta de acceso de
búsqueda del intérprete para los módulos, consulte The Module Search Path (La ruta de acceso de búsqueda de
un módulo).

NOTE
No intente instalar paquetes de Python directamente en la biblioteca de paquetes SQL con pip o métodos similares. En su
lugar, use sqlmlutils para instalar paquetes en una instancia de SQL. Para obtener más información, vea Instalación de
paquetes de Python con sqlmlutils.

Paquetes predeterminados de Python en Microsoft


Los siguientes paquetes de Python en Microsoft se instalan con SQL Server Machine Learning Services al
seleccionar la característica de Python durante la instalación.

PA Q UET ES VERSIÓ N DESC RIP C IÓ N

revoscalepy 9.4.7 Se usa para los contextos de procesos


remotos, streaming, ejecución en
paralelo de funciones rx para la
importación y transformación de
datos, modelado, visualización y
análisis.

microsoftml 9.4.7 Agrega algoritmos de aprendizaje


automático en Python.

Para obtener información sobre la versión de Python que se incluye, consulte Versiones de Python y R.
Actualizaciones de componentes
De forma predeterminada, los paquetes de Python se actualizan mediante Service Packs y actualizaciones
acumulativas. Los paquetes adicionales y las actualizaciones de versión completa de los componentes
principales de Python solo se pueden conseguir mediante actualizaciones de productos.

Paquetes de código abierto predeterminados de Python


Al seleccionar la opción de lenguaje de Python durante la instalación, se instala la distribución Anaconda 4.2 (en
Python 3.5). Además de las bibliotecas de código de Python, la instalación estándar incluye datos de ejemplo,
pruebas unitarias y scripts de ejemplo.
IMPORTANT
Nunca debe sobrescribir manualmente la versión de Python instalada por el programa de instalación de SQL Server por
versiones más recientes en la web. Los paquetes de Microsoft Python se basan en versiones específicas de Anaconda. La
modificación de la instalación podría desestabilizarla.

Visualización de todos los paquetes de Python instalados


En el siguiente script de ejemplo se muestra una lista de todos los paquetes de Python instalados en la instancia
de SQL Server.

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
import pkg_resources
import pandas
OutputDataSet = pandas.DataFrame(sorted([(i.key, i.version) for i in pkg_resources.working_set]))'
WITH result sets((Package NVARCHAR(128), Version NVARCHAR(128)));

Búsqueda de un único paquete de Python


Si ha instalado un paquete de Python y quiere asegurarse de que está disponible para una instancia de
SQL Server determinada, puede ejecutar un procedimiento almacenado para buscar el paquete y devolver los
mensajes.
Por ejemplo, el código siguiente busca el paquete scikit-learn . Si se encuentra el paquete, el código imprime
la versión del paquete.

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
import pkg_resources
pkg_name = "scikit-learn"
try:
version = pkg_resources.get_distribution(pkg_name).version
print("Package " + pkg_name + " is version " + version)
except:
print("Package " + pkg_name + " not found")
'

Resultado:

STDOUT message(s) from external script: Package scikit-learn is version 0.20.2

Vista de la versión de Python


En el ejemplo de código siguiente se devuelve la versión de Python instalada en la instancia de SQL Server.
EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
import sys
print(sys.version)
'

Pasos siguientes
Instalación de paquetes con las herramientas de Python
Instalación de nuevos paquetes de Python con sqlmlutils
Instalación de paquetes de Python con sqlmlutils
27/07/2021 • 8 minutes to read

Se aplica a: SQL Server 2019 (15.x) Instancia administrada de Azure SQL


En este artículo se describe cómo usar las funciones del paquete sqlmlutils para instalar nuevos paquetes de
Python en una instancia de Machine Learning Services en SQL Server y en Clústeres de macrodatos. Los
paquetes que se instalen podrán usarse en los scripts de Python que se ejecutan en la base de datos mediante la
instrucción T-SQL sp_execute_external_script.
En este artículo se describe cómo usar las funciones del paquete sqlmlutils para instalar nuevos paquetes de
Python en una instancia de Machine Learning Services en Azure SQL Managed Instance. Los paquetes que se
instalen podrán usarse en los scripts de Python que se ejecutan en la base de datos mediante la instrucción T-
SQL sp_execute_external_script.

NOTE
No se pueden actualizar ni desinstalar paquetes que se hayan preinstalado en una instancia de Machine Learning Services
de SQL Managed Instance. Para ver una lista de los paquetes instalados actualmente, vea Enumeración de todos los
paquetes de Python instalados.

Para obtener más información sobre la ubicación de los paquetes y las rutas de acceso de instalación, consulte
Obtención de información de paquetes de Python.

NOTE
El paquete sqlmlutils que se describe en este artículo se usa para agregar paquetes de Python a SQL Server 2019 o
versiones posteriores. Para SQL Server 2017 y versiones anteriores, consulte Instalación de paquetes con las herramientas
de Python.

Prerrequisitos
Debe tener SQL Server Machine Learning Services instalado con la opción de lenguaje Python.
Instale Azure Data Studio en el equipo cliente que usa para conectarse a SQL Server. Puede usar otras
herramientas de consulta o administración de bases de datos, pero en este artículo se da por supuesto
que emplea Azure Data Studio.
Instale el kernel de Python en Azure Data Studio. También puede instalar y usar Python en la línea de
comandos, y utilizar un entorno de desarrollo de Python alternativo como Visual Studio Code con la
extensión de Python.
La versión de Python del equipo cliente debe coincidir con la versión de Python del servidor, y los
paquetes que instale deben ser compatibles con la versión de Python que tenga. Para obtener
información sobre la versión de Python que se incluye con cada versión de SQL Server, vea Versiones de
Python y R.
Para comprobar la versión de Python en una instancia concreta de SQL Server, use el siguiente comando
de T-SQL.
EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
import sys
print(sys.version)
'

Otras consideraciones
La biblioteca de paquetes de Python se encuentra en la carpeta Archivos de programa de la instancia de
SQL Server y, de forma predeterminada, se requieren permisos de administrador para instalar contenido
en esta carpeta. Para obtener más información, consulte Ubicación de la biblioteca de paquetes.
La instalación del paquete es específica de la instancia, la base de datos y el usuario de SQL especificados
en la información de conexión proporcionada a sqlmlutils . Para usar el paquete en varias instancias o
bases de datos de SQL, o bien para usuarios diferentes, deberá instalar el paquete para cada uno. La
excepción es que si un miembro de dbo instala el paquete, este será público y se compartirá con todos
los usuarios. Si un usuario instala una versión más reciente de un paquete público, este no se verá
afectado, pero ese usuario tendrá acceso a la versión más reciente.
Antes de agregar un paquete, piense si es adecuado para el entorno de SQL Server.
Se recomienda usar Python en la base de datos para las tareas que se benefician de la estrecha
integración con el motor de base de datos, como el aprendizaje automático, en lugar de para las
tareas que simplemente consultan la base de datos.
Si agrega paquetes que ejercen demasiada presión de cálculo en el servidor, el rendimiento se
verá afectado.
En un entorno de SQL Server protegido, probablemente le interese evitar lo siguiente:
Paquetes que requieren acceso a la red
Paquetes que requieren acceso con privilegios elevados al sistema de archivos
Paquetes que se usan para el desarrollo web u otras tareas que no obtienen ningún beneficio al
ejecutarse en SQL Server
No se puede instalar el paquete de Python tensorflow con sqlmlutils. Para obtener más
información y una solución, vea Incidencias conocidas de SQL Server Machine Learning Services.

Instalación de sqlmlutils en el equipo cliente


Para usar sqlmlutils , primero debe instalarlo en el equipo cliente que usa para conectarse a SQL Server.
En Azure Data Studio
Si va a usar sqlmlutils en Azure Data Studio, puede instalarlo mediante la característica Administrar paquetes
en un cuaderno de notas del kernel de Python.
1. En un cuaderno del kernel de Python en Azure Data Studio, haga clic en Administrar paquetes .
2. Haga clic en Agregar nuevo .
3. Escriba "sqlmlutils" en el campo Buscar paquetes PIP y haga clic en Buscar .
4. Seleccione la versión del paquete que quiere instalar (se recomienda la versión más reciente).
5. Haga clic en Instalar y luego en Cerrar .
Desde la línea de comandos de Python
Si va a usar sqlmlutils desde un símbolo del sistema de Python o un IDE, puede instalar sqlmlutils con un
comando pip sencillo:
pip install sqlmlutils

También puede instalar sqlmlutils desde un archivo ZIP:


1. Asegúrese de que tiene pip instalado. Para obtener más información, vea Instalación de pip.
2. Descargue el archivo .zip sqlmlutils más reciente desde
https://github.com/Microsoft/sqlmlutils/tree/master/Python/dist en el equipo cliente. No descomprima el
archivo.
3. Abra un símbolo del sistema y ejecute el siguiente comando para instalar el paquete sqlmlutils . Sustituya
la ruta de acceso completa del archivo .zip sqlmlutils que ha descargado. En este ejemplo, se da por
supuesto que el archivo descargado es c:\temp\sqlmlutils-1.0.0.zip .

pip install --upgrade --upgrade-strategy only-if-needed c:\temp\sqlmlutils-1.0.0.zip

Adición de un paquete de Python en SQL Server


Mediante sqlmlutils , puede instalar paquetes de Python en una instancia de SQL. Después, puede usar esos
paquetes en el código de Python que se ejecuta en la instancia de SQL. sqlmlutils usa CREATE EXTERNAL
LIBRARY para instalar el paquete y cada una de sus dependencias.
En el ejemplo siguiente, agregará el paquete text-tools en SQL Server.
Adición del paquete en línea
Si el equipo cliente que usa para conectarse a SQL Server tiene acceso a Internet, puede usar sqlmlutils para
buscar el paquete text-tools y las dependencias a través de Internet y, después, instalar el paquete en una
instancia de SQL Server de forma remota.
1. En el equipo cliente, abra Python o un entorno de Python.
2. Use los comandos siguientes para instalar el paquete text-tools . Sustituya la información propia de
conexión de base de datos de SQL Server (si usa la autenticación de Windows, no necesita los
parámetros uid y pwd ).
1. En el equipo cliente, abra Python o un entorno de Python.
2. Use los comandos siguientes para instalar el paquete text-tools . Sustituya la información de conexión de
base de datos de SQL Server propia.

import sqlmlutils
connection = sqlmlutils.ConnectionInfo(server="server", database="database", uid="username", pwd="password")
sqlmlutils.SQLPackageManager(connection).install("text-tools")

Adición del paquete sin conexión


Si el equipo cliente que usa para conectarse a SQL Server no tiene conexión a Internet, puede usar PIP en un
equipo con acceso a Internet para descargar el paquete y los paquetes dependientes en una carpeta local.
Después, copie la carpeta en el equipo cliente en el que puede instalar el paquete sin conexión.
En un equipo con acceso a Internet
1. Abra un símbolo del sistema y ejecute el comando siguiente para crear una carpeta local que contenga
el paquete text-tools . En este ejemplo, se crea la carpeta c:\temp\text-tools .

pip download text-tools -d c:\temp\text-tools


2. Copie la carpeta text-tools en el equipo cliente. En el ejemplo siguiente se da por supuesto que lo ha
copiado en c:\temp\packages\text-tools .
En el equipo cliente
Use sqlmlutils para instalar cada paquete (archivo .whl) que encuentre en la carpeta local que ha creado PIP .
No importa en qué orden instale los paquetes.
En este ejemplo, text-tools no tiene dependencias, por lo que solo se va a instalar un archivo de la carpeta
text-tools . Por el contrario, un paquete como scikit-plot tiene 11 dependencias, por lo que encontrará
12 archivos en la carpeta (el paquete scikit-plot y los 11 paquetes dependientes) y debe instalar cada uno de
ellos.
Ejecute el siguiente script de Python. Sustituya la ruta de acceso de archivo y el nombre reales del paquete, así
como la información propia de conexión de base de datos de SQL Server (si usa la autenticación de Windows,
no necesita los parámetros uid y pwd ). Repita la instrucción sqlmlutils.SQLPackageManager para cada archivo
de paquete de la carpeta.
Ejecute el siguiente script de Python. Sustituya la ruta de acceso de archivo y el nombre reales del paquete, así
como la información propia de conexión de base de datos de SQL Server. Repita la instrucción
sqlmlutils.SQLPackageManager para cada archivo de paquete de la carpeta.

import sqlmlutils
connection = sqlmlutils.ConnectionInfo(server="yourserver", database="yourdatabase", uid="username",
pwd="password"))
sqlmlutils.SQLPackageManager(connection).install("text_tools-1.0.0-py3-none-any.whl")

Uso del paquete


Ahora puede usar el paquete en un script de Python en SQL Server. Por ejemplo:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from text_tools.finders import find_best_string
corpus = "Lorem Ipsum text"
query = "Ipsum"
first_match = find_best_string(query, corpus)
print(first_match)
'

Eliminación de un paquete de SQL Server


Si quiere quitar el paquete text-tools , use el siguiente comando de Python en el equipo cliente, con la misma
variable de conexión que definió anteriormente.

sqlmlutils.SQLPackageManager(connection).uninstall("text-tools")

Más funciones de sqlmlutils


El paquete sqlmlutils contiene una serie de funciones para administrar paquetes de Python, así como para
crear, administrar y ejecutar consultas y procedimientos almacenados en SQL Server. Para obtener más
información, vea el archivo Léame de sqlmlutils para Python.
Para obtener información sobre cualquier función de sqlmlutils , use la función help de Python. Por ejemplo:
import sqlmlutils
help(SQLPackageManager.install)

Pasos siguientes
Para ver información sobre los paquetes de Python instalados en SQL Server Machine Learning Services,
consulte Obtención de información de paquetes de Python.
Para obtener información sobre cómo instalar paquetes de R en SQL Server Machine Learning Services,
consulte Instalación de nuevos paquetes de R en SQL Server.
Instalación de paquetes con las herramientas de
Python en SQL Server
14/07/2021 • 4 minutes to read

Se aplica a: Solo disponible en SQL Server 2017 (14.x)


En este artículo se describe cómo usar las herramientas de Python estándar para instalar paquetes de Python
nuevos en una instancia de SQL Server Machine Learning Services. En general, el proceso de instalación de
paquetes nuevos es similar al de un entorno estándar de Python. Sin embargo, se requieren algunos pasos
adicionales si el servidor no tiene conexión a Internet.
Para obtener más información sobre la ubicación de los paquetes y las rutas de acceso de instalación, consulte
Obtención de información de paquetes de Python.

Prerequisites
Debe tener SQL Server Machine Learning Services instalado con la opción de lenguaje Python.
Otras consideraciones
Los paquetes deben ser compatibles con Python 3.5 y ejecutarse en Windows.
La biblioteca de paquetes de Python se encuentra en la carpeta Archivos de programa de la instancia de
SQL Server y, de forma predeterminada, se requieren permisos de administrador para instalar contenido
en esta carpeta. Para obtener más información, consulte Ubicación de la biblioteca de paquetes.
La instalación de paquetes se realiza por instancia. Si tiene varias instancias de Machine Learning
Services, debe agregar el paquete a cada una de ellas.
Los servidores de bases de datos suelen estar bloqueados. En muchos casos, el acceso a Internet está
totalmente bloqueado. En el caso de los paquetes con una larga lista de dependencias, deberá identificar
estas dependencias de antemano y estar listo para instalar manualmente cada una de ellas.
Antes de agregar un paquete, piense si es adecuado para el entorno de SQL Server.
Se recomienda usar Python en la base de datos para las tareas que se benefician de la estrecha
integración con el motor de base de datos, como el aprendizaje automático, en lugar de para las
tareas que simplemente consultan la base de datos.
Si agrega paquetes que ejercen demasiada presión de cálculo en el servidor, el rendimiento se
verá afectado.
En un entorno de SQL Server protegido, probablemente le interese evitar lo siguiente:
Paquetes que requieren acceso a la red
Paquetes que requieren acceso con privilegios elevados al sistema de archivos
Paquetes que se usan para el desarrollo web u otras tareas que no obtienen ningún beneficio al
ejecutarse en SQL Server

Adición de un paquete de Python en SQL Server


Para instalar un paquete de Python nuevo que se puede usar en un script en SQL Server, instale el paquete en la
instancia de Machine Learning Services. Si tiene varias instancias de Machine Learning Services, debe agregar el
paquete a cada una de ellas.
El paquete instalado en los ejemplos siguientes es CNTK, un marco de aprendizaje profundo de Microsoft que
admite la personalización, el entrenamiento y el uso compartido de distintos tipos de redes neuronales.
Para la instalación sin conexión, descargue el paquete de Python.
Si va a instalar paquetes de Python en un servidor sin acceso a Internet, debe descargar el archivo WHL de un
equipo con acceso a Internet y, a continuación, copiar el archivo en el servidor.
Por ejemplo, en un equipo conectado a Internet, puede descargar el archivo cntk-2.1-cp35-cp35m-win_amd64.whl
del sitio https://cntk.ai/PythonWheel/CPU-Only y, a continuación, copiar el archivo en una carpeta local del
equipo con SQL Server.

IMPORTANT
Asegúrese de obtener la versión de Windows del paquete. Si el archivo termina en .gz, probablemente no sea la versión
correcta.

Para más información sobre las descargas del marco CNTK para varias plataformas y para varias versiones de
Python, consulte el artículo sobre cómo configurar CNTK en un equipo.
Búsqueda de la biblioteca de Python
Busque la ubicación predeterminada de la biblioteca de Python que usa SQL Server. Si ha instalado varias
instancias, busque la carpeta PYTHON_SERVICES para la instancia en la que quiere agregar el paquete.
Por ejemplo, si Machine Learning Services se instaló con los valores predeterminados y el aprendizaje
automático se habilitó en la instancia predeterminada, la ruta de acceso es:

cd "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES"

TIP
Para depuraciones y pruebas futuras, es posible que quiera configurar un entorno de Python específico para la biblioteca
de instancias.

Instalación del paquete con pip


Use el instalador pip para instalar paquetes nuevos. Puede encontrar pip.exe en la subcarpeta Scripts de la
carpeta PYTHON_SERVICES . El programa de instalación de SQL Server no agrega la subcarpeta Scripts a la ruta
de acceso del sistema, por lo que debe especificar la ruta de acceso completa o puede agregar la carpeta Scripts
a la variable PATH en Windows.

NOTE
Si usa Visual Studio 2017 o Visual Studio 2015 con las extensiones de Python, puede ejecutar pip install desde la
ventana Entornos de Python . Haga clic en Paquetes y, en el cuadro de texto, proporcione el nombre o la ubicación del
paquete que quiere instalar. No es necesario escribir pip install , porque se rellena automáticamente.

Si el equipo tiene acceso a Internet, proporcione el nombre del paquete:

scripts\pip.exe install cntk

También puede especificar la dirección URL de un paquete y una versión específicos, por ejemplo:
scripts\pip.exe install https://cntk.ai/PythonWheel/CPU-Only/cntk-2.1-cp35-cp35m-win_amd64.whl

Si el equipo no tiene acceso a Internet, especifique el archivo WHL que descargó anteriormente. Por
ejemplo:

scripts\pip.exe install C:\Downloads\cntk-2.1-cp35-cp35m-win_amd64.whl

Es posible que se le pida que eleve los permisos para completar la instalación. A medida que progresa la
instalación, puede ver los mensajes de estado en la ventana del símbolo del sistema.
Carga del paquete o sus funciones como parte del script
Una vez completada la instalación, puede empezar a usar el paquete inmediatamente en scripts de Python en
SQL Server.
Para usar las funciones del paquete en el script, inserte la instrucción import <package_name> estándar en las
líneas iniciales del script:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
import cntk
# Python statements ...
'

Consulte también
Obtención de información de paquetes de Python
Tutoriales de Python para SQL Server Machine Learning Services
API de Python para CNTK.
Obtención de información de paquetes de R
15/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 describe cómo obtener información sobre los paquetes de R instalados en Machine Learning
Services en SQL Server y en Clústeres de macrodatos. Los scripts de R de ejemplo muestran cómo mostrar
información de paquetes, como la ruta de instalación y la versión.
En este artículo se describe cómo obtener información sobre los paquetes de R instalados en SQL Server
Machine Learning Services. Los scripts de R de ejemplo muestran cómo mostrar información de paquetes,
como la ruta de instalación y la versión.
En este artículo se describe cómo obtener información sobre los paquetes de R instalados en Machine Learning
Services en Azure SQL Managed Instance. Los scripts de R de ejemplo muestran cómo mostrar información de
paquetes, como la ruta de instalación y la versión.

Ubicación predeterminada de las bibliotecas de R


Al instalar Machine Learning con SQL Server, se crea una biblioteca de paquetes en el nivel de instancia para
cada idioma que se instale. En Windows, la biblioteca de instancias es una carpeta protegida que está registrada
en SQL Server.
Todo el script que se ejecuta en la base de datos en SQL Server debe cargar funciones desde la biblioteca de
instancias. SQL Server no puede obtener acceso a los paquetes instalados en otras bibliotecas. También se aplica
a los clientes remotos: cualquier script de R que se ejecute en el contexto del proceso del servidor solo puede
usar paquetes instalados en la biblioteca de instancias. Para proteger los recursos del servidor, la biblioteca de
instancias predeterminadas solo la puede modificar un administrador del equipo.
La ruta de acceso predeterminada de los archivos binarios de R es:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library

Se da por sentado que la instancia predeterminada de SQL es MSSQLSERVER. Si se instala SQL Server como
instancia con nombre definida por el usuario, se usará el nombre especificado.
La ruta de acceso predeterminada de los archivos binarios de R es:
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library

Se da por sentado que la instancia predeterminada de SQL es MSSQLSERVER. Si se instala SQL Server como
instancia con nombre definida por el usuario, se usará el nombre especificado.
La ruta de acceso predeterminada de los archivos binarios de R es:
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\R_SERVICES\library

Se da por sentado que la instancia predeterminada de SQL es MSSQLSERVER. Si se instala SQL Server como
instancia con nombre definida por el usuario, se usará el nombre especificado.
Ejecute la siguiente instrucción para comprobar la biblioteca de paquetes de R predeterminada de la instancia
actual:
EXECUTE sp_execute_external_script
@language = N'R',
@script = N'OutputDataSet <- data.frame(.libPaths());'
WITH RESULT SETS (([DefaultLibraryName] VARCHAR(MAX) NOT NULL));
GO

Paquetes predeterminados de R en Microsoft


Los siguientes paquetes de R de Microsoft se instalan con SQL Server R Services.

PA Q UET ES VERSIÓ N DESC RIP C IÓ N

RevoScaleR 8.0.3 Se usa para los contextos de procesos


remotos, streaming, ejecución en
paralelo de funciones rx para la
importación y transformación de
datos, modelado, visualización y
análisis.

sqlrutils 1.0.0 Se usa para incluir scripts de R en


procedimientos almacenados.

Los siguientes paquetes de R de Microsoft se instalan con SQL Server Machine Learning Services al seleccionar
la característica de R durante la instalación.

PA Q UET ES VERSIÓ N DESC RIP C IÓ N

RevoScaleR 9.2 Se usa para los contextos de procesos


remotos, streaming, ejecución en
paralelo de funciones rx para la
importación y transformación de
datos, modelado, visualización y
análisis.

sqlrutils 1.0.0 Se usa para incluir scripts de R en


procedimientos almacenados.

MicrosoftML 1.4.0 Agrega algoritmos de aprendizaje


automático en R.

olapR 1.0.0 Se utiliza para escribir instrucciones


MDX en R.

Los siguientes paquetes de R de Microsoft se instalan con SQL Server Machine Learning Services al seleccionar
la característica de R durante la instalación.

PA Q UET ES VERSIÓ N DESC RIP C IÓ N

RevoScaleR 9.4.7 Se usa para los contextos de procesos


remotos, streaming, ejecución en
paralelo de funciones rx para la
importación y transformación de
datos, modelado, visualización y
análisis.
PA Q UET ES VERSIÓ N DESC RIP C IÓ N

sqlrutils 1.0.0 Se usa para incluir scripts de R en


procedimientos almacenados.

MicrosoftML 9.4.7 Agrega algoritmos de aprendizaje


automático en R.

olapR 1.0.0 Se utiliza para escribir instrucciones


MDX en R.

Actualizaciones de componentes
De forma predeterminada, los paquetes de R se actualizan mediante Service Packs y actualizaciones
acumulativas. Los paquetes adicionales y las actualizaciones de versión completa de los componentes
principales de R solo se pueden conseguir mediante actualizaciones de productos.
Además, puede agregar paquetes de MicrosoftML y olapR a una instancia de SQL Server a través de una
actualización de componente.

Paquetes de código abierto predeterminados de R


La compatibilidad con R incluye R de código abierto para que pueda llamar a las funciones base de R e instalar
paquetes de código abierto y de terceros adicionales. La compatibilidad con el lenguaje de R incluye
funcionalidades básicas, como base , stats , utils , entre otras. Una instalación base de R también incluye
numerosos conjuntos de datos de ejemplo y herramientas de R estándar, como RGui (un editor interactivo
ligero) y RTerm (un símbolo del sistema de R).
La distribución de R de código abierto incluida en la instalación es Microsoft R Open (MRO). MRO agrega valor
a R base mediante la inclusión de paquetes de código abierto adicionales, como la biblioteca de kernels
matemáticos de Intel.
Para obtener información sobre la versión de R que se incluye con cada versión de SQL Server, consulte
Versiones de Python y R.

IMPORTANT
Nunca debe sobrescribir manualmente la versión de R instalada por el programa de instalación de SQL Server por
versiones más recientes en la web. Los paquetes de Microsoft R se basan en versiones específicas de R. La modificación de
la instalación podría desestabilizarla.

Visualización de todos los paquetes de R instalados


En el ejemplo siguiente se usa la función de R installed.packages() en un procedimiento almacenado Transact-
SQL para mostrar una lista de paquetes de R que se han instalado en la biblioteca R_SERVICES para la instancia
actual de SQL. Este script devuelve los campos de nombre y versión del paquete en el archivo DESCRIPTION.
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) ))

Para obtener más información sobre los campos opcionales y predeterminados del archivo DESCRIPTION del
paquete de R, consulte https://cran.r-project.org.

Búsqueda de un paquete de R
Si ha instalado un paquete de R y quiere asegurarse de que está disponible para una instancia de SQL Server
determinada, puede ejecutar un procedimiento almacenado para cargar el paquete y devolver los mensajes.
Por ejemplo, la siguiente instrucción busca y carga el paquete glue, si está disponible. Si no se puede encontrar o
cargar el paquete, obtendrá un error.

EXECUTE sp_execute_external_script
@language =N'R',
@script=N'
require("glue")
'

Para ver más información sobre el paquete, consulte packageDescription . La siguiente instrucción devuelve
información del paquete MicrosoftML .

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
print(packageDescription("MicrosoftML"))
'

Pasos siguientes
Instalación de paquetes con herramientas de R
Instalación de nuevos paquetes de R con sqlmlutils
Instalación de paquetes con herramientas de R
14/07/2021 • 4 minutes to read

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


En este artículo se describe cómo usar herramientas de R estándar para instalar nuevos paquetes de R en una
instancia de SQL Server Machine Learning Services o SQL Server R Services. Puede instalar paquetes en un
servidor SQL Server que tenga una conexión a Internet, así como uno que esté aislado de Internet.
Además de las herramientas de R estándar, puede instalar paquetes de R mediante:
RevoScaleR
T-SQL (CREATE EXTERNAL LIBRARY)

Consideraciones generales
El código de R que se ejecuta en SQL Server solo puede usar los paquetes instalados en la biblioteca de
instancia predeterminada. SQL Server no puede cargar paquetes de bibliotecas externas, aunque la
biblioteca esté en el mismo equipo. Esto incluye las bibliotecas de R instaladas con otros productos de
Microsoft.
La biblioteca de paquetes de R se encuentra en la carpeta Archivos de programa de la instancia de
SQL Server y, de forma predeterminada, se requieren permisos de administrador para instalar contenido
en esta carpeta. Para obtener más información, consulte Ubicación de la biblioteca de paquetes.
Los usuarios que no son administradores pueden instalar paquetes mediante RevoScaleR 9.0.1 y
versiones posteriores, o bien mediante CREATE EXTERNAL LIBRARY. El usuario dbo_owner , o un usuario
con permiso CREATE EXTERNAL LIBRARY, puede instalar paquetes de R en la base de datos actual. Para
más información, consulte:
Uso de RevoScaleR para instalar paquetes de R
Uso de T-SQL (CREATE EXTERNAL LIBRARY) para instalar paquetes de R en SQL Server
Los usuarios que no son administradores pueden instalar paquetes mediante RevoScaleR 9.0.1 y
versiones posteriores. El usuario dbo_owner puede instalar paquetes de R en la base de datos actual.
Para obtener más información, vea Uso de RevoScaleR para instalar paquetes de R.
En un entorno de SQL Server protegido, probablemente le interese evitar lo siguiente:
Paquetes que requieren acceso a la red
Paquetes que requieren acceso con privilegios elevados al sistema de archivos
Paquetes que se usan para el desarrollo web u otras tareas que no obtienen ningún beneficio al
ejecutarse en SQL Server

Instalación en línea (con acceso a Internet)


Si el servidor SQL Server tiene acceso a Internet, puede usar las herramientas de instalación de paquetes
estándar para instalar paquetes de R.
1. Determine la ubicación de la biblioteca de instancias (vea Obtención de información de paquetes de R) y
vaya a la carpeta donde están instaladas las herramientas de R.
Por ejemplo, la ruta de acceso predeterminada para una instancia predeterminada de SQL Server es la
siguiente:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\bin\x64\

Por ejemplo, la ruta de acceso predeterminada para una instancia predeterminada de SQL Server es la
siguiente:
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\bin\x64\

2. Ejecute R o Rgui como administrador desde esta carpeta.


3. Ejecute el comando R install.packages y especifique el nombre del paquete. Si el paquete tiene
dependencias, el instalador descarga automáticamente las dependencias y las instala.
Si tiene varias instancias en paralelo de SQL Server, ejecute la instalación por separado para cada instancia en la
que desee usar el paquete. Actualmente los paquetes no se pueden compartir entre instancias.

Instalación sin conexión (sin acceso a Internet)


Con frecuencia, los servidores que hospedan bases de datos de producción no tienen conexión a Internet. Para
instalar paquetes de R en ese entorno, descargue y prepare paquetes y dependencias de antemano (como
archivos comprimidos) y, a continuación, copie los archivos en una carpeta en el servidor. Una vez que los
archivos estén en su lugar, los paquetes se pueden instalar sin conexión.
La identificación de todas las dependencias resulta complicada. Para R, se recomienda usar miniCRAN para
crear un repositorio local. miniCRAN toma una lista de los paquetes que quiere instalar, analiza las
dependencias y recopila todos los archivos comprimidos. A continuación, crea un repositorio único que se
puede copiar en la instancia de SQL Server aislada. El paquete igraph también es útil para analizar las
dependencias de paquete.
Para obtener más información, consulte Creación de un repositorio de paquete de R local mediante miniCRAN.
Una vez que el archivo comprimido está en la instancia de SQL Server, puede instalarlo con las herramientas de
R estándar en el servidor.
1. Determine la ubicación de la biblioteca de instancias (vea Obtención de información de paquetes de R) y
vaya a la carpeta donde están instaladas las herramientas de R.
Por ejemplo, la ruta de acceso predeterminada para una instancia predeterminada de SQL Server es la
siguiente:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\bin\x64\

Por ejemplo, la ruta de acceso predeterminada para una instancia predeterminada de SQL Server es la
siguiente:
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\bin\x64\

2. Ejecute R o Rgui como administrador desde esta carpeta.


3. Ejecute el comando install.packages de R y especifique el paquete o el nombre del repositorio, así
como la ubicación de los archivos comprimidos. Por ejemplo:

install.packages("C:\\Temp\\Downloaded packages\\mynewpackage.zip", repos=NULL)

Este comando extrae el paquete de R mynewpackage de su archivo comprimido local e instala el paquete.
Si el paquete tiene dependencias, el instalador comprueba si hay paquetes existentes en la biblioteca. Si
ha creado un repositorio que incluye las dependencias, el instalador instala también los paquetes
necesarios.

NOTE
Si los paquetes necesarios no están presentes en la biblioteca de instancias y no se encuentran en los archivos
comprimidos, se produce un error en la instalación del paquete de destino.

Como alternativa a miniCRAN , puede realizar estos pasos manualmente:


1. Identifique todas las dependencias de paquete.
2. Compruebe si los paquetes necesarios ya están instalados en el servidor. Si el paquete está instalado,
compruebe que la versión es correcta.
3. Descargue el paquete y todas las dependencias en un equipo independiente con acceso a Internet.
4. Coloque el paquete y las dependencias en un único archivo de paquete.
5. Comprima el archivo si aún no está en formato comprimido.
6. Mueva los archivos a una carpeta a la que tenga acceso el servidor.
7. Ejecute un comando de instalación compatible o una instrucción DDL para instalar el paquete en la biblioteca
de instancias.

Consulte también
Obtención de información de paquetes de R
Sugerencias para usar paquetes de R
Tutoriales de lenguaje R de SQL Server
Instalación de paquetes de R con sqlmlutils
14/07/2021 • 9 minutes to read

Se aplica a: SQL Server 2019 (15.x) Instancia administrada de Azure SQL


En este artículo se describe cómo usar las funciones del paquete sqlmlutils para instalar paquetes de R en una
instancia de Machine Learning Services en SQL Server y en Clústeres de macrodatos. Los paquetes que se
instalen podrán usarse en los scripts de R que se ejecutan en la base de datos mediante la instrucción T-SQL
sp_execute_external_script.

NOTE
El paquete sqlmlutils que se describe en este artículo se usa para agregar paquetes de R a SQL Server 2019 o versiones
posteriores. Respecto a SQL Server 2017 y versiones anteriores, vea Instalación de paquetes con herramientas de R.

En este artículo se describe cómo usar las funciones del paquete sqlmlutils para instalar paquetes de R en una
instancia de Machine Learning Services en Azure SQL Managed Instance. Los paquetes que se instalen podrán
usarse en los scripts de R que se ejecutan en la base de datos mediante la instrucción T-SQL
sp_execute_external_script.

Prerrequisitos
Instale R y RStudio Desktop en el equipo cliente que usa para conectarse a SQL Server. Puede usar
cualquier IDE de R para ejecutar scripts, pero en este artículo se da por supuesto que es RStudio.
La versión de R en el equipo cliente debe coincidir con la del servidor, y los paquetes que instale deben
ser compatibles con la versión de R que tenga. Para obtener información sobre la versión de R que se
incluye con cada versión de SQL Server, consulte Versiones de Python y R.
Para comprobar la versión de R en una instancia concreta de SQL Server, use el siguiente comando de T-
SQL.

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'print(R.version)'

Instale Azure Data Studio en el equipo cliente que usa para conectarse a SQL Server. Puede usar otras
herramientas de consulta o administración de bases de datos, pero en este artículo se da por supuesto
que emplea Azure Data Studio.
Otras consideraciones
La instalación del paquete es específica de la instancia, la base de datos y el usuario de SQL especificados
en la información de conexión proporcionada a sqlmlutils . Para usar el paquete en varias instancias o
bases de datos de SQL, o bien para usuarios diferentes, deberá instalar el paquete para cada uno. La
excepción es que si un miembro de dbo instala el paquete, este será público y se compartirá con todos
los usuarios. Si un usuario instala una versión más reciente de un paquete público, este no se verá
afectado, pero ese usuario tendrá acceso a la versión más reciente.
El script de R que se ejecuta en SQL Server solo puede usar los paquetes instalados en la biblioteca de
instancia predeterminada. SQL Server no puede cargar paquetes de bibliotecas externas, aunque la
biblioteca esté en el mismo equipo. Esto incluye las bibliotecas de R instaladas con otros productos de
Microsoft.
En un entorno de SQL Server protegido, probablemente le interese evitar lo siguiente:
Paquetes que requieren acceso a la red
Paquetes que requieren acceso con privilegios elevados al sistema de archivos
Paquetes que se usan para el desarrollo web u otras tareas que no obtienen ningún beneficio al
ejecutarse en SQL Server

Instalación de sqlmlutils en el equipo cliente


Para usar sqlmlutils , primero debe instalarlo en el equipo cliente que usa para conectarse a SQL Server.
El paquete sqlmlutils depende del paquete odbc y odbc depende de otros paquetes. En los procedimientos
siguientes se instalan todos estos paquetes en el orden correcto.
Instalación de sqlmlutils en línea
Si el equipo cliente tiene acceso a Internet, puede descargar e instalar sqlmlutils y sus paquetes dependientes
en línea.
1. Descargue el archivo sqlmlutils más reciente ( .zip para Windows, .tar.gz para Linux) de
https://github.com/microsoft/sqlmlutils/releases en el equipo cliente. No expanda el archivo.
2. Abra un símbolo del sistema , y ejecute los comandos siguientes para instalar los paquetes odbc y
sqlmlutils . Sustituya la ruta de acceso al archivo sqlmlutils que descargó. El paquete odbc se ha
encontrado en línea y se ha instalado.

R.exe -e "install.packages('odbc', type='binary')"


R.exe CMD INSTALL sqlmlutils_1.0.0.zip

R.exe -e "install.packages('odbc')"
R.exe CMD INSTALL sqlmlutils_1.0.0.tar.gz

Instalación de sqlmlutils sin conexión


Si el equipo cliente no tiene conexión a Internet, tendrá que descargar los paquetes odbc y sqlmlutils con
antelación mediante un equipo que sí tenga acceso a Internet. Después, puede copiar los archivos en una
carpeta en el equipo cliente e instalar los paquetes sin conexión.
El paquete odbc tiene varios paquetes dependientes, y resulta complicado identificar todas las dependencias de
un paquete. Recomendamos usar miniCRAN para crear una carpeta de repositorio local para el paquete que
incluya todos los paquetes dependientes. Para obtener más información, consulte Creación de un repositorio de
paquete de R local mediante miniCRAN.
El paquete de sqlmlutils consta de un solo archivo que se puede copiar e instalar en el equipo cliente.
En un equipo con acceso a Internet:
1. Instale miniCRAN . Para obtener más información, consulte Instalación de miniCRAN.
2. En RStudio, ejecute el siguiente script de R para crear un repositorio local del paquete odbc . En este
ejemplo se da por supuesto que el repositorio se creará en la carpeta odbc .
library("miniCRAN")
CRAN_mirror <- c(CRAN = "https://cran.microsoft.com")
local_repo <- "odbc"
pkgs_needed <- "odbc"
pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);

makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "win.binary", Rversion =


"3.5");

library("miniCRAN")
CRAN_mirror <- c(CRAN = "https://cran.microsoft.com")
local_repo <- "odbc"
pkgs_needed <- "odbc"
pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);

makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "source", Rversion = "3.5");

Para el valor Rversion , use la versión de R instalada en SQL Server. Para comprobar la versión instalada,
use el siguiente comando de T-SQL.

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'print(R.version)'

3. Descargue el archivo sqlmlutils más reciente ( .zip para Windows, .tar.gz para Linux) de
https://github.com/microsoft/sqlmlutils/releases. No expanda el archivo.
4. Copie toda la carpeta del repositorio odbc y el archivo sqlmlutils en el equipo cliente.
En el equipo cliente que usa para conectarse a SQL Server:
1. Abra un símbolo del sistema.
2. Ejecute los comandos siguientes para instalar odbc y, después, sqlmlutils . Sustituya las rutas de acceso
completas a la carpeta del repositorio odbc y el archivo sqlmlutils que ha copiado en este equipo.

R.exe -e "install.packages('odbc', repos='odbc')"


R.exe CMD INSTALL sqlmlutils_1.0.0.zip

R.exe -e "install.packages('odbc', repos='odbc')"


R.exe CMD INSTALL sqlmlutils_1.0.0.tar.gz

Adición de un paquete de R en SQL Server


En el ejemplo siguiente, agregará el paquete de glue a SQL Server.
Adición del paquete en línea
Si el equipo cliente que usa para conectarse a SQL Server tiene acceso a Internet, puede usar sqlmlutils para
buscar el paquete de glue y las dependencias a través de Internet y, después, instalar el paquete en una
instancia de SQL Server de forma remota.
1. En el equipo cliente, abra RStudio y cree un nuevo archivo de script de R .
2. Use el siguiente script de R para instalar el paquete de glue mediante sqlmlutils . Sustituya la
información de conexión de base de datos de SQL Server propia.
library(sqlmlutils)
connection <- connectionInfo(
server = "server",
database = "database",
uid = "username",
pwd = "password")

sql_install.packages(connectionString = connection, pkgs = "glue", verbose = TRUE, scope = "PUBLIC")

TIP
El ámbito puede ser PÚBLICO o PRIVADO . El ámbito público es útil para que el administrador de bases de
datos instale paquetes que todos los usuarios pueden usar. El ámbito privado hace que el paquete esté disponible
solo para el usuario que lo instala. Si no especifica el ámbito, el ámbito predeterminado es PRIVADO .

Adición del paquete sin conexión


Si el equipo cliente no tiene una conexión a Internet, puede utilizar miniCRAN para descargar el paquete de
glue mediante un equipo que no tenga acceso a Internet. Después, copie el paquete en el equipo cliente en el
que puede instalar el paquete sin conexión. Consulte Instalación de miniCRAN para obtener información sobre
cómo instalar miniCRAN .
En un equipo con acceso a Internet:
1. Ejecute el siguiente script de R para crear un repositorio local para glue . En este ejemplo, la carpeta del
repositorio se crea en c:\downloads\glue .

library("miniCRAN")
CRAN_mirror <- c(CRAN = "https://cran.microsoft.com")
local_repo <- "c:/downloads/glue"
pkgs_needed <- "glue"
pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);

makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "win.binary", Rversion =


"3.5");

library("miniCRAN")
CRAN_mirror <- c(CRAN = "https://cran.microsoft.com")
local_repo <- "c:/downloads/glue"
pkgs_needed <- "glue"
pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);

makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "source", Rversion = "3.5");

Para el valor Rversion , use la versión de R instalada en SQL Server. Para comprobar la versión instalada,
use el siguiente comando de T-SQL.

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'print(R.version)'

2. Copie toda la carpeta del repositorio de glue ( c:\downloads\glue ) en el equipo cliente. Por ejemplo,
cópiela en la carpeta c:\temp\packages\glue .
En el equipo cliente:
1. Abra RStudio y cree un nuevo archivo de script de R .
2. Use el siguiente script de R para instalar el paquete de glue mediante sqlmlutils . Sustituya su propia
información de conexión de base de datos de SQL Server (si no usa la autenticación de Windows,
agregue los parámetros uid y pwd ).

library(sqlmlutils)
connection <- connectionInfo(
server= "yourserver",
database = "yourdatabase")
localRepo = "c:/temp/packages/glue"

sql_install.packages(connectionString = connection, pkgs = "glue", verbose = TRUE, scope = "PUBLIC",


repos=paste0("file:///",localRepo))

TIP
El ámbito puede ser PÚBLICO o PRIVADO . El ámbito público es útil para que el administrador de bases de
datos instale paquetes que todos los usuarios pueden usar. El ámbito privado hace que el paquete esté disponible
solo para el usuario que lo instala. Si no especifica el ámbito, el ámbito predeterminado es PRIVADO .

Uso del paquete


Una vez instalado el paquete de glue , puede usarlo en un script de R en SQL Server con el comando T-SQL
sp_execute_external_script .
1. Abra Azure Data Studio y conéctese a la base de datos de SQL Server.
2. Ejecute el siguiente comando:

EXECUTE sp_execute_external_script @language = N'R'


, @script = N'
library(glue)

name <- "Fred"


birthday <- as.Date("2020-06-14")
text <- glue(''My name is {name} '',
''and my birthday is {format(birthday, "%A, %B %d, %Y")}.'')

print(text)
';

Resultados

My name is Fred and my birthday is Sunday, June 14, 2020.

Eliminación del paquete


Si desea eliminar el paquete de glue , ejecute el siguiente script de R. Use la misma variable de conexión que
definió anteriormente.

sql_remove.packages(connectionString = connection, pkgs = "glue", scope = "PUBLIC")

Más funciones de sqlmlutils


El paquete sqlmlutils contiene una serie de funciones para administrar paquetes de R, así como para crear,
administrar y ejecutar consultas y procedimientos almacenados en SQL Server. Para obtener más información,
vea el archivo Léame de sqlmlutils para R.
Para obtener información sobre cualquier función de sqlmlutils , use la función help de R o ? . . Por ejemplo:

library(sqlmlutils)
help("sql_install.packages")

Pasos siguientes
Para obtener información sobre los paquetes de R instalados, consulte Obtener información de paquetes de
R.
Para obtener ayuda para trabajar con paquetes de R, consulte Sugerencias para usar paquetes de R.
Para obtener información sobre la instalación de paquetes de Python, consulte Instalación de paquetes de
Python con PIP.
Para obtener más información sobre SQL Server Machine Learning Services, consulte ¿Qué es SQL Server
Machine Learning Services (Python y R)?
Uso de T-SQL (CREATE EXTERNAL LIBRARY) para
instalar paquetes de R en SQL Server
14/07/2021 • 2 minutes to read

Se aplica a: Solo disponible en SQL Server 2017 (14.x)


En este artículo se explica cómo instalar nuevos paquetes de R en una instancia de SQL Server en la que el
aprendizaje automático está habilitado. Hay varios enfoques entre los que elegir. El uso de T-SQL funciona mejor
para los administradores de servidores que no están familiarizados con R.
La instrucción CREATE EXTERNAL LIBRARY permite agregar un paquete o un conjunto de paquetes a una
instancia o una base de datos específica sin ejecutar código de R o Python directamente. Sin embargo, este
método requiere la preparación del paquete y permisos de base de datos adicionales.
Todos los paquetes deben estar disponibles como un archivo comprimido local, en lugar de descargarse a
petición desde Internet.
Todas las dependencias deben identificarse por el nombre y la versión e incluirse en el archivo ZIP. Se
produce un error en la instrucción si los paquetes necesarios no están disponibles, incluidas las
dependencias de paquetes de nivel inferior.
Debe tener el rol db_owner o contar con el permiso CREATE EXTERNAL LIBRARY en un rol de base de
datos. Para obtener más información, consulte CREATE EXTERNAL LIBRARY.

Descarga de paquetes en formato de archivo


Si va a instalar un único paquete, descargue el paquete en formato comprimido.
Es más común instalar varios paquetes debido a las dependencias de paquete. Cuando un paquete requiere
otros paquetes, debe comprobar que todos ellos son accesibles entre sí durante la instalación. Se recomienda
crear un repositorio local mediante miniCRAN para ensamblar una colección completa de paquetes, así como
igraph para analizar las dependencias de los paquetes. La instalación de una versión incorrecta de un paquete o
la omisión de una dependencia de paquetes puede producir un error en una instrucción CREATE EXTERNAL
LIBRARY.

Copia del archivo en una carpeta local


Copie el archivo comprimido que contiene todos los paquetes en una carpeta local del servidor. Si no tiene
acceso al sistema de archivos del servidor, también puede pasar un paquete completo como una variable, con
un formato binario. Para obtener más información, vea CREATE EXTERNAL LIBRARY.

Ejecución de la instrucción para cargar paquetes


Abra una ventana de consulta mediante una cuenta con privilegios administrativos.
Ejecute la instrucción T-SQL CREATE EXTERNAL LIBRARY para cargar la colección de paquetes comprimidos en la
base de datos.
Por ejemplo, la siguiente instrucción nombra como origen del paquete un repositorio miniCRAN que contiene el
paquete randomForest , junto con sus dependencias.
CREATE EXTERNAL LIBRARY [randomForest]
FROM (CONTENT = 'C:\Temp\Rpackages\randomForest_4.6-12.zip')
WITH (LANGUAGE = 'R');

No se puede usar un nombre arbitrario; el nombre de la biblioteca externa debe tener el mismo nombre que se
espera usar al cargar o llamar al paquete.

Comprobación de la instalación del paquete


Si la biblioteca se crea correctamente, puede ejecutar el paquete en SQL Server, llamándolo dentro de un
procedimiento almacenado.

EXEC sp_execute_external_script
@language =N'R',
@script=N'library(randomForest)'

Consulte también
Obtención de información de paquetes de R
Tutoriales de R
Uso de RevoScaleR para instalar paquetes de R
15/07/2021 • 7 minutes to read

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


En este artículo se describe cómo usar las funciones de RevoScaleR (versión 9.0.1 y posteriores) para instalar
paquetes de R en SQL Server con Machine Learning Services o R Services. Las funciones RevoScaleR las pueden
usar los usuarios remotos y no administradores para instalar paquetes en SQL Server sin acceso directo al
servidor.

Funciones de RevoScaleR para administración de paquetes


En la tabla siguiente se describen las funciones que se usan para la instalación y administración de paquetes de
R.

F UN C IÓ N DESC RIP C IÓ N

rxSqlLibPaths Determina la ruta de acceso de la biblioteca de instancias en


el servidor SQL Server remoto.

rxFindPackage Obtiene la ruta de acceso de uno o varios paquetes en el


servidor SQL Server remoto.

rxInstallPackages Llame a esta función desde un cliente R remoto para instalar


paquetes en un contexto de proceso de SQL Server, ya sea
desde un repositorio especificado o leyendo paquetes
comprimidos guardados de forma local. Esta función
comprueba si hay dependencias y se asegura de que se
puedan instalar todos los paquetes relacionados en
SQL Server, como la instalación de paquetes de R en el
contexto de proceso local. Para usar esta opción, debe tener
habilitada la administración de paquetes en el servidor y en
la base de datos. Los entornos de cliente y servidor deben
tener la misma versión de RevoScaleR.

rxInstalledPackages Obtiene una lista de los paquetes instalados en el contexto


de proceso especificado.

rxSyncPackages Copia información acerca de una biblioteca de paquetes


entre el sistema de archivos y la base de datos para el
contexto de proceso especificado.

rxRemovePackages Quita los paquetes en el contexto de proceso especificado.


También calcula las dependencias y se asegura de que se
quiten los paquetes que otros paquetes de SQL Server ya no
usan, con el objetivo de liberar recursos.

Prerrequisitos
Administración remota habilitada en SQL Server. Para más información, vea Habilitación de la
administración de paquetes de R remota en SQL Server.
Las versiones de RevoScaleR son las mismas en los entornos de cliente y servidor. Para más información,
vea Obtener información sobre paquetes de R.
Tiene permiso para conectarse al servidor y a una base de datos, y para ejecutar comandos de R. Debe
ser miembro de un rol de base de datos que le permite instalar paquetes en la instancia y la base de
datos especificadas.
Los usuarios del ámbito compar tido pueden instalarse por los usuarios que pertenecen al rol
rpkgs-shared en una base de datos especificada. Todos los usuarios de este rol pueden desinstalar
paquetes compartidos.
Los usuarios del ámbito privado pueden instalarse por cualquier usuario que pertenezca al rol
rpkgs-private en una base de datos. Sin embargo, los usuarios solo pueden ver y desinstalar sus
propios paquetes.
Los propietarios de bases de datos pueden trabajar con paquetes compartidos o privados.

Conexiones de cliente
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?

Una estación de trabajo cliente puede ser Microsoft R Client o Microsoft Machine Learning Server (los científicos
de datos suelen usar la edición gratuita para desarrolladores) en la misma red.
Al llamar a las funciones de administración de paquetes desde un cliente remoto de R, debe crear primero un
objeto de contexto de proceso mediante la función RxInSqlServer. A partir de ese momento, para cada función
de administración de paquetes que use, pase el contexto de proceso como argumento.
La identidad del usuario se especifica normalmente al establecer el contexto de proceso. Si no especifica un
nombre de usuario y una contraseña al crear el contexto de proceso, se usa la identidad del usuario que ejecuta
el código de R.
1. En una línea de comandos de R, defina una cadena de conexión para la instancia y la base de datos.
2. Use el constructor RxInSqlServer para definir un contexto de proceso de SQL Server, usando la cadena de
conexión.

sqlcc <- RxInSqlServer(connectionString = myConnString, shareDir = sqlShareDir, wait = sqlWait,


consoleOutput = sqlConsoleOutput)

3. Cree una lista de los paquetes que desea instalar y guarde la lista en una variable de cadena.

packageList <- c("e1071", "mice")

4. Llame a rxInstallPackages y pase el contexto de proceso y la variable de cadena que contiene los nombres
de paquete.

rxInstallPackages(pkgs = packageList, verbose = TRUE, computeContext = sqlcc)

Si se requieren paquetes dependientes, también se instalan, suponiendo que haya una conexión a
Internet disponible en el cliente.
Los paquetes se instalan con las credenciales del usuario que realiza la conexión, en el ámbito
predeterminado para ese usuario.

Llamada a funciones de administración de paquetes en


procedimientos almacenados
Puede ejecutar funciones de administración de paquetes dentro de sp_execute_external_script . Al hacerlo, la
función se ejecuta utilizando el contexto de seguridad del autor de la llamada del procedimiento almacenado.

Ejemplos
En esta sección se ofrecen ejemplos de uso de estas funciones desde un cliente remoto al conectarse a una
instancia o base de datos de SQL Server como contexto de proceso.
Para todos los ejemplos, debe proporcionar una cadena de conexión o un contexto de proceso, lo cual requiere
una cadena de conexión. En este ejemplo se proporciona una manera de crear un contexto de proceso para
SQL Server:

instance_name <- "computer-name/instance-name";


database_name <- "TestDB";
sqlWait= TRUE;
sqlConsoleOutput <- TRUE;
connString <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name,
";Trusted_Connection=true;", sep="");
sqlcc <- RxInSqlServer(connectionString = connString, wait = sqlWait, consoleOutput = sqlConsoleOutput,
numTasks = 4);

Dependiendo de dónde se encuentre el servidor y del modelo de seguridad, es posible que deba proporcionar
una especificación de dominio y subred en la cadena de conexión, o bien usar un inicio de sesión de SQL. Por
ejemplo:

connStr <- "Driver=SQL


Server;Server=myserver.financeweb.contoso.com;Database=Finance;Uid=RUser1;Pwd=RUserPassword"

Obtención de una ruta de acceso de paquete en un contexto de proceso de SQL Server


En este ejemplo se obtiene la ruta de acceso del paquete RevoScaleR en el contexto del proceso, sqlcc .

sqlPackagePaths <- rxFindPackage(package = "RevoScaleR", computeContext = sqlcc)


print(sqlPackagePaths)

Resultados
"C:/Program Files/Microsoft SQL Server/MSSQL14.MSSQLSERVER/R_SERVICES/library/RevoScaleR"

TIP
Si ha habilitado la opción para ver la salida de la consola SQL, puede obtener mensajes de estado de la función que
precede a la instrucción print . Una vez que haya terminado de probar el código, establezca consoleOutput en FALSE
en el constructor de contexto de proceso para eliminar los mensajes.

Obtener la ubicación de varios paquetes


En el ejemplo siguiente se obtienen las rutas de acceso de los paquetes RevoScaleR y lattice en el contexto de
proceso, sqlcc . Para obtener información sobre varios paquetes, pase un vector de cadena que contenga el
nombre de los paquetes.
packagePaths <- rxFindPackage(package = c("RevoScaleR", "lattice"), computeContext = sqlcc)
print(packagePaths)

Obtención de versiones de paquete en un contexto de proceso remoto


Ejecute este comando en una consola de R para obtener el número de compilación y los números de versión de
los paquetes instalados en el contexto de proceso, sqlServer.

sqlPackages <- rxInstalledPackages(fields = c("Package", "Version", "Built"), computeContext = sqlServer)

Instalar un paquete en SQL Server


En este ejemplo se instala el paquete forecast y sus dependencias en el contexto de proceso.

pkgs <- c("forecast")


rxInstallPackages(pkgs = pkgs, verbose = TRUE, scope = "private", computeContext = sqlcc)

Quitar un paquete de SQL Server


En este ejemplo se quita el paquete forecast y sus dependencias del contexto de proceso.

pkgs <- c("forecast")


rxRemovePackages(pkgs = pkgs, verbose = TRUE, scope = "private", computeContext = sqlcc)

Sincronización de paquetes entre la base de datos y el sistema de archivos


En el ejemplo siguiente se comprueba la base de datos TestDB y se determina si todos los paquetes están
instalados en el sistema de archivos. Si faltan algunos paquetes, se instalan en el sistema de archivos.

# Instantiate the compute context


connectionString <- "Driver=SQL Server;Server=myServer;Database=TestDB;Trusted_Connection=True;"
computeContext <- RxInSqlServer(connectionString = connectionString )

# Synchronize the packages in the file system for all scopes and users
rxSyncPackages(computeContext=computeContext, verbose=TRUE)

La sincronización de paquetes funciona en cada base de datos y para cada usuario. Para obtener más
información, consulte Sincronización de paquete de R para SQL Server.
Uso de un procedimiento almacenado para enumerar paquetes en SQL Server
Ejecute este comando desde Management Studio u otra herramienta que admita T-SQL para obtener una lista
de los paquetes instalados en la instancia actual, utilizando rxInstalledPackages en un procedimiento
almacenado.

EXEC sp_execute_external_script
@language=N'R',
@script=N'
myPackages <- rxInstalledPackages();
OutputDataSet <- as.data.frame(myPackages);
'

La función rxSqlLibPaths se puede utilizar para determinar la biblioteca activa utilizada por SQL Server
Machine Learning Services. Este script solo puede devolver la ruta de acceso de la biblioteca del servidor actual.
declare @instance_name nvarchar(100) = @@SERVERNAME, @database_name nvarchar(128) = db_name();
exec sp_execute_external_script
@language = N'R',
@script = N'
connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name,
";Trusted_Connection=true;", sep="");
.libPaths(rxSqlLibPaths(connStr));
print(.libPaths());
',
@input_data_1 = N'',
@params = N'@instance_name nvarchar(100), @database_name nvarchar(128)',
@instance_name = @instance_name,
@database_name = @database_name;

Consulte también
Habilitación de la administración de paquetes de R remota
Sincronización de paquetes de R
Sugerencias para usar paquetes de R
Obtención de información de paquetes de R
Habilitación o deshabilitación de la administración
remota de paquetes para SQL Server
14/07/2021 • 3 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 habilitar la administración remota de paquetes de R desde una estación de
trabajo cliente o un servidor Machine Learning Server diferente. Una vez habilitada la característica de
administración de paquetes en SQL Server, puede usar comandos de RevoScaleR en un cliente para instalar
paquetes en SQL Server.
De forma predeterminada, la característica de administración de paquetes externos para SQL Server está
deshabilitada. Debe ejecutar un script independiente para habilitar la característica como se describe en la
sección siguiente.

Información general acerca del proceso y las herramientas


Para habilitar o deshabilitar la administración de paquetes en SQL Server, use la utilidad de línea de comandos
RegisterRExt.exe , incluida en el paquete RevoScaleR .
La habilitación de esta característica es un proceso de dos pasos que requiere un administrador de base de
datos: habilite la administración de paquetes en la instancia de SQL Server (una vez por instancia de
SQL Server) y, a continuación, habilite la administración de paquetes en la base de datos SQL (una vez por cada
base de datos de SQL Server).
La deshabilitación de la característica de administración de paquetes también requiere varios pasos: quite los
permisos y los paquetes de nivel de base de datos (una vez por base de datos) y, luego, quite los roles del
servidor (una vez por instancia).

Habilitación de la administración de paquetes


1. En SQL Server, abra un símbolo del sistema con privilegios elevados y navegue hasta la carpeta donde se
encuentra la utilidad, RegisterRExt.exe. La ubicación predeterminada es
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExe.exe .

2. Ejecute el siguiente comando y proporcione los argumentos adecuados para su entorno:


RegisterRExt.exe /install pkgmgmt [/instance:name] [/user:username] [/password:*|password]

Este comando crea objetos de nivel de instancia en el equipo de SQL Server que son necesarios para la
administración de paquetes. También reinicia Launchpad para la instancia.
Si no especifica una instancia, se usa la instancia predeterminada. Si no especifica un usuario, se usa el
contexto de seguridad actual. Por ejemplo, el siguiente comando habilita la administración de paquetes
en la instancia predeterminada, con las credenciales del usuario que abrió el símbolo del sistema:
REgisterRExt.exe /install pkgmgmt

3. Para agregar la administración a una base de datos específica, ejecute el comando siguiente desde un
símbolo del sistema con privilegios elevados:
RegisterRExt.exe /install pkgmgmt /database:databasename [/instance:name] [/user:username]
[/password:*|password]

Este comando crea algunos artefactos de base de datos, incluidos los siguientes roles de base de datos
que se usan para controlar los permisos de usuario: rpkgs-users , rpkgs-private y rpkgs-shared .
Por ejemplo, el siguiente comando habilita la administración de paquetes en la base de datos, en la
instancia predeterminada. Si no especifica un usuario, se usa el contexto de seguridad actual.
RegisterRExt.exe /install pkgmgmt /database:TestDB

4. Repita el comando para cada base de datos en la que se deben instalar los paquetes.
5. Para comprobar que los nuevos roles se han creado correctamente, en SQL Server Management Studio,
haga clic en la base de datos, expanda Seguridad y expanda Roles de base de datos .
También puede ejecutar una consulta en sys.database_principals como la siguiente:

SELECT pr.principal_id, pr.name, pr.type_desc,


pr.authentication_type_desc, pe.state_desc,
pe.permission_name, s.name + '.' + o.name AS ObjectName
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe
ON pe.grantee_principal_id = pr.principal_id
JOIN sys.objects AS o
ON pe.major_id = o.object_id
JOIN sys.schemas AS s
ON o.schema_id = s.schema_id;

Después de habilitar esta característica, puede usar la función RevoScaleR para instalar o desinstalar paquetes
desde un cliente remoto de R.

Deshabilitación de la administración de paquetes


1. Desde un símbolo del sistema con privilegios elevados, ejecute de nuevo la utilidad RegisterRExt y
deshabilite la administración de paquetes en el nivel de base de datos:
RegisterRExt.exe /uninstall pkgmgmt /database:databasename [/instance:name] [/user:username]
[/password:*|password]

Este comando quita los objetos de base de datos relacionados con la administración de paquetes de la
base de datos especificada. También quita todos los paquetes que se instalaron desde la ubicación del
sistema de archivos protegido en el equipo de SQL Server.
2. Repita este comando en cada base de datos en la que se usara la administración de paquetes.
3. (Opcional) Después de quitar los paquetes de todas las bases de datos mediante el paso anterior, ejecute
el siguiente comando desde un símbolo del sistema con privilegios elevados:
RegisterRExt.exe /uninstall pkgmgmt [/instance:name] [/user:username] [/password:*|password]

Este comando quita la característica de administración de paquetes de la instancia. Es posible que tenga
que reiniciar manualmente el servicio Launchpad una vez más para ver los cambios.

Pasos siguientes
Uso de RevoScaleR para instalar paquetes de R
Obtención de información de paquetes de R
Sugerencias para usar paquetes de R
Sincronización de un paquete de R para
SQL Server
15/07/2021 • 5 minutes to read

Se aplica a: Solo disponible en SQL Server 2017 (14.x)


La versión de RevoScaleR que se incluye en SQL Server 2017 incluye la funcionalidad de sincronizar las
colecciones de paquetes de R entre el sistema de archivos y la instancia y la base de datos donde se usan los
paquetes.
Esta característica se ha proporcionado para facilitar la copia de seguridad de colecciones de paquetes de R
asociadas a bases de datos de SQL Server. Con esta característica, un administrador puede restaurar no solo la
base de datos, sino también los paquetes de R utilizados por los científicos de datos que trabajan en esa base de
datos.
En este artículo se describe la característica de sincronización de paquetes y cómo usar la función
rxSyncPackages para realizar las siguientes tareas:
Sincronizar una lista de paquetes para una base de datos de SQL Server completa
Sincronizar paquetes usados por un usuario individual o por un grupo de usuarios
Si un usuario se traslada a otro servidor de SQL Server, puede realizar una copia de seguridad de la base
de datos de trabajo del usuario y restaurarla en el nuevo servidor, y los paquetes del usuario se instalarán
en el sistema de archivos del nuevo servidor, tal y como requiere R.
Por ejemplo, puede usar la sincronización de paquetes en estos escenarios:
El DBA restauró una instancia de SQL Server a una nueva máquina y pide a los usuarios que se conecten
desde sus clientes de R y ejecuten rxSyncPackages para actualizar y restaurar sus paquetes.
Cree que un paquete de R en el sistema de archivos está dañado, por lo que ejecuta rxSyncPackages en el
servidor SQL Server.

Requisitos
Para poder usar la sincronización de paquetes, debe tener la versión adecuada de Microsoft R. Esta característica
se proporciona en la versión 9.1.0 o posteriores de Microsoft R.
También debe habilitar la característica de administración de paquetes en el servidor.
Determinación de si el servidor es compatible con la administración de paquetes
Esta característica está disponible en SQL Server 2017 CTP 2 o posterior.
Habilitación de la característica de administración de paquetes
El uso de la sincronización de paquetes requiere que la nueva característica de administración de paquetes esté
habilitada en la instancia de SQL Server y en las bases de datos individuales. Para más información, vea
Habilitación o deshabilitación de la administración de paquetes para SQL Server.
1. El administrador del servidor habilita la característica para la instancia de SQL Server.
2. Para cada base de datos, el administrador concede a los usuarios individuales la capacidad de instalar o
compartir paquetes de R mediante roles de base de datos.
Una vez hecho esto, puede usar las funciones de RevoScaleR, como rxInstallPackages, para instalar paquetes en
una base de datos. La información sobre los usuarios y los paquetes que pueden usar se almacena en la
instancia de SQL Server.
Siempre que se agrega un nuevo paquete mediante las funciones de administración de paquetes, se actualizan
los registros de SQL Server y del sistema de archivos. Esta información se puede usar para restaurar
información de paquetes para toda la base de datos.
Permisos
La persona que ejecuta la función de sincronización de paquetes debe ser una entidad de seguridad en la
instancia de SQL Server y en la base de datos que contiene los paquetes.
El autor de la llamada de la función debe ser miembro de uno de estos roles de administración de
paquetes: rpkgs-shared o rpkgs-private .
Para sincronizar los paquetes marcados como compar tidos , la persona que ejecuta la función debe ser
miembro del rol rpkgs-shared y los paquetes que se van a migrar deben haberse instalado en una
biblioteca de ámbito compartido.
Para sincronizar los paquetes marcados como privados , el propietario del paquete o el administrador
deben ejecutar la función y los paquetes deben ser privados.
Para sincronizar paquetes en nombre de otros usuarios, el propietario debe ser miembro del rol de base
de datos db_owner .

Funcionamiento de la sincronización de paquetes


Para usar la sincronización de paquetes, llame a rxSyncPackages, que es una nueva función de RevoScaleR.
Para cada llamada a rxSyncPackages , debe especificar una instancia de SQL Server y una base de datos. A
continuación, enumere los paquetes que se van a sincronizar o especifique el ámbito del paquete.
1. Cree el contexto de proceso de SQL Server mediante la función RxInSqlServer . Si no se especifica un
contexto de proceso, se usa el contexto de proceso actual.
2. Proporcione el nombre de una base de datos en la instancia del contexto de proceso especificado. Los
paquetes se sincronizan por base de datos.
3. Especifique los paquetes que se van a sincronizar mediante el argumento de ámbito.
Si utiliza el ámbito privado , solo se sincronizan los paquetes que pertenecen al propietario especificado.
Si especifica el ámbito compar tido , se sincronizan todos los paquetes no privados de la base de datos.
Si ejecuta la función sin especificar el ámbito privado o compar tido , se sincronizan todos los paquetes.
4. Si el comando se ejecuta correctamente, los paquetes existentes en el sistema de archivos se agregan a la
base de datos, con el ámbito y el propietario especificados.
Si el sistema de archivos está dañado, los paquetes se restauran en función de la lista que se mantiene en
la base de datos.
Si la característica de administración de paquetes no está disponible en la base de datos de destino, se
produce un error: "The package management feature is either not enabled on the SQL Server or version
is too old" (La característica de administración de paquetes no está habilitada en SQL Server o la versión
es demasiado antigua).
Ejemplo 1. Sincronizar todos los paquetes por base de datos
En este ejemplo se obtienen todos los paquetes nuevos del sistema de archivos local y se instalan los paquetes
en la base de datos [TestDB]. Dado que ningún propietario es específico, la lista incluye todos los paquetes que
se han instalado para ámbitos privados y compartidos.

connectionString <- "Driver=SQL Server;Server=myServer;Database=TestDB;Trusted_Connection=True;"


computeContext <- RxInSqlServer(connectionString = connectionString )
rxSyncPackages(computeContext=computeContext, verbose=TRUE)

Ejemplo 2. Restringir paquetes sincronizados por ámbito


En los siguientes ejemplos se sincronizan solo los paquetes en el ámbito especificado.

#Shared scope
rxSyncPackages(computeContext=computeContext, scope="shared", verbose=TRUE)

#Private scope
rxSyncPackages(computeContext=computeContext, scope="private", verbose=TRUE)

Ejemplo 3. Restringir paquetes sincronizados por propietario


En el ejemplo siguiente se muestra cómo sincronizar solo los paquetes que se instalaron para un usuario
específico. En este ejemplo, el usuario se identifica mediante el nombre de inicio de sesión de SQL, user1.

rxSyncPackages(computeContext=computeContext, scope="private", owner = "user1", verbose=TRUE))

Recursos relacionados
Administración de paquetes de R para SQL Server
Creación de un repositorio de paquetes de R local
mediante miniCRAN
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 artículo se describe cómo instalar paquetes de R sin conexión mediante miniCRAN para crear un
repositorio local de paquetes y dependencias. miniCRAN identifica y descarga paquetes y dependencias en una
única carpeta que se copia en otros equipos para la instalación de paquetes de R sin conexión.
Puede especificar uno o más paquetes, y miniCRAN lee de forma recursiva el árbol de dependencias para estos
paquetes. A continuación, descarga solo los paquetes enumerados y sus dependencias de CRAN o repositorios
similares.
Una vez terminado, miniCRAN crea un repositorio internamente coherente que consta de los paquetes
seleccionados y de todas las dependencias necesarias. Puede trasladar este repositorio local al servidor y pasar
a instalar los paquetes sin conexión a Internet.
Los usuarios con experiencia en R suelen buscar la lista de paquetes dependientes en el archivo DESCRIPTION
de un paquete descargado. Sin embargo, los paquetes enumerados en Impor taciones pueden tener
dependencias de segundo nivel. Por esta razón, recomendamos miniCRAN para ensamblar la colección
completa de paquetes necesarios.

Por qué crear un repositorio local


El objetivo de crear un repositorio de paquetes local es proporcionar una ubicación única que un administrador
de servidor u otros usuarios de la organización pueden usar para instalar nuevos paquetes de R en un servidor,
especialmente uno que no tenga acceso a Internet. Después de crear el repositorio, puede modificarlo
agregando nuevos paquetes o actualizando la versión de los paquetes existentes.
Los repositorios de paquetes son útiles en estos escenarios:
Seguridad : muchos usuarios de R están acostumbrados a descargar e instalar nuevos paquetes de R a
discreción, desde CRAN o desde uno de sus sitios reflejados. Sin embargo, por motivos de seguridad, los
servidores de producción que ejecutan SQL Server normalmente no tienen conexión a Internet.
Instalación sin conexión más sencilla : para instalar un paquete en un servidor sin conexión, es
necesario que también descargue todas las dependencias de paquete. El uso de miniCRAN hace que sea
más fácil obtener todas las dependencias en el formato correcto y evitar errores de dependencia.
Administración de versiones mejorada : en un entorno de varios usuarios, existen buenas razones
para evitar la instalación sin restricciones de varias versiones de paquetes en el servidor. Use un
repositorio local para proporcionar un conjunto coherente de paquetes para los usuarios.

Instalación de miniCRAN
El propio paquete de miniCRAN depende de otros 18 paquetes de CRAN, entre los que se encuentra el paquete
de RCurl , que tiene una dependencia de sistema en el paquete de curl-devel . De forma similar, el paquete de
XML tiene una dependencia en libxml2-devel . Para resolver las dependencias, recomendamos compilar el
repositorio local inicialmente en una máquina con acceso a Internet completo.
Ejecute los comandos siguientes en un equipo con una base de R, herramientas de R y conexión a Internet. Se
supone que este no es su equipo con SQL Server. Mediante los comandos siguientes, se instalan los paquetes de
miniCRAN e igraph . En este ejemplo se comprueba si el paquete ya está instalado, pero se pueden omitir las
instrucciones if e instalar los paquetes directamente.

if(!require("miniCRAN")) install.packages("miniCRAN")
if(!require("igraph")) install.packages("igraph")
library("miniCRAN")

Establecimiento del reflejo de CRAN y de la instantánea de informe


de MRAN
Especifique un sitio reflejado que se usará para obtener paquetes. Por ejemplo, puede usar el sitio MRAN o
cualquier otro sitio de su región que contenga los paquetes que necesite. Si se produce un error en una
descarga, pruebe con otro sitio reflejado.

CRAN_mirror <- c(CRAN = "https://cran.cnr.berkeley.edu")

Creación de una carpeta local


Cree una carpeta local en la que almacenar los paquetes recopilados. Si repite esta operación con frecuencia, tal
vez sea conveniente usar un nombre descriptivo, como "miniCRANZooPackages" o "miniCRANMyRPackageV2".
Especifique la carpeta como repositorio local. La sintaxis de R usa una barra diagonal para los nombres de ruta
de acceso, de manera opuesta a las convenciones de Windows.

local_repo <- "C:/miniCRANZooPackages"

Adición de paquetes al repositorio local


Después de instalar y cargar miniCRAN , cree una lista en que se especifiquen los paquetes adicionales que
desea descargar.
No agregue dependencias a esta lista inicial. El paquete de igraph que usa miniCRAN genera
automáticamente la lista de dependencias. Para obtener más información sobre cómo utilizar el gráfico de
dependencias generado, consulte Uso de miniCRAN para identificar las dependencias de paquete.
1. Agregue los paquetes de destino "Zoo" y "Forecast" a una variable.

pkgs_needed <- c("zoo", "forecast")

2. Opcionalmente, trace el gráfico de dependencias. Esto no es necesario, pero puede proporcionar


información.

plot(makeDepGraph(pkgs_needed))

3. Cree el repositorio local. Asegúrese de cambiar la versión de R, si es necesario, a la versión instalada en la


instancia de SQL Server. Si ha actualizado algún componente, es posible que la versión sea más reciente
que la versión original. Para más información, vea Obtener información sobre paquetes de R.
pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);
makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "win.binary", Rversion =
"3.3");

A partir de esta información, el paquete de miniCRAN crea la estructura de carpetas necesaria para copiar
los paquetes en SQL Server más adelante.
En este punto, debe tener una carpeta que contenga los paquetes que necesita y los paquetes adicionales
necesarios. La carpeta debe contener una colección de paquetes comprimidos. No descomprima los paquetes ni
cambie el nombre de los archivos.
Opcionalmente, ejecute el código siguiente para enumerar los paquetes contenidos en el repositorio local de
miniCRAN.

pdb <- as.data.frame(pkgAvail(local_repo, type = "win.binary", Rversion = "3.3"), stringsAsFactors = FALSE);


head(pdb);
pdb$Package;
pdb[, c("Package", "Version", "License")]

Adición de paquetes a la biblioteca de instancias


Una vez que tenga un repositorio local con los paquetes que necesita, mueva el repositorio de paquetes al
equipo con SQL Server. En el procedimiento siguiente se describe cómo instalar los paquetes mediante
herramientas de R.

NOTE
El método recomendado para instalar paquetes es usar sqlmlutils . Consulte Instalación de nuevos paquetes de R con
sqlmlutils.

1. Copie la carpeta que contiene el repositorio de miniCRAN, en su totalidad, en el servidor donde va a


instalar los paquetes. Normalmente, la carpeta tiene esta estructura:
<miniCRAN root>/bin/windows/contrib/version/<all packages>

En este procedimiento, se supone que una carpeta está fuera de la unidad raíz.
2. Abra una herramienta de R asociada a la instancia (por ejemplo, puede usar Rgui.exe). Haga clic con el
botón derecho y seleccione Ejecutar como administrador para permitir que la herramienta realice
actualizaciones en el sistema.
Por ejemplo, la ubicación de archivo predeterminada para RGUI es
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\bin\x64 .

Por ejemplo, la ubicación de archivo para RGUI es


C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\bin\x64 .
Por ejemplo, la ubicación de archivo para RGUI es
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\R_SERVICES\bin\x64 .

3. Obtenga la ruta de acceso de la biblioteca de instancias y agréguela a la lista de rutas de acceso de la


biblioteca.
Por ejemplo,
outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL13.MSSQLSERVER/R_SERVICES/library"

Por ejemplo,

outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL14.MSSQLSERVER/R_SERVICES/library"

Por ejemplo,

outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL15.MSSQLSERVER/R_SERVICES/library"

4. Especifique la nueva ubicación en el servidor en que ha copiado el repositorio de miniCRAN como


server_repo .

En este ejemplo, se supone que ha copiado el repositorio en una carpeta temporal del servidor.

inputlib <- "C:/miniCRANZooPackages"

5. Dado que está trabajando en una nueva área de trabajo de R en el servidor, también debe proporcionar la
lista de paquetes que se van a instalar.

mypackages <- c("zoo", "forecast")

6. Instale los paquetes y proporcione la ruta de acceso a la copia local del repositorio de miniCRAN.

install.packages(mypackages, repos = file.path("file://", normalizePath(inputlib, winslash = "/")),


lib = outputlib, type = "win.binary", dependencies = TRUE);

7. Desde la biblioteca de instancias, puede ver los paquetes instalados con un comando similar al siguiente:

installed.packages()

Consulte también
Obtención de información de paquetes de R
Tutoriales de R
Sugerencias para usar paquetes de R
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 artículo se proporcionan sugerencias útiles sobre el uso de paquetes de R en SQL Server. Estas
sugerencias están destinadas a administradores de bases de datos que no están familiarizados con R y a
desarrolladores de R experimentados que no están familiarizados con el acceso a paquetes en una instancia de
SQL Server.

Si no está familiarizado con R


Como administrador que instala paquetes de R por primera vez, le conviene conocer algunos aspectos básicos
sobre la administración de paquetes de R.
Dependencias de paquetes
Los paquetes de R suelen depender de muchos otros paquetes, algunos de los cuales podrían no estar
disponibles en la biblioteca de R predeterminada que usa la instancia. A veces, un paquete requiere una versión
de paquete dependiente diferente de la que está instalada. Las dependencias de paquete se indican en un
archivo DESCRIPTION que está insertado en el paquete, pero a veces están incompletas. Puede usar un paquete
denominado iGraph para articular por completo el gráfico de dependencias.
Si necesita instalar varios paquetes o quiere asegurarse de que todos los usuarios de la organización obtengan
la versión y el tipo de paquete correctos, se recomienda usar el paquete miniCRAN para analizar la cadena de
dependencia completa. minicRAN crea un repositorio local que se puede compartir entre varios usuarios o
equipos. Para obtener más información, consulte Crear un repositorio de paquete local mediante miniCRAN.
Orígenes, versiones y formatos de paquetes
Puede obtener paquetes de R de varios orígenes, como CRAN y Bioconductor. En el sitio oficial del lenguaje R
(https://www.r-project.org/) encontrará muchos de estos recursos. Microsoft ofrece MRAN para la distribución
de R de código abierto (MRO) y otros paquetes. Muchos de estos paquetes se publican en GitHub, donde los
desarrolladores pueden obtener el código fuente.
Los paquetes de R se ejecutan en varias plataformas informáticas. Asegúrese de que las versiones que instala
son archivos binarios de Windows.
Los paquetes de R se ejecutan en varias plataformas informáticas. Asegúrese de que las versiones que instala
son archivos binarios de Linux.
Sepa en qué biblioteca está instalando y qué paquetes ya están instalados
Si previamente ha modificado el entorno de R en el equipo, antes de instalar nada, asegúrese de que la variable
de entorno de R .libPath usa una sola ruta de acceso.
Esta ruta de acceso debe apuntar a la carpeta R_SERVICES de la instancia. Para más información, incluida la
forma de determinar qué paquetes ya están instalados, vea Obtención de información de paquetes de R.

Si no está familiarizado con SQL Server


Como desarrollador de R que trabaja con código que se ejecuta en SQL Server, las directivas de seguridad que
protegen el servidor restringen su capacidad para controlar el entorno de R. En las sugerencias siguientes se
describen situaciones habituales y se proporcionan consejos para trabajar en este entorno.
Bibliotecas de usuario de R: no se admiten en SQL Server
Los desarrolladores de R que necesitan instalar nuevos paquetes de R están acostumbrados a instalarlos a su
voluntad, mediante una biblioteca de usuario privada siempre que la biblioteca predeterminada no esté
disponible o cuando el desarrollador no sea un administrador del equipo. Por ejemplo, en un entorno de
desarrollo de R al uso, el usuario tendría que agregar la ubicación del paquete a la variable de entorno de R
libPath , o bien hacer referencia a la ruta de acceso completa del paquete, como aquí:

library("c:/Users/<username>/R/win-library/packagename")

Esto no funciona cuando se ejecutan soluciones de R en SQL Server, ya que los paquetes de R deben instalarse
en una biblioteca específica predeterminada que esté asociada a la instancia. Cuando un paquete no está
disponible en la biblioteca predeterminada, aparece este error al intentar llamar al paquete:
Error in library(xxx): there is no package called 'xxx' (Error en la biblioteca (xxx): no hay ningún paquete llamado
"xxx")
Para obtener información sobre cómo instalar paquetes de R en SQL Server, consulte Instalación de nuevos
paquetes de R en SQL Server Machine Learning Services o SQL Server R Services.
Cómo evitar los errores de tipo "paquete no encontrado"
Si sigue las instrucciones que se indican a continuación, podrá evitar los errores de tipo "paquete no
encontrado".
Elimine las dependencias de las bibliotecas de usuario.
Instalar los paquetes de R necesarios en una biblioteca de usuario personalizada es una práctica de
desarrollo incorrecta. Esto puede provocar errores si otro usuario que no tiene acceso a la ubicación de la
biblioteca ejecuta una solución.
Además, si un paquete está instalado en la biblioteca predeterminada, el tiempo de ejecución de R lo
cargará desde la biblioteca predeterminada, aunque se haya especificado una versión diferente en el
código de R.
Asegúrese de que el código pueda ejecutarse en un entorno compartido.
Evite instalar paquetes como parte de una solución. Si no tiene permisos para instalar paquetes, se
producirá un error en el código. Incluso aunque tenga permisos para instalar paquetes, debe hacerlo por
separado del resto de código que quiera ejecutar.
Comprobar el código para asegurarse de que no hay ninguna llamada a paquetes no instalados.
Actualice el código para quitar las referencias directas a las rutas de acceso de paquetes de R o
bibliotecas de R.
Sepa qué biblioteca de paquetes está asociada a la instancia. Para más información, vea Obtener
información sobre paquetes de R.

Vea también
Instalación de paquetes con herramientas de R
Instalación de nuevos paquetes de R con sqlmlutils
Supervisar la ejecución de scripts de R y Python
mediante informes personalizados en SQL Server
Management Studio
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
Use informes personalizados en SQL Server Management Studio (SSMS) para supervisar la ejecución de scripts
externos (Python y R) y de los recursos usados, diagnosticar problemas y ajustar el rendimiento en SQL Server
Machine Learning Services.
En estos informes, puede ver detalles como:
Sesiones activas de R o Python
Opciones de configuración de la instancia
Estadísticas de ejecución para trabajos de aprendizaje automático
Eventos extendidos para R Services
Lista de paquetes de Python o R instalados en la instancia actual
En este artículo se explica cómo instalar y usar los informes personalizados proporcionados para SQL Server
Machine Learning Services.
Para obtener más información sobre los informes de SQL Server Management Studio, vea Informes
personalizados en Management Studio.

Cómo instalar los informes


Los informes se diseñan mediante SQL Server Reporting Services, pero pueden utilizarse directamente desde
SQL Server Management Studio. No es necesario que Reporting Services esté instalado en la instancia de SQL
Server.
Para usar estos informes, siga estos pasos:
1. Descargue los informes personalizados de SSMS para SQL Server Machine Learning Services desde
GitHub.

NOTE
No se admite el informe personalizado ML Ser vices: configuración de instancia no es compatible con
Azure SQL Managed Instance.

2. Copiar los informes en Management Studio


a. Ubique la carpeta de informes personalizados utilizada por SQL Server Management Studio. De
forma predeterminada, los informes personalizados se almacenan en esta carpeta (donde
user_name es el nombre de usuario de Windows):
C:\Users\user_name\Documents\SQL Server Management Studio\Custom Reports

También puede especificar una carpeta diferente o crear subcarpetas.


b. Copie los archivos *.RDL descargados en la carpeta de informes personalizados.
3. Ejecutar los informes en Management Studio
a. En Management Studio, haga clic en el nodo Bases de datos de la instancia donde quiere
ejecutar los informes.
b. Haga clic en Informes y, después, en Informes personalizados .
c. En el cuadro de diálogo Abrir archivo , ubique la carpeta de informes personalizados.
d. Seleccione uno de los archivos RDL que descargó y, luego, haga clic en Abrir .

Informes
El repositorio de informes personalizados de SSMS en GitHub incluye los siguientes informes:

IN F O RM E DESC RIP C IÓ N

Sesiones activas Usuarios que están conectados actualmente a la instancia de


SQL Server y ejecutan un script de Python o R.

Configuración Configuración de la instalación de Machine Learning Services


y propiedades del tiempo de ejecución de Python o R.

Configurar una instancia Configure Machine Learning Services.

Estadísticas de ejecución Estadísticas de ejecución de Machine Learning Services. Por


ejemplo, puede obtener el número total de ejecuciones de
scripts externos y el número de ejecuciones paralelas.

Eventos extendidos Eventos extendidos que están disponibles para obtener más
información sobre la ejecución de scripts externos.

Paquetes Lista de los paquetes de R o Python instalados en la


instancia de SQL Server y sus propiedades, como la versión y
el nombre.

Resource Usage Vista de la CPU, la memoria, el consumo de E/S de SQL


Server y la ejecución de scripts externos. También puede ver
la configuración de la memoria para grupos de recursos
externos.

Pasos siguientes
Supervisar SQL Server Machine Learning Services mediante vistas de administración dinámica (DMV)
Supervisar scripts de R y Python con eventos extendidos en SQL Server Machine Learning Services
Supervisar SQL Server Machine Learning Services
mediante vistas de administración dinámica (DMV)
14/07/2021 • 10 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
Use las vistas de administración dinámica (DMV) para supervisar la ejecución de scripts externos (Python y R) y
de los recursos usados, diagnosticar problemas y ajustar el rendimiento en SQL Server Machine Learning
Services.
En este artículo, encontrará las DMV específicas de SQL Server Machine Learning Services. También encontrará
consultas de ejemplo que muestran:
Valores y opciones de configuración para el aprendizaje automático
Sesiones activas que ejecutan scripts externos de Python o R
Estadísticas de ejecución del runtime externo para Python y R
Contadores de rendimiento para scripts externos
Uso de memoria para el sistema operativo, SQL Server y los grupos de recursos externos
Configuración de la memoria para SQL Server y los grupos de recursos externos
Grupos de recursos de Resource Governor, que incluyen los grupos de recursos externos
Paquetes instalados para Python y R
Para obtener más información general sobre las DMV, vea Vistas de administración dinámica del sistema.

TIP
También puede usar los informes personalizados para supervisar SQL Server Machine Learning Services. Para más
información, vea Monitor machine learning using custom reports in Management Studio (Supervisar el aprendizaje
automático mediante informes personalizados en Management Studio).

Vistas de administración dinámica


Se pueden usar las siguientes vistas de administración dinámica para supervisar cargas de trabajo de
aprendizaje automático en SQL Server. Para consultar las DMV, necesita tener el permiso VIEW SERVER STATE en
la instancia.

VISTA DE A DM IN IST RA C IÓ N
DIN Á M IC A T IP O DESC RIP C IÓ N

sys.dm_external_script_requests Ejecución Devuelve una fila para cada cuenta de


trabajo activa que ejecuta un script
externo.

sys.dm_external_script_execution_stats Ejecución Devuelve una fila por cada tipo de


solicitud de script externo.
VISTA DE A DM IN IST RA C IÓ N
DIN Á M IC A T IP O DESC RIP C IÓ N

sys.dm_os_performance_counters Ejecución Devuelve una fila por contador de


rendimiento que se mantiene en el
servidor. Si usa la condición de
búsqueda
WHERE object_name LIKE
'%External Scripts%'
, puede usar esta información para ver
cuántos scripts se ejecutaron, cuáles se
ejecutaron mediante un modo de
autenticación concreto o cuántas
llamadas a R o Python se emitieron en
la instancia global.

sys.dm_resource_governor_external_re regulador de recursos Devuelve información acerca del


source_pools estado actual del grupo de recursos
externos de servidor en Resource
Governor, la configuración actual de
los grupos de recursos de servidor y
estadísticas del grupo de recursos de
servidor.

sys.dm_resource_governor_external_re regulador de recursos Devuelve información de afinidad de


source_pool_affinity CPU sobre la configuración actual del
grupo de recursos externos en
Resource Governor. Devuelve una fila
por programador en SQL Server
donde cada programador está
asignado a un determinado
procesador. Use esta vista para
supervisar la condición de un
programador o identificar tareas
descontroladas.

Para obtener información sobre la supervisión de instancias de SQL Server, vea Catalog Views (Vistas de
catálogo) y Resource Governor Related Dynamic Management Views (Vistas de administración dinámica
relacionadas con el regulador de recursos).

Valores y configuración
Vea la configuración de la instalación de Machine Learning Services y las opciones de configuración.

Ejecute la consulta siguiente para obtener este resultado. Para obtener más información sobre las vistas y
funciones usadas, vea sys.dm_server_registry, sys.configurations y SERVERPROPERTY.
SELECT CAST(SERVERPROPERTY('IsAdvancedAnalyticsInstalled') AS INT) AS IsMLServicesInstalled
, CAST(value_in_use AS INT) AS ExternalScriptsEnabled
, COALESCE(SIGN(SUSER_ID(CONCAT (
CAST(SERVERPROPERTY('MachineName') AS NVARCHAR(128))
, '\SQLRUserGroup'
, CAST(serverproperty('InstanceName') AS NVARCHAR(128))
))), 0) AS ImpliedAuthenticationEnabled
, COALESCE((
SELECT CAST(r.value_data AS INT)
FROM sys.dm_server_registry AS r
WHERE r.registry_key LIKE 'HKLM\Software\Microsoft\Microsoft SQL Server\%\SuperSocketNetLib\Tcp'
AND r.value_name = 'Enabled'
), - 1) AS IsTcpEnabled
FROM sys.configurations
WHERE name = 'external scripts enabled';

La consulta devuelve las columnas siguientes:

C O L UM N A DESC RIP C IÓ N

IsMLServicesInstalled Devuelve 1 si se ha instalado SQL Server Machine Learning


Services para la instancia. De lo contrario, devuelve 0.

ExternalScriptsEnabled Devuelve 1 si los scripts externos están habilitados para la


instancia. De lo contrario, devuelve 0.

ImpliedAuthenticationEnabled Devuelve 1 si la autenticación implícita está habilitada. De lo


contrario, devuelve 0. La configuración de la autenticación
implícita se comprueba verificando si existe un inicio de
sesión para SQLRUserGroup.

IsTcpEnabled Devuelve 1 si el protocolo TCP/IP está habilitado para la


instancia. De lo contrario, devuelve 0. Para obtener más
información, vea Configuración predeterminada de protocolo
de red de SQL Server.

Sesiones activas
Vea las sesiones activas que ejecutan scripts externos.

Ejecute la consulta siguiente para obtener este resultado. Para obtener más información sobre las vistas de
administración dinámica utilizadas, vea sys.dm_exec_requests, sys.dm_external_script_requests y
sys.dm_exec_sessions.

SELECT r.session_id, r.blocking_session_id, r.status, DB_NAME(s.database_id) AS database_name


, s.login_name, r.wait_time, r.wait_type, r.last_wait_type, r.total_elapsed_time, r.cpu_time
, r.reads, r.logical_reads, r.writes, er.language, er.degree_of_parallelism, er.external_user_name
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_external_script_requests AS er
ON r.external_script_request_id = er.external_script_request_id
INNER JOIN sys.dm_exec_sessions AS s
ON s.session_id = r.session_id;

La consulta devuelve las columnas siguientes:


C O L UM N A DESC RIP C IÓ N

session_id Identifica la sesión asociada a cada conexión principal activa.

blocking_session_id Id. de la sesión que bloquea la solicitud. Si esta columna es


NULL, la solicitud no está bloqueada o la información de la
sesión de bloqueo no está disponible (o no puede ser
identificada).

status Estado de la solicitud.

database_name Nombre de la base de datos actual para cada sesión.

login_name Nombre de inicio de sesión de SQL Server en el que se está


ejecutando la sesión.

wait_time Si la solicitud está actualmente bloqueada, esta columna


devuelve la duración en milisegundos de la espera actual. No
admite valores NULL.

wait_type Si la solicitud está actualmente bloqueada, esta columna


devuelve el tipo de espera. Para obtener más información
sobre todos los tipos de esperas, vea sys.dm_os_wait_stats.

last_wait_type Si esta solicitud se ha bloqueado anteriormente, esta


columna devuelve el tipo de la última espera.

total_elapsed_time Tiempo total transcurrido en milisegundos desde que llegó la


solicitud.

cpu_time Tiempo de CPU en milisegundos utilizado por la solicitud.

Lecturas Número de lecturas realizadas por esta solicitud.

logical_reads Número de lecturas lógicas realizadas por la solicitud.

Escrituras Número de escrituras realizadas por esta solicitud.

language Palabra clave que representa un lenguaje de script


compatible.

degree_of_parallelism Número que indica el número de procesos paralelos que se


crearon. Este valor podría ser diferente del número de
procesos paralelos que se solicitaron.

external_user_name La cuenta de trabajo de Windows bajo la que se ejecutó el


script.

Estadísticas de ejecución
Consulte las estadísticas de ejecución del runtime externo para R y Python. En la actualidad, solo están
disponibles las estadísticas de las funciones de paquete RevoScaleR, revoscalepy o microsoftml.
Ejecute la consulta siguiente para obtener este resultado. Para obtener más información sobre la vista de
administración dinámica utilizada, vea sys.dm_external_script_execution_stats. La consulta solo devuelve
funciones que se han ejecutado más de una vez.

SELECT language, counter_name, counter_value


FROM sys.dm_external_script_execution_stats
WHERE counter_value > 0
ORDER BY language, counter_name;

La consulta devuelve las columnas siguientes:

C O L UM N A DESC RIP C IÓ N

language Nombre del lenguaje de script externo registrado.

counter_name Nombre de una función de script externo seleccionada.

counter_value Número total de instancias que en que se ha llamado la


función registrada de script externo en el servidor. Este valor
es acumulativo, comienza en el momento en que se instaló
la característica en la instancia y no se puede restablecer.

Contadores de rendimiento
Consulte los contadores de rendimiento relacionados con la ejecución de scripts externos.

Ejecute la consulta siguiente para obtener este resultado. Para obtener más información sobre la vista de
administración dinámica utilizada, vea sys.dm_os_performance_counters.

SELECT counter_name, cntr_value


FROM sys.dm_os_performance_counters
WHERE object_name LIKE '%External Scripts%'

Sys.dm_os_performance_counters genera los siguientes contadores de rendimiento para los scripts


externos:

C O N TA DO R DESC RIP C IÓ N

Ejecuciones totales Número de procesos externos iniciados por llamadas locales


o remotas.
C O N TA DO R DESC RIP C IÓ N

Ejecuciones en paralelo Número de veces que un script ha incluido la especificación


@parallel y que SQL Server ha podido generar y usar un
plan de consulta paralelo.

Ejecuciones de streaming Número de veces que se ha invocado la característica de


streaming.

Ejecuciones CC de SQL Número de scripts externos ejecutados al crear una instancia


de la llamada de forma remota y al usar SQL Server como
contexto de cálculo.

Autenticación implícita. Inicios de sesión Número de veces que se ha realizado una llamada de bucle
invertido ODBC mediante autenticación implícita (es decir, el
SQL Server ha ejecutado la llamada en nombre del usuario
que ha enviado la solicitud de script).

Tiempo total de ejecución (ms) Tiempo transcurrido entre la llamada y la finalización de la


llamada.

Errores de ejecución Número de veces que los scripts informaron de errores. Este
recuento no incluye errores de R o Python.

Uso de la memoria
Vea información sobre la memoria usada por el sistema operativo, SQL Server y los grupos externos.

Ejecute la consulta siguiente para obtener este resultado. Para obtener más información sobre las vistas de
administración dinámica utilizadas, vea sys.dm_resource_governor_external_resource_pools y
sys.dm_os_sys_info.

SELECT physical_memory_kb, committed_kb


, (SELECT SUM(peak_memory_kb)
FROM sys.dm_resource_governor_external_resource_pools AS ep
) AS external_pool_peak_memory_kb
FROM sys.dm_os_sys_info;

La consulta devuelve las columnas siguientes:

C O L UM N A DESC RIP C IÓ N

physical_memory_kb Cantidad total de la memoria física del equipo.

committed_kb Memoria confirmada en kilobytes (KB) en el administrador


de memoria. No incluye la memoria reservada del
administrador de memoria.

external_pool_peak_memory_kb La suma de la cantidad máxima de memoria utilizada, en


kilobytes, para todos los grupos de recursos externos.

Configuración de la memoria
Consulte información sobre la configuración de la memoria máxima en porcentaje de SQL Server y los grupos
de recursos externos. Si SQL Server se está ejecutando con el valor predeterminado de max server memory (MB) ,
se considera un 100 % de la memoria del sistema operativo.

Ejecute la consulta siguiente para obtener este resultado. Para obtener más información sobre las vistas
utilizadas, vea sys.configurations y sys.dm_resource_governor_external_resource_pools.

SELECT 'SQL Server' AS name


, CASE CAST(c.value AS BIGINT)
WHEN 2147483647 THEN 100
ELSE (SELECT CAST(c.value AS BIGINT) / (physical_memory_kb / 1024.0) * 100 FROM sys.dm_os_sys_info)
END AS max_memory_percent
FROM sys.configurations AS c
WHERE c.name LIKE 'max server memory (MB)'
UNION ALL
SELECT CONCAT ('External Pool - ', ep.name) AS pool_name, ep.max_memory_percent
FROM sys.dm_resource_governor_external_resource_pools AS ep;

La consulta devuelve las columnas siguientes:

C O L UM N A DESC RIP C IÓ N

name Nombre del grupo de recursos externos o SQL Server.

max_memory_percent Memoria máxima que puede usar SQL Server o el grupo de


recursos externos.

Grupos de recursos
En Resource Governor de SQL Server, un grupo de recursos representa un subconjunto de los recursos físicos
de una instancia. Puede especificar los límites en la cantidad de CPU, E/S física y memoria que las solicitudes de
aplicaciones entrantes, incluida la ejecución de scripts externos, pueden usar en el conjunto de recursos. Vea los
grupos de recursos usados para SQL Server y los scripts externos.

Ejecute la consulta siguiente para obtener este resultado. Para obtener más información sobre las vistas de
administración dinámica utilizadas, vea sys.dm_resource_governor_resource_pools y
sys.dm_resource_governor_external_resource_pools.

SELECT CONCAT ('SQL Server - ', p.name) AS pool_name


, p.total_cpu_usage_ms, p.read_io_completed_total, p.write_io_completed_total
FROM sys.dm_resource_governor_resource_pools AS p
UNION ALL
SELECT CONCAT ('External Pool - ', ep.name) AS pool_name
, ep.total_cpu_user_ms, ep.read_io_count, ep.write_io_count
FROM sys.dm_resource_governor_external_resource_pools AS ep;

La consulta devuelve las columnas siguientes:


C O L UM N A DESC RIP C IÓ N

pool_name Nombre del grupo de recursos de servidor. Los grupos de


recursos de SQL Server llevan el prefijo SQL Server ,
mientras que los grupos de recursos externos llevan el
prefijo External Pool .

total_cpu_usage_hours Uso acumulado de la CPU en milisegundos desde que se


restablecieron las estadísticas del regulador de recursos.

read_io_completed_total Total de operaciones de E/S de lectura completadas desde


que se restablecieron las estadísticas del regulador de
recursos.

write_io_completed_total Total de operaciones de E/S de escritura completadas desde


que se restablecieron las estadísticas del regulador de
recursos.

Paquetes instalados
Puede ver los paquetes de R y Python instalados en SQL Server Machine Learning Services ejecutando un script
de R o Python que los genere.
Paquetes de R instalados
Vea los paquetes de R instalados en SQL Server Machine Learning Services.

Ejecute la consulta siguiente para obtener este resultado. En la consulta usa un script de R para determinar los
paquetes de R instalados con SQL Server.

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

Las columnas que se devuelven son:

C O L UM N A DESC RIP C IÓ N

Paquete Nombre del paquete instalado.

Versión Versión del paquete.

Depende Enumera los paquetes de los que depende el paquete


instalado.
C O L UM N A DESC RIP C IÓ N

Licencia Licencia del paquete instalado.

LibPath Directorio en el que se puede encontrar el paquete.

Paquetes instalados para Python


Vea los paquetes de Python instalados en SQL Server Machine Learning Services.

Ejecute la consulta siguiente para obtener este resultado. En la consulta usa un script de Python para determinar
los paquetes de Python instalados con SQL Server.

EXECUTE sp_execute_external_script @language = N'Python'


, @script = N'
import pkg_resources
import pandas
OutputDataSet = pandas.DataFrame(sorted([(i.key, i.version, i.location) for i in
pkg_resources.working_set]))'
WITH result sets((Package NVARCHAR(128), Version NVARCHAR(128), Location NVARCHAR(1000)));

Las columnas que se devuelven son:

C O L UM N A DESC RIP C IÓ N

Paquete Nombre del paquete instalado.

Versión Versión del paquete.

Location Directorio en el que se puede encontrar el paquete.

Pasos siguientes
Eventos ampliados de aprendizaje automático
Vistas de administración dinámica relacionadas con Resource Governor
Vistas de administración dinámica del sistema
Supervisar Machine Learning con informes personalizados en Management Studio
Supervisar scripts de Python o R con eventos
extendidos en SQL Server Machine Learning
Services
14/07/2021 • 7 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
Obtenga información sobre cómo usar eventos extendidos para supervisar y solucionar problemas de
operaciones relacionadas con los scripts externos de trabajos de Python o R, SQL Server Machine Learning
Services y SQL Server Launchpad.

Eventos extendidos para SQL Server Machine Learning Services


Para ver una lista de los eventos relacionados con SQL Server Machine Learning Services, ejecute la siguiente
consulta desde Azure Data Studio o SQL Server Management Studio.

SELECT o.name AS event_name, o.description


FROM sys.dm_xe_objects o
JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
WHERE o.object_type = 'event'
AND p.name = 'SQLSatellite';

Para obtener más información sobre cómo usar eventos extendidos, vea Herramientas de eventos extendidos.

Eventos adicionales específicos de Machine Learning Services


Hay eventos extendidos adicionales disponibles para los componentes que están relacionados y que se usan en
SQL Server Machine Learning Services, como SQL Server Launchpad y BXLServer, y el proceso satélite que
inicia el entorno de ejecución de R o Python. Estos eventos extendidos adicionales se desencadenan desde los
procesos externos; por lo tanto, se deben capturar con una utilidad externa.
Para obtener más información sobre cómo hacerlo, vea la sección Recopilar eventos de procesos externos.

Tabla de eventos extendidos


EVEN TO DESC RIP C IÓ N N OTA S

connection_accept Se produce cuando se acepta una


conexión nueva. Este evento sirve para
registrar todos los intentos de
conexión.

failed_launching Error de inicio. Indica un error.

satellite_abort_connection Anula el registro de conexión.


EVEN TO DESC RIP C IÓ N N OTA S

satellite_abort_received Se activa cuando se recibe un mensaje


de anulación por una conexión
subsidiaria.

satellite_abort_sent Se activa cuando se envía un mensaje


de anulación a través de una conexión
subsidiaria.

satellite_authentication_completion Se activa cuando se completa la


autenticación para una conexión a
través de TCP o una canalización con
nombre.

satellite_authorization_completion Se activa cuando se completa la


autorización para una conexión a
través de TCP o una canalización con
nombre.

satellite_cleanup Se activa cuando la instancia Se activa solo desde procesos externos.


subsidiaria llama a la instrucción de Consulte las instrucciones sobre la
limpieza. colección de eventos desde procesos
externos.

satellite_data_chunk_sent Se activa cuando la conexión El evento notifica el número de filas


subsidiaria termina de enviar un único enviadas, el número de columnas, el
fragmento de datos. número de paquetes SNI usados y el
tiempo transcurrido en milisegundos al
enviar el fragmento. La información
puede ayudarle a comprender cuánto
tiempo se dedicó a pasar distintos
tipos de datos, y cuántos paquetes se
usaron.

satellite_data_receive_completion Se activa cuando se reciben todos los Se activa solo desde procesos externos.
datos que necesita una consulta a Consulte las instrucciones sobre la
través de una conexión subsidiaria. colección de eventos desde procesos
externos.

satellite_data_send_completion Se activa cuando se envían todos los


datos necesarios para una sesión a
través de la conexión subsidiaria.

satellite_data_send_start Se desencadena cuando se inicia la La transmisión de datos se inicia justo


transmisión de datos. antes de enviarse el primer fragmento
de datos.

satellite_error Se utiliza para realizar un seguimiento


de un error en una instancia
subsidiaria de SQL.

satellite_invalid_sized_message El tamaño del mensaje no es válido.

satellite_message_coalesced Se utiliza para realizar un seguimiento


de la fusión de mensajes en la capa de
red.
EVEN TO DESC RIP C IÓ N N OTA S

satellite_message_ring_buffer_record Registro de búfer en anillo del mensaje.

satellite_message_summary Información de resumen sobre la


mensajería.

satellite_message_version_mismatch El campo de la versión del mensaje no


coincide.

satellite_messaging Se usa para realizar un seguimiento de


eventos de mensajería (vincular,
desvincular, etc.).

satellite_partial_message Se utiliza para realizar un seguimiento


de los mensajes parciales en la capa de
red.

satellite_schema_received Se activa cuando SQL recibe y lee un


mensaje de esquema.

satellite_schema_sent Se activa cuando se envía un mensaje Se activa solo desde procesos externos.
de esquema a través de la conexión Consulte las instrucciones sobre la
subsidiaria. colección de eventos desde procesos
externos.

satellite_service_start_posted Se activa cuando se publica en Así se indica a Launchpad que inicie el


Launchpad un mensaje de inicio de proceso externo y contiene un id. para
servicio. la nueva sesión.

satellite_unexpected_message_received Se activa cuando se recibe un mensaje Indica un error.


inesperado.

stack_trace Se produce cuando se solicita un Indica un error.


volcado de memoria del proceso.

trace_event Se utiliza para realizar el seguimiento. Estos eventos pueden contener


mensajes de seguimiento de procesos
externos, de Launchpad y de SQL
Server. Se incluyen las salidas a stdout
y stderr de R.

launchpad_launch_start Se activa cuando Launchpad empieza a Solo se activa desde Launchpad.


iniciar una instancia subsidiaria. Consulte las instrucciones sobre la
recopilación de eventos desde
launchpad.exe.

launchpad_resume_sent Se activa cuando Launchpad ha Solo se activa desde Launchpad.


iniciado la instancia subsidiaria y Consulte las instrucciones sobre la
enviado un mensaje de reanudación a recopilación de eventos desde
SQL Server. launchpad.exe.

satellite_data_chunk_sent Se activa cuando la conexión Contiene información sobre el número


subsidiaria termina de enviar un único de columnas, de filas y de paquetes, así
fragmento de datos. como del tiempo necesitado para
enviar el fragmento.
EVEN TO DESC RIP C IÓ N N OTA S

satellite_sessionId_mismatch No se esperaba el identificador de


sesión del mensaje

Recopilación de eventos de procesos externos


SQL Server Machine Learning Services inicia algunos servicios que se ejecutan fuera del proceso de SQL Server.
Para capturar los eventos relacionados con estos procesos externos, debe crear un archivo de configuración de
seguimiento de ingresos y colocarlo en el mismo directorio que el ejecutable del proceso.

IMPORTANT
A partir de SQL Server 2019, el mecanismo de aislamiento ha cambiado. Por lo tanto, debe conceder los permisos
adecuados al directorio donde se almacena el archivo de configuración de seguimiento de eventos. 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.

SQL Ser ver Launchpad


Para capturar los eventos relacionados con Launchpad, coloque el archivo .xml en el directorio Binn de la
instancia de SQL Server. En una instalación predeterminada, este sería:
C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\MSSQL\Binn .
BXLSer ver es el proceso satélite que admite la extensibilidad de SQL con lenguajes de script externos,
como R o Python. Se inicia una instancia independiente de BxlServer para cada instancia de lenguaje
externo.
Para capturar los eventos relacionados con BXLServer, coloque el archivo .xml en el directorio de
instalación de R o Python. En una instalación predeterminada, este sería:
R:
C:\Program Files\Microsoft SQL
Server\MSSQL_version_number.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64
.
Python:
C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\PYTHON_SERVICES\Lib\site-
packages\revoscalepy\rxLibs
.
El archivo de configuración se debe llamar igual que el ejecutable, con el formato "[nombre].xevents.xml". Dicho
de otro modo, los archivos deben tener el siguiente nombre:
Launchpad.xevents.xml
bxlserver.xevents.xml

El propio archivo de configuración presenta el siguiente formato:


<?xml version="1.0" encoding="utf-8"?>
<event_sessions>
<event_session name="[session name]" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">
<description owner="you">Xevent for launchpad or bxl server.</description>
<event package="SQLSatellite" name="[XEvent Name 1]" />
<event package="SQLSatellite" name="[XEvent Name 2]" />
<target package="package0" name="event_file">
<parameter name="filename" value="[SessionName].xel" />
<parameter name="max_file_size" value="10" />
<parameter name="max_rollover_files" value="10" />
</target>
</event_session>
</event_sessions>

Para configurar el seguimiento, edite el marcador de posición nombre sesión, el marcador de posición del
nombre de archivo ( [SessionName].xel ) y los nombres de los eventos que quiere capturar (por ejemplo,
[XEvent Name 1] , [XEvent Name 1] ).
Es posible que aparezca cualquier número de etiquetas de paquete de eventos y se recopilarán siempre que
el atributo de nombre sea correcto.
Ejemplo: Capturar eventos de Launchpad
En el siguiente ejemplo se muestra la definición de un seguimiento de eventos para el servicio Launchpad:

<?xml version="1.0" encoding="utf-8"?>


<event_sessions>
<event_session name="sqlsatelliteut" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">
<description owner="hay">Xevent for sql tdd runner.</description>
<event package="SQLSatellite" name="launchpad_launch_start" />
<event package="SQLSatellite" name="launchpad_resume_sent" />
<target package="package0" name="event_file">
<parameter name="filename" value="launchpad_session.xel" />
<parameter name="max_file_size" value="10" />
<parameter name="max_rollover_files" value="10" />
</target>
</event_session>
</event_sessions>

Coloque el archivo .xml en el directorio Binn de la instancia de SQL Server.


Este archivo debe tener el nombre Launchpad.xevents.xml .
Ejemplo: Capturar eventos de BXLServer
En el siguiente ejemplo se muestra la definición de un seguimiento de eventos para el ejecutable BXLServer.
<?xml version="1.0" encoding="utf-8"?>
<event_sessions>
<event_session name="sqlsatelliteut" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">
<description owner="hay">Xevent for sql tdd runner.</description>
<event package="SQLSatellite" name="satellite_abort_received" />
<event package="SQLSatellite" name="satellite_authentication_completion" />
<event package="SQLSatellite" name="satellite_cleanup" />
<event package="SQLSatellite" name="satellite_data_receive_completion" />
<event package="SQLSatellite" name="satellite_data_send_completion" />
<event package="SQLSatellite" name="satellite_data_send_start" />
<event package="SQLSatellite" name="satellite_schema_sent" />
<event package="SQLSatellite" name="satellite_unexpected_message_received" />
<event package="SQLSatellite" name="satellite_data_chunk_sent" />
<target package="package0" name="event_file">
<parameter name="filename" value="satellite_session.xel" />
<parameter name="max_file_size" value="10" />
<parameter name="max_rollover_files" value="10" />
</target>
</event_session>
</event_sessions>

Coloque el archivo .xml en el mismo directorio que el ejecutable BXLServer.


Este archivo debe tener el nombre bxlserver.xevents.xml .

Pasos siguientes
Supervisar la ejecución de scripts de Python y R mediante informes personalizados en SQL Server
Management Studio
Supervisar SQL Server Machine Learning Services mediante vistas de administración dinámica (DMV)
Supervisar instrucciones de T-SQL PREDICT con
eventos extendidos en SQL Server Machine
Learning Services
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores de Instancia administrada de Azure SQL
Obtenga información sobre cómo usar eventos extendidos para supervisar y solucionar problemas de
instrucciones de T-SQL PREDICT en SQL Server Machine Learning Services.

Tabla de eventos extendidos


Los siguientes eventos extendidos están disponibles en todas las versiones de SQL Server que admiten
instrucciones de T-SQL PREDICT.

NAME O B JEC T _T Y P E DESC RIP T IO N

predict_function_completed event Detalles del tiempo de ejecución


integrado

predict_model_cache_hit event Se produce cuando se recupera un


modelo de la caché del modelo de la
función PREDICT. El uso de este evento
junto con otros eventos
predict_model_cache_* permite
solucionar problemas causados por la
caché del modelo de la función
PREDICT.

predict_model_cache_insert event Se produce cuando se inserta un


modelo en la caché del modelo de la
función PREDICT. El uso de este evento
junto con otros eventos
predict_model_cache_* permite
solucionar problemas causados por la
caché del modelo de la función
PREDICT.

predict_model_cache_miss event Se produce cuando no se encuentra un


modelo en la caché del modelo de la
función PREDICT. Las apariciones
frecuentes de este evento podrían
indicar que SQL Server necesita más
memoria. El uso de este evento junto
con otros eventos
predict_model_cache_* permite
solucionar problemas causados por la
caché del modelo de la función
PREDICT.
NAME O B JEC T _T Y P E DESC RIP T IO N

predict_model_cache_remove event Se produce cuando se quita un modelo


de la caché del modelo para la función
PREDICT. El uso de este evento junto
con otros eventos
predict_model_cache_* permite
solucionar problemas causados por la
caché del modelo de la función
PREDICT.

Consultar eventos relacionados


Para ver una lista de todas las columnas devueltas para estos eventos, ejecute la siguiente consulta en SQL
Server Management Studio:

SELECT *
FROM sys.dm_xe_object_columns
WHERE object_name LIKE 'predict%'

Ejemplos
Para capturar información sobre el rendimiento de una sesión de puntuación mediante PREDICT:
1. Cree una nueva sesión de eventos extendidos con Management Studio u otra herramienta compatible.
2. Agregue los eventos predict_function_completed y predict_model_cache_hit a la sesión.
3. Inicie la sesión de eventos extendidos.
4. Ejecute la consulta que usa PREDICT.
En los resultados, revise estas columnas:
El valor de predict_function_completed muestra la cantidad de tiempo que la consulta dedicó a cargar el
modelo y la puntuación.
El valor booleano de predict_model_cache_hit indica si la consulta usó o no un modelo almacenado en
caché.
Caché del modelo de puntuación nativo
Además de los eventos específicos de la predicción (PREDICT), puede utilizar las siguientes consultas para
obtener más información sobre el uso de la caché y el modelo en caché:
Ver la caché del modelo de puntuación nativo:

SELECT *
FROM sys.dm_os_memory_clerks
WHERE type = 'CACHESTORE_NATIVESCORING';

Ver los objetos en la caché del modelo:

SELECT *
FROM sys.dm_os_memory_objects
WHERE TYPE = 'MEMOBJ_NATIVESCORING';

Pasos siguientes
Para obtener más información acerca de los eventos extendidos (a veces denominados XEvents) y cómo realizar
un seguimiento de los eventos de una sesión, vea estos artículos:
Supervisar scripts de R y Python con eventos extendidos en SQL Server Machine Learning Services
Conceptos y arquitectura de eventos extendidos
Configuración de la captura de eventos en SSMS
Administrar sesiones de eventos en el Explorador de objetos
Escalar la ejecución simultánea de scripts externos
en SQL Server Machine Learning Services
14/07/2021 • 4 minutes to read

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


Obtenga información sobre las cuentas de trabajo para SQL Server Machine Learning Services y el
procedimiento para cambiar la configuración predeterminada para escalar el número de ejecuciones
simultáneas de scripts externos.
Como parte del proceso de instalación de Machine Learning Services, se crea un nuevo grupo de cuentas de
usuario de Windows para admitir la ejecución de tareas mediante el servicio SQL Server Launchpad. El
propósito de estas cuentas de trabajo es aislar la ejecución simultánea de scripts externos por parte de
diferentes usuarios de SQL Server.

NOTE
En SQL Server 2019, SQLRUserGroup solo tiene un miembro que ahora es la única cuenta de servicio de SQL Server
Launchpad, en lugar de varias cuentas de trabajo. En este artículo se describen las cuentas de trabajo para SQL Server
2016 y 2017.

Grupo de cuentas de trabajo


La configuración de SQL Server crea un grupo de cuentas de Windows para cada instancia en la que el
aprendizaje automático está instalado y habilitado.
En una instancia predeterminada, el nombre del grupo es SQLRUserGroup . El nombre es el mismo si se
usa Python, R o ambos.
En una instancia con nombre, el nombre del grupo predeterminado tiene como sufijo el nombre de instancia,
por ejemplo, SQLRUserGroupMyInstanceName .
De forma predeterminada, el grupo de cuentas de usuario contiene 20 cuentas de usuario. En la mayoría de los
casos, 20 es una cantidad más que suficiente para admitir tareas de aprendizaje automático, pero puede
cambiar el número de cuentas. El número máximo de cuentas es 100.
En una instancia predeterminada, las cuentas individuales se denominan de MSSQLSERVER01 a
MSSQLSERVER20 .
En el caso de una instancia con nombre, las cuentas individuales reciben el nombre de la instancia, por
ejemplo, de MyInstanceName01 a MyInstanceName20 .
Si más de una instancia usa el aprendizaje automático, el equipo tendrá varios grupos de usuarios. No se puede
compartir un grupo entre instancias.

Número de cuentas de trabajo


Para modificar el número de usuarios del grupo de cuentas, debe modificar las propiedades del servicio SQL
Server Launchpad tal y como se describe a continuación.
Las contraseñas asociadas con cada cuenta de usuario se generan aleatoriamente, pero puede cambiarlas más
adelante, una vez que se hayan creado las cuentas.
1. Abra el Administrador de configuración de SQL Server y seleccione Ser vicios de SQL Ser ver .
2. Haga doble clic en el servicio SQL Server Launchpad y detenga el servicio si se está ejecutando.
3. En la pestaña Ser vicio , asegúrese de que el modo de inicio esté establecido en Automático. No se pueden
iniciar scripts externos cuando Launchpad no se está ejecutando.
4. Haga clic en la pestaña Avanzado y modifique el valor de Recuento de usuarios externos si es necesario.
Esta configuración controla el número de usuarios de SQL diferentes que pueden ejecutar sesiones de script
externas simultáneamente. El valor predeterminado es 20 cuentas. El número máximo de usuarios es 100.
5. Opcionalmente, puede establecer la opción Restablecer contraseña de usuarios externos en Sí si su
organización tiene una directiva que requiere cambiar las contraseñas periódicamente. De este modo, se
regeneran las contraseñas cifradas que Launchpad mantiene para las cuentas de usuario. Para obtener más
información, vea Aplicar una directiva de contraseñas.
6. Vuelva a reiniciar el servicio Launchpad.

Administración de cargas de trabajo


El número de cuentas de este grupo determina el número de sesiones de script externo que pueden estar
activas simultáneamente. De forma predeterminada, se crean 20 cuentas, lo que significa que 20 usuarios
diferentes pueden tener sesiones de Python o R activas al mismo tiempo. Puede aumentar el número de cuentas
de trabajo si espera ejecutar más de 20 scripts de forma simultánea.
Cuando un mismo usuario ejecute simultáneamente varios scripts externos, todas las sesiones ejecutadas por
dicho usuario usarán la misma cuenta de trabajo. Por ejemplo, un mismo usuario podría tener 100 scripts de
Python o R diferentes en ejecución al mismo tiempo, siempre y cuando los recursos lo permitan, pero todos los
scripts se ejecutarán con una sola cuenta de trabajo.
El número de cuentas de trabajo que se pueden admitir y el número de sesiones simultáneas que puede
ejecutar un mismo usuario está limitado exclusivamente por los recursos del servidor. Normalmente, la
memoria es el primer cuello de botella que surge al usar el tiempo de ejecución de Python o R.
SQL Server regula los recursos que pueden usar los scripts de Python o R. Se recomienda supervisar el uso de
recursos mediante DMV de SQL Server, o bien examinar los contadores de rendimiento del objeto de trabajo de
Windows asociado y ajustar en consecuencia el uso de memoria del servidor. Si tiene SQL Server Enterprise
Edition, puede asignar los recursos usados para ejecutar scripts externos mediante la configuración de un grupo
de recursos externos.

Pasos siguientes
Supervisar la ejecución de scripts de Python y R mediante informes personalizados en SQL Server
Management Studio
Supervisar SQL Server Machine Learning Services mediante vistas de administración dinámica (DMV)
Administración de cargas de trabajo de Python y R
con Resource Governor en
SQL Server Machine Learning Services
14/07/2021 • 2 minutes to read

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


Obtenga información sobre cómo usar Resource Governor para administrar la asignación de recursos de CPU,
E/S físicas y memoria para cargas de trabajo de Python y R en SQL Server Machine Learning Services.
Los algoritmos de aprendizaje automático en Python y R usan una gran cantidad de recursos de proceso. Según
sus prioridades de cargas de trabajo, puede que necesite incrementar o reducir los recursos disponibles para
Machine Learning Services.
Para obtener información general, vea Resource Governor.

NOTE
Resource Governor es una característica de Enterprise Edition.

Asignaciones predeterminadas
De forma predeterminada, los tiempos de ejecución de scripts externos para aprendizaje automático están
limitados a un máximo del 20 % del total de memoria de la máquina. Aunque depende del sistema, este límite
suele ser inadecuado para tareas de aprendizaje automático importantes, como entrenar un modelo o realizar
una predicción en varias filas de datos.

Administración de recursos con Resource Governor


De forma predeterminada, los procesos externos usan hasta un 20 % del total de memoria del host en el
servidor local. Puede modificar el grupo de recursos predeterminado para realizar cambios en todo el servidor,
de forma que los procesos de R y Python usen la capacidad que configure como disponible para procesos
externos.
Como opción, puede crear grupos de recursos externos personalizados, con clasificadores y grupos de
cargas de trabajo asociados, para determinar la asignación de recursos de las solicitudes originadas desde
programas o hosts específicos, o bien otros criterios que proporcione. Un grupo de recursos externos es un tipo
de grupo de recursos introducido en SQL Server 2016 (13.x) para facilitar la administración de procesos de R y
Python externos al motor de base de datos.
1. Habilite la gobernanza de recursos (está desactivada de forma predeterminada).
2. Ejecute CREATE EXTERNAL RESOURCE POOL para crear y configurar el grupo de recursos, seguido de
ALTER RESOURCE GOVERNOR para implementarlo.
3. Cree un grupo de cargas de trabajo para asignaciones granulares (por ejemplo, entre entrenamiento y
puntuación).
4. Cree un clasificador para interceptar las llamadas de procesos externos.
5. Ejecute consultas y procedimientos con los objetos que ha creado.
Para ver un tutorial, consulte Crear un grupo de recursos para SQL Server Machine Learning Services para
obtener instrucciones paso a paso.
Para obtener información general sobre la terminología y los conceptos generales, vea Grupo de recursos de
Resource Governor.

Procesos en gobernanza de recursos


Puede usar un grupo de recursos externos para administrar los recursos usados por los siguientes ejecutables
en una instancia del motor de la base de datos:
Rterm.exe, cuando se llama localmente desde SQL Server o de forma remota con SQL Server como el
contexto de procesos remotos.
Python.exe, cuando se llama localmente desde SQL Server o de forma remota con SQL Server como el
contexto de procesos remotos.
BxlServer.exe y procesos satélite
Procesos satélites iniciados por Launchpad, como PythonLauncher.dll

NOTE
Aun así, no se admite la administración directa del servicio Launchpad mediante Resource Governor. Launchpad es un
servicio de confianza que solo puede hospedar iniciadores proporcionados por Microsoft. Los iniciadores de confianza se
configuran de manera explícita para evitar un uso excesivo de recursos.

Pasos siguientes
Creación de grupos de recursos para el aprendizaje automático
Grupos de recursos de Resource Governor
Crear un grupo de recursos para SQL Server
Machine Learning Services
14/07/2021 • 5 minutes to read

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


Obtenga información sobre cómo crear y usar un grupo de recursos para administrar cargas de trabajo de
Python o R en SQL Server Machine Learning Services.
El proceso incluye varios pasos:
1. Estado de revisión de cualquiera de los grupos de recursos existente. Es importante que comprenda qué
servicios están usando los recursos existentes.
2. Modificar grupos de recursos de servidor.
3. Crear un nuevo grupo de recursos para los procesos externos.
4. Cree una función de clasificación para identificar las solicitudes de script externas.
5. Compruebe que el nuevo grupo de recursos externos está capturando trabajos de Python o R de las cuentas
o los clientes especificados.

Estado de revisión de los grupos de recursos existentes


1. Use una instrucción como la siguiente para comprobar los recursos asignados al grupo predeterminado
para el servidor.

SELECT * FROM sys.resource_governor_resource_pools WHERE name = 'default'

Ejemplo de resultados

M IN _C P M A X_C P M IN _M E M A X_M E C A P _C P M IN _IO P M A X_IO


{ 1} P O O L U_P ERC E U_P ERC E M O RY _P M O RY _P U_P ERC E S_P ER_V P S_P ER_
_ID{ 2} NAME NT NT ERC EN T ERC EN T NT O L UM E VO L UM E

2 default 0 100 0 100 100 0 0

2. Compruebe los recursos asignados al grupo de recursos externos predeterminado.

SELECT * FROM sys.resource_governor_external_resource_pools WHERE name = 'default'

Ejemplo de resultados

EXT ERN A L _P O M A X_C P U_P ER M A X_M EM O RY _ M A X_P RO C ESSE


O L _ID NAME C EN T P ERC EN T S VERSIO N

2 default 100 20 0 2

3. Con estos valores predeterminados de servidor, es probable que el tiempo de ejecución externo no tenga
recursos suficientes para completar la mayoría de las tareas. Para mejorar los recursos, se debe modificar
el uso de recursos de servidor de la siguiente manera:
Reducir la memoria máxima del equipo que puede usar el motor de base de datos.
Aumentar la memoria máxima del equipo que puede usar el proceso externo.

Modificar el uso de recursos de servidor


1. En Management Studio, ejecute la siguiente instrucción para limitar el uso de memoria de SQL Server al
60 % del valor de la opción "max server memory".

ALTER RESOURCE POOL "default" WITH (max_memory_percent = 60);

2. Ejecute la instrucción siguiente para limitar el uso de memoria de los procesos externos al 40 % de los
recursos totales del equipo.

ALTER EXTERNAL RESOURCE POOL "default" WITH (max_memory_percent = 40);

3. Para aplicar estos cambios, debe volver a configurar y reiniciar Resource Governor de esta forma:

ALTER RESOURCE GOVERNOR RECONFIGURE;

NOTE
Estas son solo opciones iniciales sugeridas. Debe evaluar las tareas de aprendizaje automático en función de otros
procesos del servidor para determinar el equilibrio correcto para el entorno y la carga de trabajo.

Crear un grupo de recursos externos definido por el usuario


1. Todos los cambios en la configuración de Resource Governor se aplican a través del servidor como un
todo. Los cambios afectan a las cargas de trabajo que usan los conjuntos predeterminados para el
servidor, así como a las cargas de trabajo que usan los grupos externos.
Para proporcionar un mayor control sobre qué cargas de trabajo deben tener prioridad, puede crear un
nuevo grupo de recursos externos definido por el usuario. Defina una función de clasificación y asígnela
al grupo de recursos externos. La palabra clave EXTERNAL es nueva.
Cree un nuevo grupo de recursos externos definido por el usuario. En el ejemplo siguiente, el grupo se
denomina ds_ep .

CREATE EXTERNAL RESOURCE POOL ds_ep WITH (max_memory_percent = 40);

2. Cree un grupo de cargas de trabajo denominado ds_wg para usar en la administración de solicitudes de
sesión. Para las consultas SQL, usará el grupo predeterminado. Para las consultas de procesos externos
usará el grupo ds_ep .

CREATE WORKLOAD GROUP ds_wg WITH (importance = medium) USING "default", EXTERNAL "ds_ep";

Las solicitudes se asignan al grupo predeterminado siempre que no se puede clasificar la solicitud, o si
hay otros errores de clasificación.
Para más información, vea Resource Governor Workload Group (Grupo de cargas de trabajo de Resource
Governor) y CREATE WORKLOAD GROUP (Transact-SQL).
Crear una función de clasificación para el aprendizaje automático
Una función de clasificación examina las tareas entrantes. Determina si la tarea se puede ejecutar con el grupo
de recursos actual. Las tareas que no cumplen los criterios de la función de clasificación se vuelven a asignar al
grupo de recursos predeterminado del servidor.
1. Empiece por especificar una función clasificadora que Resource Governor debe usar para determinar los
grupos de recursos. Puede asignar un valor null como marcador de posición para la función
clasificadora.

ALTER RESOURCE GOVERNOR WITH (classifier_function = NULL);


ALTER RESOURCE GOVERNOR RECONFIGURE;

Para obtener más información, vea ALTER RESOURCE GOVERNOR (Transact-SQL).


2. En la función clasificadora para cada grupo de recursos, defina el tipo de instrucciones o las solicitudes
entrantes que se deben asignar al grupo de recursos.
Por ejemplo, la siguiente función devuelve el nombre del esquema asignado al grupo de recursos
externos definido por el usuario si la aplicación que envió la solicitud es "Microsoft R Host", "RStudio" o
"Mashup". De lo contrario, devuelve el grupo de recursos predeterminado.

USE master
GO
CREATE FUNCTION is_ds_apps()
RETURNS sysname
WITH schemabinding
AS
BEGIN
IF program_name() in ('Microsoft R Host', 'RStudio', 'Mashup') RETURN 'ds_wg';
RETURN 'default'
END;
GO

3. Cuando se haya creado la función, vuelva a configurar el grupo de recursos para asignar la nueva función
clasificadora al grupo de recursos externos que definió anteriormente.

ALTER RESOURCE GOVERNOR WITH (classifier_function = dbo.is_ds_apps);


ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

Comprobar los nuevos grupos de recursos y la afinidad


Compruebe la configuración de memoria del servidor y la CPU para cada uno de los grupos de cargas de
trabajo. Compruebe que se han realizado los cambios en los recursos de instancia revisando lo siguiente:
el grupo predeterminado para el servidor SQL Server
el grupo de recursos predeterminado para procesos externos
el grupo definido por el usuario para procesos externos
1. Ejecute la siguiente instrucción para ver todos los grupos de cargas de trabajo:

SELECT * FROM sys.resource_governor_workload_groups;

Ejemplo de resultados
REQ UE
ST _M A REQ UE GRO UP
X_M EM REQ UE ST _M E _M A X_
O RY _G ST _M A M O RY _ REQ UES
RA N T _ X_C P U_ GRA N T TS EXT ERN
GRO UP IM P O R P ERC E T IM E_S _T IM EO M A X_D P O O L _I P O O L _I A L _P O
_ID NAME TA N C E NT EC UT _SEC OP D DD O L _ID

1 internal Media 25 0 0 0 0 1 2

2 default Media 25 0 0 0 0 2 2

256 ds_wg Media 25 0 0 0 0 2 256

2. Use la nueva vista de catálogo, sys.resource_governor_external_resource_pools (Transact-SQL), para ver


todos los grupos de recursos externos.

SELECT * FROM sys.resource_governor_external_resource_pools;

Ejemplo de resultados

EXT ERN A L _P O M A X_C P U_P ER M A X_M EM O RY _ M A X_P RO C ESSE


O L _ID NAME C EN T P ERC EN T S VERSIO N

2 default 100 20 0 2

256 ds_ep 100 40 0 1

Para más información, vea Resource Governor Catalog Views (Transact-SQL) (Vistas de catálogo de
Resource Governor (Transact-SQL)).
3. Ejecute la instrucción siguiente para devolver información sobre los recursos del equipo que tienen
afinidad con el grupo de recursos externo, si procede:

SELECT * FROM sys.resource_governor_external_resource_pool_affinity;

No se mostrará ninguna información porque los grupos se crearon con la afinidad AUTO. Para más
información, vea sys.dm_resource_governor_resource_pool_affinity (Transact-SQL).

Pasos siguientes
Para obtener más información acerca de la administración de recursos del servidor, vea:
Regulador de recursos
Vistas de administración dinámica relacionadas con Resource Governor (Transact-SQL)
Para obtener información general sobre la regulación de recursos para el aprendizaje automático, vea:
Administración de cargas de trabajo de Python y R con Resource Governor en
SQL Server Machine Learning Services
Concesión de permisos de usuario de base de datos
para ejecutar scripts de Python y R con SQL Server
Machine Learning Services
14/07/2021 • 2 minutes to read

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Instancia administrada de Azure SQL
Obtenga información sobre cómo puede conceder a un usuario de base de datos permiso para ejecutar scripts
de Python y R externos en SQL Server Machine Learning Services y proporcionar permisos de lectura, escritura
o lenguaje de definición de datos (DDL) a las bases de datos.
Para obtener más información, vea la sección permisos de Seguridad para el marco de extensibilidad.

Permiso para ejecutar scripts


Para cada usuario que ejecuta scripts de R o Python con SQL Server Machine Learning Services y que no sea
administrador, debe concederle el permiso para ejecutar scripts externos en cada base de datos en la que se usa
el lenguaje.
Para conceder permiso a un usuario de base de datos para la ejecución de un script externo, ejecute el siguiente
script:

USE <database_name>
GO
GRANT EXECUTE ANY EXTERNAL SCRIPT TO [UserName]

NOTE
Los permisos no son específicos del lenguaje de script admitido. En otras palabras, no hay niveles de permisos
independientes para el script de R comparado con el script de Python.

Concesión de permisos de base de datos


Mientras un usuario de base de datos ejecuta scripts, es posible que el usuario de base de datos tenga que leer
datos de otras bases de datos. El usuario de base de datos también podría necesitar crear nuevas tablas para
almacenar los resultados y escribir datos en las tablas.
Para cada cuenta de usuario de base de datos o inicio de sesión de SQL que ejecute scripts de R o Python,
asegúrese de que tiene los permisos adecuados en la base de datos específica:
db_datareader para la lectura de datos.
db_datawriter para guardar objetos en la base de datos.
db_ddladmin para crear objetos como procedimientos almacenados o tablas que contienen datos entrenados
y serializados.
Por ejemplo, la siguiente instrucción Transact-SQL concede al inicio de sesión de SQL MySQLLogin los derechos
necesarios para ejecutar consultas de T-SQL en la base de datos ML_Samples. Para ejecutar esta instrucción, el
inicio de sesión de SQL debe existir en el contexto de seguridad del servidor. Para más información, consulte
sp_addrolemember (Transact-SQL).

USE ML_Samples
GO
EXEC sp_addrolemember 'db_datareader', 'MySQLLogin'

Pasos siguientes
Para obtener más información sobre los permisos incluidos en cada rol, vea Roles de nivel de base de datos.
Configuración del servicio de SQL Server
Launchpad
14/07/2021 • 4 minutes to read

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


SQL Server Launchpad es un servicio que administra y ejecuta scripts externos, de modo similar a la forma en la
que el servicio de consulta e indexación de texto completo inicia un host independiente para procesar consultas
de texto completo.
Para obtener más información, vea las secciones de Launchpad en Arquitectura de extensibilidad en SQL Server
Machine Learning Services y Información general sobre seguridad para la plataforma de extensibilidad en SQL
Server Machine Learning Services.

Permisos de cuenta
De forma predeterminada, SQL Server Launchpad está configurado para ejecutarse con NT
Ser vice\MSSQLLaunchpad , que se aprovisiona con todos los permisos necesarios para ejecutar scripts
externos. Si se quitan los permisos de esta cuenta, puede ser que Launchpad no se pueda iniciar o no pueda
acceder a la instancia de SQL Server donde se deben ejecutar los scripts externos.
Si modifica la cuenta de servicio, asegúrese de usar la consola de la directiva de seguridad local.
En la tabla siguiente se muestran los permisos necesarios para esta cuenta.

C O N F IGURA C IÓ N DE DIREC T IVA DE GRUP O N O M B RE IN VA RIA B L E

Ajustar las cuotas de memoria de un proceso SeIncreaseQuotaPrivilege

Omisión de la comprobación transversal SeChangeNotifyPrivilege

Iniciar sesión como servicio SeServiceLogonRight

Reemplazar un token de nivel de proceso SeAssignPrimaryTokenPrivilege

Para más información sobre los permisos para ejecutar servicios de SQL Server, vea Configurar los permisos y
las cuentas de servicio de Windows.

Propiedades de configuración
Normalmente no hay ningún motivo para modificar la configuración del servicio. Las propiedades que se
pueden modificar incluyen la cuenta de servicio, el recuento de procesos externos (20 de forma
predeterminada) o la política de restablecimiento de contraseña para las cuentas profesionales.
1. Abra el Administrador de configuración de SQL Server.
2. En Servicios de SQL Server, haga clic con el botón derecho en Launchpad de SQL Server y elija
Propiedades .
Haga clic en la pestaña Iniciar sesión para ver la cuenta de servicio.
Para aumentar el número de usuarios, haga clic en la pestaña Avanzado y cambie la Cantidad de
contextos de seguridad .

NOTE
En las primeras versiones de SQL Server 2016 R Services, se podían cambiar algunas propiedades del servicio editando el
archivo de configuración de R Services (en bases de datos). Este archivo ya no se utiliza para cambiar las configuraciones.
El Administrador de configuración de SQL Server es el más adecuado para los cambios en la configuración del servicio,
como la cuenta de servicio y el número de usuarios.

Configuración de depuración
Solo se pueden cambiar algunas propiedades mediante el archivo de configuración de Launchpad, que puede
ser útil en determinados casos, como la depuración. Este archivo de configuración se crea durante la instalación
de SQL Server y, de manera predeterminada, se guarda como un archivo de texto sin formato en
<instance path>\binn\rlauncher.config .

Para realizar cambios en este archivo, debe ser administrador en el equipo que ejecuta SQL Server . Si edita el
archivo, se recomienda realizar una copia de seguridad antes de guardar los cambios.
En la siguiente tabla se muestran las configuraciones avanzadas para SQL Server, con los valores permitidos.

N O M B RE DE O P C IÓ N T IP O DESC RIP C IÓ N

JOB_CLEANUP_ON_EXIT Entero Se trata únicamente de una opción


interna: no cambie este valor.
Especifica si se debe limpiar la carpeta
de trabajo temporal creada para cada
sesión de runtime externa una vez
completada. Esta opción resulta útil
para la depuración.

Los valores admitidos son 0


(deshabilitado) o 1 (habilitado).

El valor predeterminado es 1, lo que


significa que los archivos de registro se
quitan al salir.

TRACE_LEVEL Entero Configura el nivel de detalle del


seguimiento de MSSQLLAUNCHPAD
con fines de depuración. Esto afecta a
los archivos de seguimiento de la ruta
de acceso especificada por el valor
LOG_DIRECTORY.
Los valores admitidos son: 1 (error), 2
(rendimiento), 3 (advertencia), 4
(información).

El valor predeterminado es 1, lo que


significa que solo se producen errores
de salida.

Todas las opciones se presentan como un par clave-valor y cada una de ellas se encuentra en una línea aparte.
Por ejemplo, para cambiar el nivel de seguimiento, agregaría la línea Default: TRACE_LEVEL=4 .

Aplicación de una directiva de contraseñas


Si su organización tiene una directiva que requiere el cambio de contraseñas de forma periódica, podría tener
que forzar el servicio Launchpad para que regenere las contraseñas cifradas que Launchpad conserva para sus
cuentas de trabajo.
Para habilitar esta opción de configuración y forzar la actualización de las contraseñas, abra el panel
Propiedades del servicio Launchpad en el Administrador de configuración de SQL Server, haga clic en
Avanzado y cambie Restablecer contraseña de usuarios externos a Sí . Al aplicar este cambio, las
contraseñas se regenerarán inmediatamente para todas las cuentas de usuario. Para ejecutar un script externo
después de este cambio, debe reiniciar el servicio Launchpad, momento en el cual leerá las contraseñas recién
generadas.
Para restablecer las contraseñas a intervalos regulares, puede establecer esta marca manualmente o usar un
script.

Pasos siguientes
Plataforma de extensibilidad
Información general sobre seguridad
Configuración de firewall para SQL Server Machine
Learning Services
14/07/2021 • 2 minutes to read

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


En este artículo se enumeran las consideraciones sobre la configuración del firewall que el administrador o el
arquitecto deben tener en cuenta al usar SQL Server Machine Learning Services.

Reglas de firewall predeterminadas


De forma predeterminada, el programa de instalación de SQL Server deshabilita las conexiones salientes
mediante la creación de reglas de firewall.
En SQL Server 2016 y 2017, 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). Para obtener más información sobre
SQLRUserGroup, vea Información general sobre seguridad para el marco de extensibilidad en SQL Server
Machine Learning Services.
En SQL Server 2019, como parte del cambio a contenedores de 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.

Restricción del acceso a la red


En una instalación predeterminada, se utiliza una regla del Firewall de Windows para bloquear el acceso a toda
la red saliente desde procesos de runtime externos. Hay que crear reglas de firewall para impedir que los
procesos de runtime externos descarguen paquetes o realicen otras llamadas de red que pudieran ser
malintencionadas.
Si usa otro programa de firewall, también puede crear reglas para bloquear la conexión de red saliente para el
runtime externo estableciendo reglas para las cuentas de usuario locales o para el grupo representado por el
grupo de cuentas de usuario.
Se recomienda encarecidamente que active Firewall de Windows (u otro firewall de su elección) para impedir el
acceso a la red sin restricciones mediante el runtime de R o Python.

Pasos siguientes
Configurar Firewall de Windows para conexiones enlazadas
Creación de un inicio de sesión para
SQLRUserGroup
14/07/2021 • 2 minutes to read

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


Cree un inicio de sesión en SQL Server para SQLRUserGroup cuando una conexión de bucle invertido del script
especifique una conexión de confianza y la identidad que se usa para ejecutar un objeto que contiene el código
sea una cuenta de usuario de Windows.
Las conexiones de confianza son aquellas que tienen Trusted_Connection=True en la cadena de conexión.
Cuando SQL Server recibe una solicitud que especifica una conexión de confianza, comprueba si la identidad del
usuario actual de Windows tiene un inicio de sesión. En el caso de los procesos externos que se ejecutan como
una cuenta de trabajo (como MSSQLSERVER01 de SQLRUserGroup ), se produce un error en la solicitud, ya
que esas cuentas no tienen un inicio de sesión de forma predeterminada.
Puede evitar el error de conexión creando un inicio de sesión para SQLSer verRUserGroup . Para obtener más
información sobre las identidades y los procesos externos, vea Información general sobre seguridad para el
marco de extensibilidad.

NOTE
Asegúrese de que SQLRUserGroup tiene los permisos "Permitir el inicio de sesión local". De forma predeterminada, este
derecho se concede a todos los usuarios locales nuevos, pero algunas de las directivas de grupo de las organizaciones
más estrictas podrían deshabilitarlo.

Creación de un inicio de sesión


1. En SQL Server Management Studio, en el Explorador de objetos, expanda Seguridad , haga clic con el
botón derecho en Inicios de sesión y seleccione Nuevo inicio de sesión .
2. En el cuadro de diálogo Inicio de sesión - Nuevo , haga clic en Buscar . (No escriba nada en el cuadro
todavía).
3. En el cuadro Seleccionar usuario o grupo , haga clic en el botón Tipos de objeto .

4. En el cuadro de diálogo Tipos de objeto , seleccione Grupos . Desactive las demás casillas.
5. Haga clic en Avanzadas , compruebe que la ubicación para buscar es el equipo actual y, después, haga
clic en Buscar ahora .

6. Desplácese por la lista de cuentas del grupo en el servidor hasta que encuentre una que comience por
SQLRUserGroup .

El nombre del grupo que está asociado con el servicio Launchpad para la instancia predeterminada
siempre es SQLRUserGroup , independientemente de si instaló R, Python o ambos. Seleccione esta
cuenta solo para la instancia predeterminada.
Si usa una instancia con nombre, el nombre de la instancia se anexa al nombre del grupo de trabajo
predeterminado, SQLRUserGroup . Por ejemplo, si la instancia se denomina "MLTEST", el nombre del
grupo de usuarios predeterminado para esta instancia sería SQLRUserGroupMLTest .
7. Haga clic en Aceptar para cerrar el cuadro de diálogo de búsqueda avanzada.

IMPORTANT
Asegúrese de que ha seleccionado la cuenta correcta para la instancia. Cada instancia solo puede utilizar su propio
servicio Launchpad y el grupo creado para ese servicio. Las instancias no pueden compartir el servicio de
Launchpad ni las cuentas de trabajo.

8. Vuelva a hacer clic en Aceptar para cerrar el cuadro de diálogo Seleccionar usuario o grupo .
9. En el cuadro de diálogo Inicio de sesión: Nuevo , haga clic en Aceptar . De forma predeterminada, el
inicio de sesión se asigna al rol público y tiene permiso para conectarse al motor de base de datos.

Pasos siguientes
Información general sobre seguridad
Plataforma de extensibilidad
Optimización del rendimiento y de los datos para R
14/07/2021 • 11 minutes to read

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


En este artículo se describen las optimizaciones de rendimiento para scripts de R o Python que se ejecutan en
SQL Server. Puede usar estos métodos para actualizar el código de R, tanto para mejorar el rendimiento como
para evitar problemas conocidos.

Elección de un contexto de cálculo


En SQL Server, puede usar el contexto de cálculo local o de SQL al ejecutar el script de R o Python.
Cuando se usa el contexto de cálculo local , el análisis se realiza en el equipo y no en el servidor. Por lo tanto, si
está obteniendo datos de SQL Server para usar en el código, se deben recuperar los datos mediante la red. El
impacto en el rendimiento en el que se incurre para esta transferencia de red depende del tamaño de los datos
transferidos, la velocidad de la red y otras transferencias de red que se producen al mismo tiempo.
Al utilizar el contexto de cálculo SQL Ser ver , el código se ejecuta en el servidor. Si está obteniendo datos de
SQL Server, los datos deben ser locales en el servidor que ejecuta el análisis y, por lo tanto, no se introduce
ninguna sobrecarga de la red. Si necesita importar datos de otros orígenes, le recomendamos que organice los
ETL de antemano.
Cuando se trabaja con grandes conjuntos de datos, se debe usar siempre el contexto de cálculo SQL.

Factores
El lenguaje R tiene el concepto de factores, que son una variable especial para los datos categóricos. Los
científicos de datos suelen usar variables de factor en su fórmula, porque el control de las variables categóricas
como factores garantiza que los datos se procesan correctamente mediante las funciones de aprendizaje
automático.
Por diseño, las variables de factor se pueden convertir de cadenas a enteros y viceversa para el almacenamiento
o el procesamiento. La función de data.frame de R controla todas las cadenas como variables de factor, a
menos que el argumento stringsAsFactors se establezca en False . Esto significa que las cadenas se convierten
automáticamente en un entero para su procesamiento y, a continuación, se asignan de nuevo a la cadena
original.
Si los datos de origen de los factores se almacenan como un entero, el rendimiento puede verse afectado
porque R convierte los enteros de factor en cadenas en tiempo de ejecución y, a continuación, realiza su propia
conversión interna de cadena a entero.
Para evitar estas conversiones en tiempo de ejecución, le recomendamos que almacene los valores como
enteros en la tabla de SQL Server y que use el argumento colInfo para especificar los niveles de la columna que
se usa como factor. La mayoría de los objetos de origen de datos de RevoScaleR toman el parámetro colInfo.
Use este parámetro para asignar un nombre a las variables utilizadas por el origen de datos, especificar su tipo y
definir los niveles de variables o las transformaciones en los valores de columna.
Por ejemplo, la siguiente llamada de función de R obtiene los enteros 1, 2 y 3 de una tabla, pero asigna los
valores a un factor con los niveles "manzana", "naranja" y "plátano".
c("fruit" = c(type = "factor", levels=as.character(c(1:3)), newLevels=c("apple", "orange", "banana")))

Cuando la columna de origen contiene cadenas, siempre es más eficaz especificar los niveles con anterioridad
mediante el parámetro colInfo. Por ejemplo, el siguiente código de R trata las cadenas como factores a medida
que se leen.

c("fruit" = c(type = "factor", levels= c("apple", "orange", "banana")))

Si no hay ninguna diferencia semántica en la generación del modelo, el último enfoque puede provocar un
rendimiento mejor.

Transformaciones de datos
Los científicos de datos suelen emplear funciones de transformación escritas en R como parte del análisis. La
función de transformación se aplica a todas las filas que se recuperan de la tabla. En SQL Server, estas
transformaciones se aplican a todas las filas recuperadas en un lote, lo que requiere comunicación entre el
intérprete de R y el motor de análisis. Para realizar la transformación, se mueven los datos de SQL al motor de
análisis y, después, al proceso del intérprete de R y viceversa.
Por esta razón, el uso de transformaciones como parte del código de R pueden tener un importante efecto
adverso en el rendimiento del algoritmo, según la cantidad de datos implicados.
Es más eficaz tener todas las columnas necesarias en la tabla o vista antes de realizar el análisis, y evitar las
transformaciones durante el cálculo. Si no es posible agregar más columnas a las tablas existentes, considere la
posibilidad de crear otra tabla o vista con las columnas transformadas y usar una consulta adecuada para
recuperar los datos.

Lecturas de filas por lotes


Si usa un origen de datos de SQL Server ( RxSqlServerData ) en el código, se recomienda intentar usar el
parámetro rowsPerRead para especificar el tamaño del lote. Este parámetro define el número de filas que se
consultan y, a continuación, se envían al script externo para su procesamiento. En tiempo de ejecución, el
algoritmo solo ve el número especificado de filas en cada lote.
La capacidad de controlar la cantidad de datos que se procesan a la vez puede ayudarle a resolver o evitar
problemas. Por ejemplo, si el conjunto de datos de entrada es muy amplio (tiene muchas columnas) o si el
conjunto de datos tiene algunas columnas de gran tamaño (por ejemplo, texto libre), puede reducir el tamaño
del lote para evitar la paginación de los datos sin memoria.
De forma predeterminada, el valor de este parámetro se establece en 50000, para garantizar un rendimiento
aceptable, incluso en equipos con poca memoria. Si el servidor tiene suficiente memoria disponible, aumentar
este valor a 500 000 o incluso un millón puede mejorar el rendimiento, especialmente para tablas grandes.
Las ventajas del aumento del tamaño del lote se vuelven evidentes en un conjunto de datos grande y en una
tarea que se puede ejecutar en varios procesos. Sin embargo, el aumento de este valor no siempre produce los
mejores resultados. Se recomienda experimentar con los datos y el algoritmo para determinar el valor óptimo.

Procesamiento paralelo
Para mejorar el rendimiento de las funciones analíticas de r x , puede aprovechar la capacidad de SQL Server de
ejecutar tareas en paralelo mediante núcleos disponibles en el equipo servidor.
Hay dos maneras de lograr la ejecución en paralelo con R en SQL Server:
Usar @parallel. Cuando se usa el procedimiento almacenado sp_execute_external_script para ejecutar
un script de R, se establece el parámetro @parallel en 1 . Este es el mejor método si el script de R no
usa funciones de RevoScaleR, que tienen otros mecanismos para el procesamiento. Si el script usa
funciones RevoScaleR (generalmente con el prefijo "rx"), el procesamiento en paralelo se realiza
automáticamente y no es necesario establecer explícitamente @parallel en 1 .
Si el script de R se puede ejecutar en paralelo, y la consulta SQL también, el motor de base de datos crea
varios procesos paralelos. El número máximo de procesos que se pueden crear es igual a la configuración
del grado de paralelismo máximo (MAXDOP) de la instancia. A continuación, todos los procesos
ejecutan el mismo script, pero reciben solo una parte de los datos.
Por lo tanto, este método no es útil con scripts que deben ver todos los datos, como al entrenar un
modelo. Pero resulta útil al realizar tareas como la predicción por lotes en paralelo. Para obtener más
información sobre el uso de paralelismo con sp_execute_external_script , vea la sección Sugerencias
avanzadas: procesamiento en paralelo de Uso de código de R en Transact-SQL.
Usar numTasks =1. Al usar funciones r x en un contexto de cálculo de SQL Server, establezca el valor
del parámetro numTasks en el número de procesos que desea crear. El número de procesos creados
nunca puede ser más de MAXDOP ; sin embargo, el número real de procesos creados viene determinado
por el motor de base de datos y puede ser menor que el solicitado.
Si el script de R se puede ejecutar en paralelo y la consulta SQL también, entonces el SQL Server crea
varios procesos en paralelo al ejecutar las funciones rx. El número real de procesos que se crean depende
de diversos factores. Estos incluyen la gobernanza de los recursos, el uso actual de los recursos, otras
sesiones y el plan de ejecución de consulta correspondiente a la consulta que se usa con el script de R.

Paralelización de consultas
En Microsoft R, puede trabajar con orígenes de datos de SQL Server definiendo los datos como un objeto de
origen de datos RxSqlServerData.
Crea un origen de datos basado en una tabla o vista completa:

RxSqlServerData(table= "airline", connectionString = sqlConnString)

Crea un origen de datos basado en una consulta SQL:

RxSqlServerData(sqlQuery= "SELECT [ArrDelay],[CRSDepTime],[DayOfWeek] FROM airlineWithIndex WHERE rowNum <=


100000", connectionString = sqlConnString)

NOTE
Si se especifica una tabla en el origen de datos en lugar de una consulta, R Services usa la heurística interna para
determinar las columnas necesarias que capturar de la tabla. Pero es poco probable que este enfoque dé como resultado
la ejecución en paralelo.

Para asegurarse de que los datos se pueden analizar en paralelo, la consulta utilizada para recuperar los datos
debe estar tramada de forma que el motor de base de datos pueda crear un plan de consulta paralelo. Si el
código o el algoritmo usan grandes volúmenes de datos, asegúrese de que la consulta proporcionada a
RxSqlServerData está optimizada para la ejecución en paralelo. Una consulta que no da como resultado un plan
de ejecución en paralelo puede producir un único proceso para el cálculo.
Si necesita trabajar con grandes conjuntos de recursos, use Management Studio u otro analizador de consultas
de SQL antes de ejecutar el código de R para analizar el plan de ejecución. A continuación, siga los pasos
recomendados para mejorar el rendimiento de la consulta. Por ejemplo, un índice que falta en una tabla puede
afectar al tiempo necesario para ejecutar una consulta. Para obtener más información, vea Supervisión y
optimización del rendimiento.
Otro error común que puede afectar al rendimiento es que una consulta recupera más columnas de las
necesarias. Por ejemplo, si una fórmula se basa solo en tres columnas, pero la tabla de origen tiene 30
columnas, el traslado de los datos no es necesario.
No use SELECT * .
Tómese un tiempo para revisar las columnas del conjunto de registros e identificar solo las necesarias para el
análisis.
Elimine de las consultas las columnas que contienen tipos de datos que no son compatibles con el código de
R, como GUID y ROWGUID.
Compruebe los formatos de fecha y hora no admitidos.
En lugar de cargar una tabla, cree una vista que seleccione determinados valores o convierta columnas para
evitar errores de conversión.

Optimización del algoritmo de aprendizaje automático


En esta sección se proporcionan varias sugerencias y recursos específicos de RevoScaleR y otras opciones de
Microsoft R.

TIP
Una explicación general de la optimización de R está fuera del ámbito de este artículo. Sin embargo, si necesita que el
código sea más rápido, se recomienda el artículo popular The R Inferno. Trata las construcciones de programación en R y
los errores comunes en un lenguaje y detalle intensos, así como proporciona muchos ejemplos específicos de técnicas de
programación de R.

Optimizaciones para RevoScaleR


Muchos algoritmos de RevoScaleR admiten parámetros para controlar cómo se genera el modelo entrenado.
Aunque la precisión y la exactitud del modelo son importantes, el rendimiento del algoritmo puede ser igual de
importante. Para obtener el equilibrio adecuado entre la precisión y el tiempo de entrenamiento, puede
modificar los parámetros para aumentar la velocidad del cálculo y, en muchos casos, mejorar el rendimiento sin
reducir la precisión o la corrección.
rxDTree
rxDTreeadmite el parámetro maxDepth , que controla la profundidad del árbol de decisión. Cuando se
aumenta maxDepth , el rendimiento puede disminuir, por lo que es importante analizar las ventajas de
aumentar la profundidad frente al rendimiento perjudicial.
Puede controlar el equilibrio entre la complejidad temporal y la precisión de la predicción mediante el
ajuste de parámetros como maxNumBins , maxDepth , maxComplete , y maxSurrogate . Aumentar la
profundidad por encima de 10 o 15 puede hacer que el cálculo sea muy costoso.
rxLinMod
Intente usar el argumento cube cuando la primera variable dependiente de la fórmula es una variable de
factor.
Cuando cube se establece en TRUE , la regresión se realiza mediante un inverso con particiones, que
podría ser más rápida y usar menos memoria que el cálculo de regresión estándar. Si la fórmula tiene un
gran número de variables, la ganancia de rendimiento puede ser significativa.
rxLogit
Use el argumento cube si la primera variable dependiente es una variable de factor.
Cuando cube se establece en TRUE , el algoritmo usa un inverso con particiones, que podría ser más
rápido y usar menos memoria. Si la fórmula tiene un gran número de variables, la ganancia de
rendimiento puede ser significativa.
Para más información sobre la optimización de RevoScaleR, consulte estos artículos:
Artículo de ayuda: Opciones de rxDForest/rxDTree de optimización del rendimiento
Los métodos para controlar el modelo se ajustan a un modelo de árbol impulsado: Cálculo de modelos
mediante la potenciación de gradiente estocástico
Información general sobre cómo RevoScaleR mueve y procesa los datos: Escritura de algoritmos de
fragmentación personalizados en ScaleR
Modelo de programación para RevoScaleR: Administración de subprocesos en RevoScaleR
Referencia de función para rxDForest
Referencia de función para rxBTrees
Uso de MicrosoftML
También se recomienda que examine el nuevo paquete de MicrosoftML , que proporciona algoritmos de
aprendizaje automático escalables que pueden usar los contextos de cálculo y las transformaciones
proporcionadas por RevoScaleR.
Introducción a MicrosoftML
Cómo elegir un algoritmo de MicrosoftML

Pasos siguientes
Si quiere ver las funciones de R que puede usar para mejorar el rendimiento del código de R, consulte
Uso de funciones de generación de perfiles de código de R para mejorar el rendimiento.
Para información más completa sobre la optimización del rendimiento en SQL Server, consulte Centro de
rendimiento para el motor de base de datos de SQL Server y Base de datos SQL de Azure.
Uso de funciones de generación de perfiles de
código de R para mejorar el rendimiento
14/07/2021 • 2 minutes to read

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


En este artículo se describen las herramientas de rendimiento que los paquetes de R proporcionan para obtener
información sobre las llamadas de funciones internas. Puede usar esta información para mejorar el rendimiento
del código.

TIP
En este artículo se ofrecen recursos básicos para comenzar. Para obtener orientación experta, se recomienda la sección
sobre rendimiento del libro "Advanced R" de Hadley Wickham.

Uso de RPROF
rprof es una función incluida en el paquete base utils , que se carga de manera predeterminada.
Por lo general, la función rprof escribe la pila de llamadas en un archivo, a intervalos especificados. Después, se
puede usar la función summaryRprof para procesar el archivo de salida. Una ventaja de rprof es que realiza el
muestreo, lo que, por tanto, disminuye la carga de rendimiento de la supervisión.
Para usar la generación de perfiles de R en el código, llame a esta función y especifique sus parámetros, incluido
el nombre de la ubicación del archivo de registro que se va a escribir. La generación de perfiles se puede activar
y desactivar en el código. La sintaxis siguiente muestra el uso básico:

# Specify profiling output file.


varOutputFile <- "C:/TEMP/run001.log")
Rprof(varOutputFile)

# Turn off profiling


Rprof(NULL)

# Restart profiling
Rprof(append=TRUE)

NOTE
El uso de esta función requiere que Windows Perl esté instalado en el equipo donde se ejecuta el código. Por consiguiente,
se recomienda generar perfiles del código durante el desarrollo en un entorno de R e implementar después el código
depurado en SQL Server.

Funciones del sistema de R


El lenguaje R incluye muchas funciones del paquete base que devuelven el contenido de variables del sistema.
Por ejemplo, como parte del código de R, podría usar Sys.timezone para obtener la zona horaria actual o
Sys.Time para obtener la hora del sistema desde R.

Para obtener información sobre funciones individuales del sistema de R, escriba el nombre de la función como
argumento en la función help() de R desde un símbolo del sistema.

help("Sys.time")

Depuración y generación de perfiles de R


La documentación de Microsoft R Open, que se instala de manera predeterminada, incluye un manual sobre el
desarrollo de extensiones para el lenguaje R que analiza minuciosamente la generación de perfiles y la
depuración.

Pasos siguientes
Para más información sobre la optimización de scripts de R en SQL Server, consulte Optimización del
rendimiento y de los datos para R.
Para información más completa sobre la optimización del rendimiento en SQL Server, consulte Centro de
rendimiento para el motor de base de datos de SQL Server y Base de datos SQL de Azure.
Para más información sobre el paquete de utilidades, consulte el artículo sobre el paquete de utilidades de R.
Para un análisis detallado de la programación R, consulte "Advanced R" de Hadley Wickham.
revoscalepy (paquete de Python en SQL Server
Machine Learning Services)
14/07/2021 • 5 minutes to read

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


revoscalepy es un paquete de Python de Microsoft que admite computación distribuida, contextos de cálculo
remoto y algoritmos de ciencia de datos de alto rendimiento. El paquete se incluye en SQL Server Machine
Learning Services.
El paquete ofrece la capacidad siguiente:
Contextos de cálculo local y remoto en sistemas que tienen la misma versión de revoscalepy
Funciones de visualización y transformación de datos
Funciones de ciencia de datos, escalables a través del procesamiento paralelo o distribuido
Rendimiento mejorado, incluido el uso de las bibliotecas matemáticas de Intel
Los orígenes de datos y los contextos de cálculo que se creen en revoscalepy también se pueden usar en
algoritmos de aprendizaje automático. Para obtener una introducción a estos algoritmos, consulte módulo
microsoftml de Python en SQL Server.

Documentación de referencia completa


El paquete de revoscalepy se distribuye en varios productos de Microsoft, pero el uso es el mismo, se obtenga
el paquete en SQL Server o en otro producto. Dado que las funciones son las mismas, la documentación de las
funciones individuales de revoscalepy se publica en una sola ubicación en la referencia de Python. Si existe
algún comportamiento específico del producto, las discrepancias se anotarán en la página de ayuda de la
función.

Versiones y plataformas
El módulo de revoscalepy se basa en Python 3.5 y solo está disponible cuando se instala uno de los siguientes
productos o descargas de Microsoft:
SQL Server Machine Learning Services
Bibliotecas de cliente de Python para un cliente de ciencia de datos

NOTE
En SQL Server 2017, las versiones completas del producto son solo para Windows. Para revoscalepy en
SQL Server 2019 y versiones posteriores, se admiten tanto Windows como Linux.

Funciones por categoría


En esta sección se enumeran las funciones por categoría, para darle una idea del uso de cada una de ellas.
También puede usar la tabla de contenido para ver las funciones en orden alfabético.

1- Origen de datos y cálculo


revoscalepy incluye funciones para crear orígenes de datos y establecer la ubicación, o el contexto de proceso,
de dónde se realizan los cálculos. En la tabla siguiente se enumeran las funciones relevantes para los escenarios
de SQL Server.
En algunos casos, SQL Server y Python usan tipos de datos diferentes. Para obtener una lista de las asignaciones
entre los tipos de datos de SQL y Python, vea tipos de datos entre Python y SQL.

F UN C IÓ N DESC RIP C IÓ N

RxInSqlServer Cree un objeto de contexto de proceso de SQL Server para


enviar los cálculos a una instancia remota. Varias funciones
de revoscalepy toman el contexto de proceso como
argumento. Para obtener un ejemplo de cambio de contexto,
vea Crear un modelo con revoscalepy.

RxSqlServerData Cree un objeto de datos basado en una consulta o una tabla


de SQL Server.

RxOdbcData Cree un origen de datos basado en una conexión ODBC.

RxXdfData Cree un origen de datos basado en un archivo XDF local. Los


archivos XDF a menudo se usan para descargar en el disco
los datos en memoria. Un archivo XDF puede ser útil al
trabajar con más datos de los que se pueden transferir
desde la base de datos en un lote o con más datos de los
que caben en la memoria. Por ejemplo, si suele mover
grandes cantidades de datos de una base de datos a una
estación de trabajo local, en lugar de consultar la base de
datos varias veces para cada operación de R, puede usar el
archivo XDF a modo de memoria caché para guardar los
datos localmente y, después, trabajar con ellos en el área de
trabajo de R.

TIP
Si no está familiarizado con la idea de los orígenes de datos o los contextos de cálculo, le recomendamos que comience
con el artículo Computación distribuida.

2- Manipulación de datos (ETL)


F UN C IÓ N DESC RIP C IÓ N

rx_import Importe los datos en un archivo .xdf o una trama de datos.

rx_data_step Transforme los datos de un conjunto de datos de entrada en


un conjunto de datos de salida.

3- Aprendizaje y resumen
F UN C IÓ N DESC RIP C IÓ N

rx_btrees Ajustar los árboles de decisión impulsados por gradiente


estocástico

rx_dforest Ajustar los bosques de decisión de regresión clasificación


F UN C IÓ N DESC RIP C IÓ N

rx_dtree Ajustar los bosques de regresión y clasificación

rx_lin_mod Crear un modelo de regresión lineal

rx_logit Crear un modelo de regresión logística

rx_summary Generar resúmenes de variable única de objetos en


revoscalepy

También debe revisar las funciones de microsoftml para ver otros enfoques.

4- Funciones de puntuación
F UN C IÓ N DESC RIP C IÓ N

rx_predict Generar predicciones a partir de un modelo entrenado y se


puede usar para la puntuación en tiempo real.

rx_predict_default Calcular valores y valores residuales previstos mediante


objetos rx_lin_mod y rx_logit

rx_predict_rx_dforest Calcular los valores previstos o ajustados para un conjunto


de datos a partir de un objeto rx_dforest o rx_btrees

rx_predict_rx_dtree Calcular los valores previstos o ajustados para un conjunto


de datos a partir de un objeto rx_dtree

Cómo trabajar con revoscalepy


Las funciones de revoscalepy se pueden llamar en código de Python encapsulado en procedimientos
almacenados. La mayoría de los desarrolladores compilan soluciones de revoscalepy localmente y, después,
migran el código de Python final a los procedimientos almacenados como un ejercicio de implementación.
Cuando se ejecuta localmente, normalmente se ejecuta un script de Python desde la línea de comandos o desde
un entorno de desarrollo de Python, y se especifica un contexto de proceso de SQL Server mediante una de las
funciones de revoscalepy . Puede usar el contexto de proceso remoto para todo el código o para funciones
individuales. Por ejemplo, puede que quiera descargar el entrenamiento del modelo en el servidor para usar los
datos más recientes y evitar el movimiento de datos.
Cuando esté preparado para encapsular el script de Python dentro de un procedimiento almacenado,
sp_execute_external_script, se recomienda que vuelva a escribir el código como una sola función que tenga las
entradas y salidas definidas con claridad.
Las entradas y salidas deben ser tramas de datos Pandas . Una vez hecho esto, puede llamar al procedimiento
almacenado desde cualquier cliente que admita T-SQL, pasar fácilmente las consultas SQL como entradas y
guardar los resultados en tablas SQL. Para obtener un ejemplo, vea Análisis de Python en base de datos para
desarrolladores de SQL.
Uso de revoscalepy con microsoftml
Las funciones de Python para microsoftml se integran con los contextos de cálculo y los orígenes de datos que
se proporcionan en revoscalepy. Al llamar a funciones desde microsoftml —por ejemplo, al definir y entrenar un
modelo—, use las funciones de revoscalepy para ejecutar el código de Python localmente o en un contexto de
proceso remoto de SQL Server.
En el ejemplo siguiente se muestra la sintaxis para la importación de módulos en el código de Python. Después,
puede hacer referencia a las funciones individuales que necesite.

from microsoftml.modules.logistic_regression.rx_logistic_regression import rx_logistic_regression


from revoscalepy.functions.RxSummary import rx_summary
from revoscalepy.etl.RxImport import rx_import_datasource

Consulte también
Tutoriales de Python
Referencia de Python
microsoftml (paquete de Python en SQL Server
Machine Learning Services)
14/07/2021 • 3 minutes to read

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


microsoftml es un paquete de Python de Microsoft que proporciona algoritmos de aprendizaje automático de
alto rendimiento. Incluye funciones para el entrenamiento y las transformaciones, la puntuación, el análisis de
texto y de imágenes, y la extracción de características para derivar valores a partir de datos existentes. El
paquete se incluye en SQL Server Machine Learning Services y admite un alto rendimiento en macrodatos,
mediante el procesamiento de varios núcleos y un flujo de datos rápido.

Documentación de referencia completa


El paquete de microsoftml se distribuye en varios productos de Microsoft, pero el uso es el mismo
independientemente de si se obtiene el paquete en SQL Server o en otro producto. Dado que las funciones son
las mismas, la documentación de las funciones individuales de microsoftml se publica en una sola ubicación en
la referencia de Python. Si existe algún comportamiento específico del producto, las discrepancias se anotarán
en la página de ayuda de la función.

Versiones y plataformas
El módulo de microsoftml se basa en Python 3.5 y solo está disponible cuando se instala uno de los siguientes
productos o descargas de Microsoft:
SQL Server Machine Learning Services
Bibliotecas de cliente de Python para un cliente de ciencia de datos

NOTE
En SQL Server 2017, las versiones completas del producto son solo para Windows. Para microsoftml en
SQL Server 2019, se admiten tanto Windows como Linux.

Dependencias de paquetes
Los algoritmos de microsoftml dependen de revoscalepy para:
Objetos de origen de datos. Los datos consumidos por las funciones de microsoftml se crean mediante las
funciones de revoscalepy .
Informática remota (cambio de la ejecución de la función a una instancia de SQL Server remota). El paquete
de revoscalepy proporciona funciones para crear y activar un contexto de cálculo remoto para SQL Server.
En la mayoría de los casos, los paquetes se cargarán juntos siempre que se use microsoftml .

Funciones por categoría


En esta sección se enumeran las funciones por categoría, para darle una idea del uso de cada una de ellas.
También puede usar la tabla de contenido para ver las funciones en orden alfabético.
1- Funciones de aprendizaje
F UN C IÓ N DESC RIP C IÓ N

microsoftml.rx_ensemble Entrena un conjunto de modelos.

microsoftml.rx_fast_forest Bosque aleatorio.

microsoftml.rx_fast_linear Modelo lineal. con el ascenso estocástico dual de


coordenadas.

microsoftml.rx_fast_trees Árboles impulsados.

microsoftml.rx_logistic_regression Regresión logística.

microsoftml.rx_neural_network Red neuronal.

microsoftml.rx_oneclass_svm Detección de anomalías.

2-Funciones de transformación
Control de variables de categorías
F UN C IÓ N DESC RIP C IÓ N

microsoftml.categorical Convierte una columna de texto en categorías.

microsoftml.categorical_hash Aplica y convierte una columna de texto en categorías.

Manipulación de esquemas
F UN C IÓ N DESC RIP C IÓ N

microsoftml.concat Concatena varias columnas en un único vector.

microsoftml.drop_columns Quita columnas de un conjunto de datos.

microsoftml.select_columns Conserva las columnas de un conjunto de datos.

Selección de variables
F UN C IÓ N DESC RIP C IÓ N

microsoftml.count_select Selecciona características basadas en recuentos.

microsoftml.mutualinformation_select Selecciona características basadas en la información mutua.

Análisis de texto
F UN C IÓ N DESC RIP C IÓ N

microsoftml.featurize_text Convierte las columnas de texto en características numéricas.


F UN C IÓ N DESC RIP C IÓ N

microsoftml.get_sentiment Análisis de sentimiento.

Análisis de imagen
F UN C IÓ N DESC RIP C IÓ N

microsoftml.load_image Carga una imagen.

microsoftml.resize_image Ajusta el tamaño de una imagen.

microsoftml.extract_pixels Extrae píxeles de una imagen.

microsoftml.featurize_image Convierte una imagen en características.

Funciones de características
F UN C IÓ N DESC RIP C IÓ N

microsoftml.rx_featurize Transformación de datos para orígenes de datos

3-Funciones de puntuación
F UN C IÓ N DESC RIP C IÓ N

microsoftml.rx_predict Puntuaciones mediante un modelo de aprendizaje


automático de Microsoft

Cómo llamar a microsoftml


Las funciones de microsoftml se pueden llamar en código Python encapsulado en procedimientos
almacenados. La mayoría de los desarrolladores compilan soluciones de microsoftml localmente y, después,
migran el código Python final a los procedimientos almacenados como un ejercicio de implementación.
El paquete microsoftml para Python está instalado de forma predeterminada, pero a diferencia de
revoscalepy , no se carga de forma predeterminada cuando se inicia una sesión de Python con los ejecutables
de Python instalados con SQL Server.
Como primer paso, importe el paquete de microsoftml e importe revoscalepy si necesita usar contextos de
cálculo remotos o conectividad u objetos de origen de datos relacionados. Después, haga referencia a las
funciones individuales que necesite.

from microsoftml.modules.logistic_regression.rx_logistic_regression import rx_logistic_regression


from revoscalepy.functions.RxSummary import rx_summary
from revoscalepy.etl.RxImport import rx_import_datasource

Consulte también
Tutoriales de Python
Referencia de Python
RevoScaleR (paquete de R en SQL Server Machine
Learning Services)
14/07/2021 • 8 minutes to read

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


RevoScaleR es un paquete de R de Microsoft que admite computación distribuida, contextos de cálculo remoto
y algoritmos de ciencia de datos de alto rendimiento. También admite la importación de datos, la
transformación de datos, el resumen, la visualización y el análisis. El paquete se incluye en SQL Server Machine
Learning Services y en SQL Server 2016 R Services.
A diferencia de las funciones base de R, las operaciones de RevoScaleR se pueden realizar en conjuntos de datos
grandes, en paralelo y en sistemas de archivos distribuidos. Las funciones pueden operar en conjuntos de
valores que no caben en la memoria mediante fragmentación y reensamblado de los resultados cuando se
completan las operaciones.
Las funciones de RevoScaleR se indican con un prefijo rx** o RX para que sean fáciles de identificar.
RevoScaleR sirve como plataforma para la ciencia de datos distribuidos. Por ejemplo, puede usar las
transformaciones y contextos de cálculo de RevoScaleR con los algoritmos de última generación de
MicrosoftML. También puede usar rxExec para ejecutar funciones base de R en paralelo.

Documentación de referencia completa


El paquete de RevoScaleR se distribuye en varios productos de Microsoft, pero el uso es el mismo, se obtenga
el paquete en SQL Server o en otro producto. Dado que las funciones son las mismas, la documentación de las
funciones individuales de RevoScaleR se publica en una sola ubicación en la referencia de R. Si existe algún
comportamiento específico del producto, las discrepancias se anotarán en la página de ayuda de la función.

Versiones y plataformas
El paquete de RevoScaleR se basa en R 3.4.3 y solo está disponible cuando se instala uno de los siguientes
productos o descargas de Microsoft:
SQL Server 2016 R Services
SQL Server Machine Learning Services
Cliente de Microsoft R

NOTE
En SQL Server 2017, las versiones completas del producto son solo para Windows. Para RevoScaleR en SQL Server 2019,
se admiten tanto Windows como Linux.

Funciones por categoría


En esta sección se enumeran las funciones por categoría, para darle una idea del uso de cada una de ellas.
También puede usar la tabla de contenido para ver las funciones en orden alfabético.

1- Origen de datos y cálculo


RevoScaleR incluye funciones para crear orígenes de datos y establecer la ubicación, o el contexto de proceso,
de dónde se realizan los cálculos. Un objeto de origen de datos es un contenedor que especifica una cadena de
conexión, junto con el conjunto de datos que quiera, definido como una tabla, una vista o una consulta. No se
admiten llamadas a procedimientos almacenados. En la tabla siguiente se enumeran las funciones relevantes
para los escenarios de SQL Server.
En algunos casos, SQL Server y R usan tipos de datos diferentes. Para obtener una lista de las asignaciones entre
los tipos de datos de SQL y R, vea tipos de datos entre R y SQL.

F UN C IÓ N DESC RIP C IÓ N

RxInSqlServer Cree un objeto de contexto de proceso de SQL Server para


enviar los cálculos a una instancia remota. Varias funciones
de RevoScaleR toman el contexto de proceso como
argumento.

rxGetComputeContext / rxSetComputeContext Obtenga o establezca el contexto de proceso activo.

RxSqlServerData Cree un objeto de datos basado en una consulta o una tabla


de SQL Server.

RxOdbcData Cree un origen de datos basado en una conexión ODBC.

RxXdfData Cree un origen de datos basado en un archivo XDF local. Los


archivos XDF a menudo se usan para descargar en el disco
los datos en memoria. Un archivo XDF puede ser útil al
trabajar con más datos de los que se pueden transferir
desde la base de datos en un lote o con más datos de los
que caben en la memoria. Por ejemplo, si suele mover
grandes cantidades de datos de una base de datos a una
estación de trabajo local, en lugar de consultar la base de
datos varias veces para cada operación de R, puede usar el
archivo XDF a modo de memoria caché para guardar los
datos localmente y, después, trabajar con ellos en el área de
trabajo de R.

TIP
Si no está familiarizado con la idea de los orígenes de datos o los contextos de cálculo, le recomendamos que comience
con el artículo Computación distribuida.

Ejecutar instrucciones DDL


Puede ejecutar instrucciones de DDL de R si tiene los permisos necesarios en la instancia y la base de datos. Las
siguientes funciones usan las llamadas ODBC para ejecutar instrucciones DDL o recuperar el esquema de la
base de datos.

F UN C IÓ N DESC RIP C IÓ N

rxSqlServerTableExists y rxSqlServerDropTable Elimine una tabla SQL Server o compruebe la existencia de


un objeto o una tabla de base de datos.

rxExecuteSQLDDL Ejecute un comando de lenguaje de definición de datos


(DDL) que defina o manipule objetos de base de datos. Esta
función no puede devolver datos y solo se usa para
recuperar o modificar el esquema de objetos o los
metadatos.
2- Manipulación de datos (ETL)
Después de crear un objeto de origen de datos, puede usar el objeto para cargar datos en él, transformar los
datos o escribir otros nuevos en el destino especificado. En función del tamaño de los datos en el origen,
también puede definir el tamaño del lote como parte del origen de datos y mover los datos en fragmentos.

F UN C IÓ N DESC RIP C IÓ N

rxOpen-methods Compruebe si un origen de datos está disponible, abre o


cierra un origen de datos, lee los datos de un origen, escribe
datos en el destino y cierra un origen de datos.

rxImport Mueva los datos desde un origen de datos al


almacenamiento de archivos o a una trama de datos.

rxDataStep Transforme los datos mientras los mueve entre orígenes de


datos.

3- Funciones de creación de gráficos


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

rxHistogram Crea un histograma a partir de los datos.

rxLinePlot Crea un gráfico de líneas a partir de los datos.

rxLorenz Calcula una curva de Lorenz que se puede mostrar como un


trazado.

rxRocCurve Calcula y traza curvas ROC a partir de los datos reales y


previstos.

4- Estadísticas descriptivas
N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

rxQuantile * Calcula los cuantiles aproximados para archivos .xdf y tramas


de datos sin ordenar.

rxSummary * Estadísticas de resumen básico de datos, incluidos los


cálculos por grupo. No se admite la escritura de cálculos de
grupo en el archivo .xdf.

rxCrossTabs * Tabulación cruzada basada en fórmulas de los datos.

rxCube * Tabulación cruzada basada en fórmulas alternativa diseñada


para la representación eficaz que devuelve resultados del
cubo. No se admite la escritura de resultados en el archivo
.xdf.

rxMarginals Resúmenes marginales de las tabulaciones cruzadas.


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

as.xtabs Convierte los resultados de tabulación cruzada en un objeto


xtabs.

rxChiSquaredTest Realiza una prueba χ 2 en un objeto xtabs. Se usa con


conjuntos de datos pequeños y no fragmenta los datos.

rxFisherTest Realiza una prueba de exacto de Fisher en un objeto xtabs.


Se usa con conjuntos de datos pequeños y no fragmenta los
datos.

rxKendallCor Calcula el coeficiente de correlación por rangos tau de


Kendall mediante un objeto xtabs.

rxPairwiseCrossTab Aplica una función a combinaciones por pares de filas y


columnas de un objeto xtabs.

rxRiskRatio Calcula el riesgo relativo de un objeto xtabs de dos por dos.

rxOddsRatio Calcula el coeficiente de probabilidades de un objeto xtabs


de dos por dos.

* Indica las funciones más populares de esta categoría.

5- Funciones de predicción
N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

rxLinMod * Ajusta un modelo lineal a los datos.

rxLogit * Ajusta un modelo de regresión logística a los datos.

rxGlm * Ajusta un modelo lineal generalizado a los datos.

rxCovCor * Calcula la covarianza, correlación o la matriz de suma de


cuadrados o producto vectorial de un conjunto de variables.

rxDTree * Ajusta un árbol de clasificación o regresión a los datos.

rxBTrees * Ajusta un bosque de decisión de clasificación o regresión a


los datos mediante un algoritmo de potenciación del
gradiente estocástico.

rxDForest * Ajusta un bosque de decisión de clasificación o regresión a


los datos.

rxPredict * Calcula predicciones para los modelos ajustados. La salida


debe ser un origen de datos XDF.

rxKmeans * Lleva a cabo la agrupación en clústeres k-means.

rxNaiveBayes * Realiza una clasificación de Naive Bayes.


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

rxCov Calcula la matriz de covarianza de un conjunto de variables.

rxCor Calcula la matriz de correlación de un conjunto de variables.

rxSSCP Calcula la matriz de suma de cuadrados o producto vectorial


de un conjunto de variables.

rxRoc Cálculos de una característica operativa del receptor (ROC)


con los valores reales y previstos de un sistema clasificador
binario.

* Indica las funciones más populares de esta categoría.

Cómo trabajar con RevoScaleR


Las funciones de RevoScaleR se pueden llamar en código R encapsulado en procedimientos almacenados. La
mayoría de los desarrolladores compilan soluciones de RevoScaleR localmente y, después, migran el código R
final a los procedimientos almacenados como un ejercicio de implementación.
Cuando se ejecuta localmente, normalmente se ejecuta un script de R desde la línea de comandos o desde un
entorno de desarrollo de R, y se especifica un contexto de proceso de SQL Server mediante una de las funciones
de RevoScaleR . Puede usar el contexto de proceso remoto para todo el código o para funciones individuales.
Por ejemplo, puede que quiera descargar el entrenamiento del modelo en el servidor para usar los datos más
recientes y evitar el movimiento de datos.
Cuando esté preparado para encapsular el script de R dentro de un procedimiento almacenado,
sp_execute_external_script, se recomienda que vuelva a escribir el código como una sola función que tenga las
entradas y salidas definidas con claridad.

Consulte también
Tutoriales de R
Información sobre cómo usar contextos de cálculo
R para desarrolladores de SQL: Entrenar y hacer operativo un modelo
Ejemplos de productos de Microsoft en GitHub
Referencia de R
MicrosoftML (paquete de R en SQL Server Machine
Learning Services)
15/07/2021 • 5 minutes to read

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


MicrosoftML es un paquete de R de Microsoft que proporciona algoritmos de aprendizaje automático de alto
rendimiento. Incluye funciones para el entrenamiento y las transformaciones, la puntuación, el análisis de texto y
de imágenes, y la extracción de características para derivar valores a partir de datos existentes. El paquete se
incluye en SQL Server Machine Learning Services y SQL Server 2016 R y admite un alto rendimiento en
macrodatos, mediante el procesamiento de varios núcleos y un flujo de datos rápido. MicrosoftML también
incluye numerosas transformaciones para el procesamiento de texto e imágenes.

Documentación de referencia completa


El paquete MicrosoftML se distribuye en varios productos de Microsoft, pero el uso es el mismo
independientemente de si se obtiene el paquete en SQL Server o en otro producto. Dado que las funciones son
las mismas, la documentación de las funciones individuales de RevoScaleR se publica en una sola ubicación en
la referencia de R. Si existe algún comportamiento específico del producto, las discrepancias se anotarán en la
página de ayuda de la función.

Versiones y plataformas
El paquete MicrosoftML se basa en R 3.4.3 y solo está disponible cuando se instala uno de los siguientes
productos o descargas de Microsoft:
SQL Server 2016 R Services
SQL Server Machine Learning Services
Cliente de Microsoft R

NOTE
En SQL Server 2017, las versiones completas del producto son solo para Windows. Para MicrosoftML en
SQL Server 2019, se admiten tanto Windows como Linux.

Dependencias de paquetes
Los algoritmos de MicrosoftML dependen de RevoScaleR para:
Objetos de origen de datos. Los datos consumidos por las funciones de MicrosoftML se crean mediante las
funciones de RevoScaleR .
Informática remota (cambio de la ejecución de la función a una instancia de SQL Server remota). El paquete
RevoScaleR proporciona funciones para crear y activar un contexto de cálculo remoto para SQL Server.
En la mayoría de los casos, los paquetes se cargarán juntos siempre que se use MicrosoftML .

Funciones por categoría


En esta sección se enumeran las funciones por categoría, para darle una idea del uso de cada una de ellas.
También puede usar la tabla de contenido para ver las funciones en orden alfabético.

1- Algoritmos de aprendizaje automático


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

rxFastTrees Una implementación de FastRank, una implementación eficaz


del algoritmo de impulso de gradiente MART.

rxFastForest Un bosque aleatorio y una implementación de bosque de


regresión por cuantiles mediante rxFastTrees.

rxLogisticRegression Regresión logística mediante L-BFGS.

rxOneClassSvm Máquinas de vectores de soporte de una clase.

rxNeuralNet Red neuronal binaria, de varias clases y de regresión.

rxFastLinear Optimización del ascenso estocástico dual de coordenadas


para la regresión y clasificación binaria lineal.

rxEnsemble Entrena varios modelos de diversos tipos para obtener un


mejor rendimiento predictivo que el que se podría obtener a
partir de un único modelo.

2- Funciones de transformación
N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

concat Transformación para crear una columna de valor vectorial


única a partir de varias columnas.

categorical Cree un vector indicador mediante la transformación


categórica con el diccionario.

categoricalHash Convierte el valor categórico en una matriz indicadora


mediante un código hash.

featurizeText Genera un contenedor de recuentos de secuencias de


palabras consecutivas, denominadas n-gramas, a partir de
un corpus de texto determinado. Ofrece detección de
idioma, tokenización, eliminación de palabras irrelevantes,
normalización de texto y generación de características.

getSentiment Puntúa el texto en lenguaje natural y crea una columna que


contiene las probabilidades de que las opiniones del texto
sean positivas.

ngram Permite definir argumentos para la extracción de


características basada en recuentos y en hash.

selectColumns Selecciona un conjunto de columnas para volver a entrenar,


y elimina todas las demás.
N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

selectFeatures Selecciona las características de las variables especificadas


mediante un modo especificado.

loadImage Carga los datos de la imagen.

resizeImage Cambia el tamaño de una imagen a una dimensión


especificada mediante un método de cambio de tamaño
determinado.

extractPixels Extrae los valores de píxeles de una imagen.

featurizeImage Caracteriza una imagen mediante un modelo de red


neuronal profunda previamente entrenado.

3- Funciones de puntuación y aprendizaje


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

rxPredict.mlModel Ejecuta la biblioteca de puntuación desde SQL Server,


mediante el procedimiento almacenado, o bien desde código
R, lo que permite una puntuación en tiempo real para
proporcionar un rendimiento de predicción mucho más
rápido.

rxFeaturize Transforma los datos de un conjunto de datos de entrada en


un conjunto de datos de salida.

mlModel Proporciona un resumen de un modelo de Machine Learning


de Microsoft R.

4- Funciones de pérdida para clasificación y regresión


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

expLoss Especificaciones de la función de pérdida de clasificación


exponencial.

logLoss Especificaciones de la función de pérdida de clasificación de


registros.

hingeLoss Especificaciones de la función de pérdida de clasificación de


bisagra.

smoothHingeLoss Especificaciones de la función de pérdida de clasificación de


bisagra uniforme.

poissonLoss Especificaciones de la función de pérdida de regresión de


Poisson.

squaredLoss Especificaciones de la función de pérdida de regresión


cuadrada.
5- Funciones de selección de características
N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

minCount Especificación de la selección de características en el modo de


recuento.

mutualInformation Especificación de la selección de características en el modo de


información mutua.

6- Funciones de modelado de conjuntos


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

fastTrees Crea una lista que contiene el nombre de la función y los


argumentos para entrenar un modelo de árbol rápido con
rxEnsemble.

fastForest Crea una lista que contiene el nombre de la función y los


argumentos para entrenar un modelo de bosque rápido con
rxEnsemble.

fastLinear Crea una lista que contiene el nombre de la función y los


argumentos para entrenar un modelo de lineal rápido con
rxEnsemble.

logisticRegression Crea una lista que contiene el nombre de la función y los


argumentos para entrenar un modelo de regresión logística
con rxEnsemble.

oneClassSvm Crea una lista que contiene el nombre de la función y los


argumentos para entrenar un modelo de OneClassSvm con
rxEnsemble.

7- Funciones de red neuronal


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

optimizer Especifica los algoritmos de optimización para el algoritmo


de aprendizaje automático rxNeuralNet.

8- Funciones de estado del paquete


N O M B RE DE F UN C IÓ N DESC RIP C IÓ N

rxHashEnv Objeto de entorno que se usa para almacenar el estado de


todo el paquete.

Cómo usar MicrosoftML


Las funciones de MicrosoftML se pueden llamar en código R encapsulado en procedimientos almacenados. La
mayoría de los desarrolladores compilan soluciones de MicrosoftML localmente y, después, migran el código
R final a los procedimientos almacenados como un ejercicio de implementación.
El paquete de MicrosoftML para R está instalado de forma preconfigurada en SQL Server 2017.
El paquete no se carga de forma predeterminada. Como primer paso, cargue el paquete de MicrosoftML y,
después, cargue RevoScaleR si necesita usar contextos de cálculo remotos o conectividad u objetos de origen
de datos relacionados. Después, haga referencia a las funciones individuales que necesite.

library(microsoftml);
library(RevoScaleR);
logisticRegression(args);

Consulte también
Tutoriales de R
Información sobre cómo usar contextos de cálculo
R para desarrolladores de SQL: Entrenar y hacer operativo un modelo
Ejemplos de productos de Microsoft en GitHub
Referencia de R
OlapR (paquete de R en SQL Server Machine
Learning Services)
14/07/2021 • 2 minutes to read

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


OlapR es un paquete de R de Microsoft que se usa para las consultas MDX en un cubo OLAP de SQL Server
Analysis Services. Las funciones no admiten todas las operaciones MDX, pero puede crear consultas que
segmenten, desmenucen, obtengan detalles, acumulen y dinamicen en las dimensiones. El paquete se incluye en
SQL Server Machine Learning Services y en SQL Server 2016 R Services.
Puede usar este paquete en las conexiones a un cubo OLAP de Analysis Services en todas las versiones
compatibles de SQL Server. En este momento no se admiten las conexiones a un modelo tabular.

Carga de paquete
El paquete olapR no se ha cargado previamente en una sesión de R. Ejecute el siguiente comando para cargar el
paquete.

library(olapR)

Versión del paquete


La versión actual es 1.0.0 en todos los productos solo de Windows y descargas que proporcionan el paquete.

Documentación de referencia completa


El paquete olapr se distribuye en varios productos de Microsoft, pero el uso es el mismo independientemente
de si se obtiene el paquete en SQL Server o en otro producto. Dado que las funciones son las mismas, la
documentación de las funciones individuales de sqlrutils se publica en una sola ubicación en la referencia de R.
Si existe algún comportamiento específico del producto, las discrepancias se anotarán en la página de ayuda de
la función.

Disponibilidad y ubicación
Este paquete se proporciona en los siguientes productos, así como en varias imágenes de máquina virtual en
Azure. La ubicación del paquete varía en consecuencia.

P RO DUC TO LO C AT IO N

SQL Server Machine Learning Services (con la integración de C:\Archivos de programa\Microsoft SQL
R) Server\MSSQL14.MSSQLSERVER\R_SERVICES\library

SQL Server 2016 R Services C:\Archivos de programa\Microsoft SQL


Server\MSSQL13.MSSQLSERVER\R_SERVICES\library

Microsoft Machine Learning Server (R Server) C:\Archivos de programa\Microsoft\ R_SERVER \library


P RO DUC TO LO C AT IO N

Cliente de Microsoft R C:\Archivos de programa\Microsoft\R


Client\R_SERVER\library

Data Science Virtual Machine (en Azure) C:\Archivos de programa\Microsoft\R


Client\R_SERVER\library

SQL Server Virtual Machine (en Azure) 1 C:\Archivos de programa\Microsoft SQL


Server\MSSQL14.MSSQLSERVER\R_SERVICES\library

1 integración de R
es opcional en SQL Server. El paquete olapr se instalará cuando agregue la característica
Machine Learning o de R durante la configuración de la máquina virtual.

Consulte también
Cómo crear consultas MDX con olapR
Sqlrutils (paquete de R en SQL Server Machine
Learning Services)
14/07/2021 • 6 minutes to read

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


Sqlrutils es un paquete de Microsoft que proporciona un mecanismo para que los usuarios de R inserten sus
scripts de R en un procedimiento almacenado de T-SQL, registren dicho procedimiento almacenado en una base
de datos y lo ejecuten desde un entorno de desarrollo de R. El paquete se incluye en SQL Server Machine
Learning Services y en SQL Server 2016 R Services.
Al convertir el código de R para que se ejecute en un solo procedimiento almacenado, puede hacer un uso más
eficaz de SQL Server R Services, que requiere que el script de R se incruste como parámetro en
sp_execute_external_script. El paquete sqlrutils le ayuda a generar este script de R incrustado y a establecer
correctamente los parámetros relacionados.
El paquete sqlrutils lleva a cabo estas tareas:
Guarda el script de T-SQL generado como una cadena dentro de una estructura de datos de R;
opcionalmente, genera un archivo .sql para el script de T-SQL, que puede editar o ejecutar para crear un
procedimiento almacenado; y
registra el procedimiento almacenado recién creado en la instancia de SQL Server desde el entorno de
desarrollo de R.
También puede ejecutar el procedimiento almacenado desde un entorno de R pasando los parámetros correctos
y procesando los resultados. Asimismo, puede usar el procedimiento almacenado de SQL Server para admitir
escenarios de integración de base de datos comunes, como ETL, el entrenamiento del modelo y la puntuación de
gran volumen.

NOTE
Si va a ejecutar el procedimiento almacenado desde un entorno de R llamando a la función executeStoredProcedure , debe
usar un proveedor ODBC 3.8, como ODBC Driver 13 para SQL Server.

Documentación de referencia completa


El paquete sqlrutils se distribuye en varios productos de Microsoft, pero el uso es el mismo
independientemente de si se obtiene el paquete en SQL Server o en otro producto. Dado que las funciones son
las mismas, la documentación de las funciones individuales de sqlrutils se publica en una sola ubicación en la
referencia del paquete sqlrutils. Si existe algún comportamiento específico del producto, las discrepancias se
anotarán en la página de ayuda de la función.

Lista de funciones
En la sección siguiente se proporciona un resumen de las funciones que se pueden llamar desde el paquete
sqlrutils para desarrollar un procedimiento almacenado que contenga un código de R incrustado. Para obtener
información detallada sobre los parámetros de cada método o función, consulte la Ayuda de R del paquete:
help(package="sqlrutils")
F UN C IÓ N DESC RIP C IÓ N

executeStoredProcedure Ejecuta un procedimiento almacenado de SQL.

getInputParameters Obtiene una lista de parámetros de entrada para el


procedimiento almacenado.

InputData Define el origen de los datos de SQL Server que se usarán


en la trama de datos de R. Debe especificar el nombre de la
trama de datos en la que almacenará los datos de entrada y
una consulta para obtener los datos o un valor
predeterminado. Solo se admiten las consultas SELECT
simples.

InputParameter Define un parámetro de entrada que se incrustará en el


script de T-SQL. Debe proporcionar el nombre del parámetro
y el tipo de datos de R.

OutputData Genera un objeto de datos intermedio que es necesario si la


función de R devuelve una lista que contiene data.frame. El
objeto OutputData se usa para almacenar el nombre de una
data.frame obtenida de la lista.

OutputParameter Genera un objeto de datos intermedio que es necesario si la


función de R devuelve una lista. El objeto OutputParameter
almacena el nombre y el tipo de datos de un único miembro
de la lista, suponiendo que dicho miembro no sea una trama
de datos.

registerStoredProcedure Registra el procedimiento almacenado en una base de datos.

setInputDataQuery Asigna una consulta a un parámetro de datos de entrada del


procedimiento almacenado.

setInputParameterValue Asigna un valor a un parámetro de entrada del


procedimiento almacenado.

StoredProcedure Objeto de procedimiento almacenado.

Cómo usar sqlrutils


Las funciones del paquete de sqlrutils deben ejecutarse en un equipo que tenga SQL Server Machine Learning
con R. Si está trabajando en una estación de trabajo cliente, establezca un contexto de cálculo remoto para que
la ejecución cambie a SQL Server. El flujo de trabajo para usar este paquete incluye los pasos siguientes:
Definir los parámetros de los procedimientos almacenados (entradas, salidas o ambos)
Generar y registrar el procedimiento almacenado
Ejecutar el procedimiento almacenado
En una sesión de R, cargue sqlrutils desde la línea de comandos escribiendo library(sqlrutils) .

NOTE
Puede cargar este paquete en un equipo que no tenga SQL Server (por ejemplo, en una instancia de cliente de R) si
cambia el contexto de cálculo a SQL Server y ejecuta el código en ese contexto de cálculo.
Definición de parámetros y entradas del procedimiento almacenado
StoredProcedure es el constructor principal empleado para crear el procedimiento almacenado. Este constructor
genera un objeto de procedimiento almacenado de SQL Server y, opcionalmente, crea un archivo de texto que
contiene una consulta que puede usarse para generar el procedimiento almacenado mediante un comando de
T-SQL.
Además, la función StoredProcedure también puede registrar el procedimiento almacenado en la instancia y la
base de datos especificadas.
Use el argumento func para especificar una función de R válida. Todas las variables que usa la función
deben definirse dentro de la función o deben proporcionarse como parámetros de entrada. Estos
parámetros pueden incluir una trama de datos como máximo.
La función de R debe devolver una trama de datos, una lista con nombre o un valor NULL. Si la función
devuelve una lista, esta puede contener una data.frame como máximo.
Utilice el argumento spName para especificar el nombre del procedimiento almacenado que quiere crear.
Puede pasar parámetros de salida y de entrada opcionales usando los objetos creados por las funciones
del asistente setInputData , setInputParameter y setOutputParameter .
Opcionalmente, use filePath para proporcionar la ruta de acceso y el nombre de un archivo .sql que
vaya a crear. Puede ejecutar este archivo en la instancia de SQL Server para generar el procedimiento
almacenado con T-SQL.
Para definir el servidor y la base de datos donde se guardará el procedimiento almacenado, use los
argumentos dbName y connectionString .
Para obtener una lista de los objetos InputData e InputParameter utilizados para crear un determinado
objeto StoredProcedure , llame a getInputParameters .
Para registrar el procedimiento almacenado en la base de datos especificada, use
registerStoredProcedure .

El objeto del procedimiento almacenado no suele tener datos o valores asociados, a menos que se haya
especificado un valor predeterminado. No se recuperan datos hasta que se ejecute el procedimiento
almacenado.
Especificación de entradas y ejecución
Utilice setInputDataQuery para asignar una consulta a un objeto InputParameter . Por ejemplo, si ha
creado un objeto de procedimiento almacenado en R, puede usar setInputDataQuery para pasar
argumentos a la función StoredProcedure con el objetivo de ejecutar el procedimiento almacenado con
las entradas deseadas.
Utilice setInputValue para asignar valores específicos a un parámetro almacenado como objeto
InputParameter . Luego, pase el objeto del parámetro y su asignación de valores a la función
StoredProcedure para ejecutar el procedimiento almacenado con los valores establecidos.
Utilice executeStoredProcedure para ejecutar un procedimiento almacenado definido como objeto
StoredProcedure . Llame a esta función solo cuando ejecute un procedimiento almacenado desde el
código de R. No la use si ejecuta el procedimiento almacenado desde SQL Server mediante T-SQL.

NOTE
La función executeStoredProcedure requiere un proveedor ODBC 3.8, como ODBC Driver 13 for SQL Server.
Consulte también
Cómo crear un procedimiento almacenado mediante sqlrutils
Notas de la versión de SQL Server 2019 (15.x)
14/07/2021 • 2 minutes to read

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


En este artículo se describen las limitaciones y los problemas conocidos de SQL Server 2019 (15.x). Para obtener
información relacionada, consulte:

Novedades de SQL Server 2019 (15.x)

SQL Server 2019 (15.x)


SQL Server 2019 (15.x) es la versión pública más reciente de SQL Server.
Los detalles completos sobre las licencias se encuentran en la carpeta License Terms del soporte de instalación.

Documentación
Problema e impacto en el cliente : la documentación de SQL Server se puede filtrar por versión. Use el
control situado en la parte superior izquierda de cada página de documentación para filtrar según sus
requisitos.

Número de compilación
El número de compilación RTM de SQL Server 2019 es 15.0.2000.5 .

Actualizaciones de servicio de SQL Server 2019


Para obtener información actual sobre las actualizaciones de servicio de SQL Server, consulte
https://support.microsoft.com/help/4518398.

La instalación de SQL Server puede presentar errores si está instalado


SSMS 18.x
Problema e impacto en el cliente : la instalación de SQL Server 2019 (15.x) presenta errores cuando
las instalaciones siguientes se hacen en este orden:
1. SQL Server Management Studio (SSMS) (versión 18.0, 18.1, 18.2 o 18.3) está instalado en el servidor.
2. La instalación de SQL Server 2019 (15.x) se intenta desde medios extraíbles. Por ejemplo, el soporte
de instalación es un DVD.
Solución alternativa :
1. Desinstale cualquier versión de SSMS anterior a SSMS 18.3.1.
2. Instale una versión más reciente de SSMS (18.3.1 o posterior). Para obtener la versión más reciente,
consulte Descargar SSMS.
3. Instale SQL Server 2019 (15.x) de la manera habitual.
Se aplica a : SQL Server 2019 (15.x)

Intercalaciones UTF-8
Problema e impacto en el cliente : No se pueden usar las intercalaciones habilitadas para UTF-8 con
las siguientes características:
Tablas OLTP en memoria
Always Encrypted con enclaves seguros (cuando no se usa enclaves seguros, Always Encrypted puede
usar UTF-8)

WARNING
Se produce un error al crear un bacpac de una base de datos que contiene columnas de tabla definidas como
CHAR o VARCHAR que usan más de 4000 bytes.

NOTE
Actualmente, no hay ninguna compatibilidad de interfaz de usuario para elegir intercalaciones habilitadas para
UTF-8 en Azure Data Studio o SQL Server Data Tools (SSDT). La versión 18, la más reciente de SQL Server
Management Studio (SSMS), permite elegir las intercalaciones habilitadas para UTF-8 en la interfaz de usuario.

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

El correo electrónico de notificación de Master Data Services contiene


un vínculo roto
Problema e impacto en el cliente : El correo electrónico de notificación de Master Data Services
(MDS) contiene un vínculo roto. El vínculo navega a una página que devuelve un error similar al mensaje
siguiente:
The view 'Index' or its master was not found or no view engine supports the searched locations.

Solución alternativa : Abra el portal de MDS y vaya al recurso manualmente.


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

Consulte también
Requisitos de hardware y software para instalar SQL Server

Machine Learning Services


En el caso de problemas de SQL Server Machine Learning Services, consulte Problemas conocidos de
SQL Server Machine Learning Services.

Obtener ayuda
UserVoice: ¿Tiene sugerencias para mejorar SQL Server?
Preguntas y respuestas de Microsoft (SQL Server)
Stack Exchange de DBA (etiqueta sql-server): Preguntas sobre SQL Server
Stack Overflow (etiqueta sql-server): Respuestas a preguntas de desarrollo de SQL
Reddit: Debate general sobre SQL Server
Información y términos de licencia de Microsoft SQL Server
Opciones de soporte técnico para usuarios profesionales
Contacto con Microsoft
Comentarios y ayuda adicional sobre SQL Server
Notas de la versión de SQL Server 2017
14/07/2021 • 7 minutes to read

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


En este artículo se describen las limitaciones y los problemas de SQL Server 2017. Para obtener información
relacionada, consulte:
Novedades de SQL Server 2017
Notas de la versión de SQL Server en Linux
Actualizaciones acumulativas de SQL Server 2017 para más información sobre la versión de la última
actualización acumulativa (CU)
Probar SQL Ser ver
Descargar SQL Server 2017
Poner en marcha una máquina virtual con SQL Server 2017

NOTE
Ya está disponible la versión preliminar de SQL Server 2019. Para más información, vea Novedades de SQL Server 2019.

SQL Server de 2017: versión de disponibilidad general (octubre de


2017)
Motor de base de datos
Problema e impacto en el cliente: después de la actualización, puede que el recurso compartido de
red FILESTREAM ya no esté disponible.
Solución alternativa: en primer lugar, reinicie el equipo y compruebe si el recurso compartido de red
FILESTREAM está disponible. Si el recurso compartido aún no está disponible, realice los siguientes
pasos:
1. En el Administrador de configuración de SQL Server, haga clic con el botón derecho en la instancia de
SQL Server y haga clic en Propiedades .
2. En la pestaña FILESTREAM , desactive Habilitar FILESTREAM para el acceso de transmisión
por secuencias de E/S de archivos y después haga clic en Aplicar .
3. Seleccione Habilitar FILESTREAM para el acceso de transmisión por secuencias de E/S de
archivos de nuevo con el nombre del recurso compartido original y haga clic en Aplicar .
Master Data Services (MDS )
Problema e impacto en el cliente: en la página de permisos de usuario, al conceder permisos al nivel
raíz de la vista de árbol de entidades, verá el siguiente error:
"The model permission cannot be saved. The object guid is not valid"

Solución alternativa:
Conceda permisos a los subnodos en la vista de árbol en lugar de a nivel de raíz.
Analysis Services
Problema e impacto en el cliente: los conectores de datos de los siguientes orígenes aún no están
disponibles para los modelos tabulares en el nivel de compatibilidad 1400.
Amazon Redshift
IBM Netezza
Impala
Solución alternativa: Ninguno.
Problema e impacto en el cliente: los modelos de DirectQuery con el nivel de compatibilidad 1400
con perspectivas pueden generar errores al consultar o detectar metadatos.
Solución alternativa: elimine las perspectivas y vuelva a realizar la implementación.
Herramientas
Problema e impacto en el cliente: cuando se ejecuta DReplay se produce un error con el siguiente
mensaje: "Se ha producido un error inesperado de DReplay".
Solución alternativa: Ninguno.

SQL Server 2017 Release Candidate (RC2: agosto de 2017)


No hay notas de la versión de SQL Server en Windows relacionadas con esta versión. Consulte Notas de la
versión de SQL Server 2017 en Linux.

SQL Server 2017 Release Candidate (RC1, julio de 2017)


SQL Server Integration Services (SSIS ) (RC1, julio de 2017)
Problema e impacto en el cliente: Se cambió el nombre del parámetro runincluster del
procedimiento almacenado [catálogo].[create_execution] a runinscaleout para mejorar la coherencia
y la legibilidad.
Solución alternativa: Si tiene scripts existentes para ejecutar paquetes en Escalabilidad horizontal, debe
cambiar el nombre del parámetro de runincluster a runinscaleout para que los scripts funcionen en RC1.
Problema e impacto en el cliente: SQL Server Management Studio (SSMS) 17.1 y versiones
anteriores no pueden desencadenar la ejecución de paquetes en Escalabilidad horizontal en RC1. El
mensaje de error es: " @runincluster no es un parámetro para el procedimiento create_execution ". Este
problema se corrige en la versión siguiente de SSMS, la versión 17.2. La versión 17.2 y versiones
posteriores de SSMS admiten el nuevo nombre de parámetro y la ejecución de paquetes en Escalabilidad
horizontal.
Solución alternativa: hasta que esté disponible la versión 17.2 de SSMS, siga estos pasos:
1. Utilice la versión existente de SSMS para generar el script de ejecución de paquetes.
2. En el script, cambie el nombre del parámetro runincluster a runinscaleout.
3. Ejecute el script.

SQL Server 2017 CTP 2.1 (mayo de 2017)


Documentación (CTP 2.1)
Problema e impacto en el cliente: La documentación de SQL Server 2017 (14.x) es limitada, y el
contenido está incluido en el conjunto de documentación de SQL Server 2016 (13.x). El contenido de los
artículos específico de SQL Server 2017 (14.x) se distinguirá con Se aplica a .
Problema e impacto en el cliente: No hay ningún contenido sin conexión disponible para SQL Server
2017 (14.x).
SQL Server Reporting Services (CTP 2.1)
Problema e impacto en el cliente: si tiene SQL Server Reporting Services y Power BI Report Server
en la misma máquina y desinstala uno de ellos, no podrá conectarse al servidor de informes que quede
con el Administrador de configuración de Report Server.
Solución alternativa: para solucionar este problema, debe realizar las siguientes operaciones después
de desinstalar uno de los servidores.
1. Inicie un símbolo del sistema en modo de administrador.
2. Vaya al directorio donde está instalado el servidor de informes restante.
Ubicación predeterminada de Power BI Report Server: C:\Program Files\Microsoft Power BI Report
Server
Ubicación predeterminada de SQL Server Reporting Services: C:\Program Files\Microsoft SQL
Server Reporting Services
3. Después, vaya a la siguiente carpeta, que puede ser SSRS o PBIRS , en función del servidor que
quede.
4. Vaya a la carpeta WMI.
5. Ejecute el siguiente comando:

regsvr32 /i ReportingServicesWMIProvider.dll

Si ve el error siguiente, ignórelo.

The module "ReportingServicesWMIProvider.dll" was loaded but the entry-point DLLInstall was
not found. Make sure that "ReportingServicesWMIProvider.dll" is a valid DLL or OCX file and
then try again.

TSqlLanguageService.msi (CTP 2.1)


Problema e impacto en el cliente: después de realizar la instalación en un equipo que tenga una
versión 2016 de TSqlLanguageService.msi (mediante el programa de instalación de SQL o como un
paquete redistribuible independiente), se quitan las versiones v13.* (SQL 2016) de
Microsoft.SqlServer.Management.SqlParser.dll y
Microsoft.SqlServer.Management.SystemMetadataProvider.dll. Cualquier aplicación que tenga una
dependencia de las versiones de 2016 de esos ensamblados deja de funcionar y genera un error similar
a: error: No se pudo cargar el archivo o ensamblado "Microsoft.SqlServer.Management.SqlParser,
Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" o una de sus dependencias. El
sistema no encuentra el archivo especificado.
Además, los intentos de volver a instalar una versión de 2016 de TSqlLanguageService.msi generan el
mensaje de error: Error en la instalación del servicio de lenguaje T-SQL de Microsoft SQL Server 2016
porque ya existe una versión superior en la máquina.
Solución alternativa: para solucionar este problema y corregir una aplicación que depende de la
versión v13 de los ensamblados, siga estos pasos:
1. Vaya a Agregar o quitar programas .
2. Busque Microsoft SQL Server 2019 T-SQL Language Service CTP2.1, haga clic en él con el botón
derecho y seleccione Desinstalar .
3. Después de quitar el componente, repare la aplicación que se interrumpe o vuelva a instalar la versión
adecuada de TSqlLanguageService.MSI.
Esta solución quitará la versión v14 de esos ensamblados, por lo que dejarán de funcionar todas las
aplicaciones que dependan de las versiones v14. Si se necesitan esos ensamblados, es necesario realizar
una instalación independiente sin ninguna instalación en paralelo de 2016.

SQL Server 2017 CTP 2.0 (abril 2017)


Documentación (CTP 2.0)
Problema e impacto en el cliente: La documentación de SQL Server 2017 (14.x) es limitada, y el
contenido está incluido en el conjunto de documentación de SQL Server 2016 (13.x). El contenido de los
artículos específico de SQL Server 2017 (14.x) se distinguirá con Se aplica a .
Problema e impacto en el cliente: No hay ningún contenido sin conexión disponible para SQL Server
2017 (14.x).
Grupos de disponibilidad AlwaysOn
Problema e impacto en el cliente: una instancia de SQL Server que hospeda una réplica secundaria del
grupo de disponibilidad se bloquea si la versión principal de SQL Server es inferior a la instancia que
hospeda la réplica principal. Afecta a las actualizaciones de todas las versiones compatibles de SQL Server
que hospedan grupos de disponibilidad para SQL Server SQL Server 2017 (14.x) CTP 2.0. Este problema se
produce en las siguientes circunstancias.

1. El usuario actualiza la réplica secundaria que hospeda la instancia de SQL Server de acuerdo con los
procedimientos recomendados.
2. Después de actualizar, se produce una conmutación por error y la réplica secundaria que se acaba de
actualizar se convierte en la principal antes de completar la actualización de todas las réplicas
secundarias del grupo de disponibilidad. La réplica principal anterior es ahora una réplica secundaria que
tiene una versión anterior a la principal.
3. El grupo de disponibilidad está en una configuración no admitida y las réplicas secundarias restantes
pueden ser vulnerables a los bloqueos.

Solución alternativa: conéctese a la instancia de SQL Server que hospeda la nueva réplica principal y
quite la réplica secundaria errónea de la configuración.

ALTER AVAILABILITY GROUP agName REMOVE REPLICA ON NODE instanceName;

La instancia de SQL Server que hospedaba la réplica secundaria se recupera.

Más información
notas de la versión de SQL Server Reporting Services.
Problemas conocidos de Machine Learning Services
Vínculos e información del Centro de actualizaciones de SQL Server sobre todas las versiones compatibles

Obtener ayuda
UserVoice: ¿Tiene sugerencias para mejorar SQL Server?
Preguntas y respuestas de Microsoft (SQL Server)
Stack Exchange de DBA (etiqueta sql-server): Preguntas sobre SQL Server
Stack Overflow (etiqueta sql-server): Respuestas a preguntas de desarrollo de SQL
Reddit: Debate general sobre SQL Server
Información y términos de licencia de Microsoft SQL Server
Opciones de soporte técnico para usuarios profesionales
Contacto con Microsoft
Comentarios y ayuda adicional sobre SQL Server

Contribuya a la documentación de SQL


¿Sabía que puede editar el contenido de SQL usted mismo? Si lo hace, no solo contribuirá a mejorar la
documentación, sino que también se le reconocerá como colaborador de la página.
Para más información, vea Cómo colaborar en la documentación de SQL Server.
Notas de la versión de SQL Server 2016
14/07/2021 • 21 minutes to read

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


En este artículo se describen las limitaciones y los problemas de las versiones de SQL Server 2016, incluidos los
Service Packs. Para obtener más información sobre las novedades, vea el artículo de novedades de SQL Server
2016.
Descargar SQL Server 2016 desde el Centro de evaluación
¿Tiene una cuenta de Azure? Si es así, vaya aquí para poner en marcha una máquina virtual con SQL
Server 2016 SP1 ya instalado.
Para obtener la versión más reciente de SQL Server Management Studio, vea Descarga de SQL Ser ver
Management Studio (SSMS) .

SQL Server 2016 Service Pack 2 (SP2)


SQL Server 2016 SP2 incluye todas las actualizaciones acumulativas publicadas después de 2016 SP1, hasta
e incluyendo CU8.
Descargar SQL Server 2016 Service Pack 2 (SP2)
Para obtener una lista completa de las actualizaciones, vea Información de versión de Service Pack 2 de SQL
Server de 2016.
La instalación de SQL Server 2016 SP2 puede requerir el reinicio después de la instalación. Como
procedimiento recomendado, se aconseja planear y llevar a cabo un reinicio después de la instalación de SQL
Server 2016 SP2.
Mejoras relacionadas con rendimiento y escala incluidas en SQL Server 2016 SP2.

C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Procedimiento de limpieza de bases de Las tablas de una base de datos de KB4040276


datos de distribución mejorado distribución demasiado grande
provocaron la situación de bloqueo e
interbloqueo. Un procedimiento de
limpieza mejorado aspira a eliminar
algunos de estos escenarios de
bloqueo o interbloqueo.

Limpieza de seguimiento de cambios Rendimiento y eficacia mejorados de KB4052129


limpieza del seguimiento de cambios
para tablas de Change Tracking.

Uso del tiempo de espera de CPU para Mejora el control de las solicitudes de KB4038419
cancelar la solicitud de Resource consulta mediante la cancelación de la
Governor solicitud, si se alcanzan los umbrales de
CPU para una solicitud. Este
comportamiento se habilita en la
marca de seguimiento 2422.
C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

SELECT INTO para crear la tabla de A partir de SQL Server 2016 SP2, la
destino en el grupo de archivos sintaxis T-SQL de SELECT INTO permite
cargar una tabla en un grupo de
archivos distinto del grupo de archivos
predeterminado del usuario mediante
la palabra clave ON en la sintaxis T-
SQL.

Punto de control indirecto mejorado El punto de control indirecto para KB4040276


para TempDB TempDB se mejoró para minimizar la
contención de bloqueos por
subproceso en DPLists. Esta mejora
permite que a carga de trabajo de
TempDB en SQL Server 2016 escale de
manera predeterminada si el valor del
punto de control indirecto es ON
(Activado) para TempDB.

Rendimiento mejorado de la copia de SQL Server 2016 SP2 optimiza la


seguridad de base de datos en manera en que se purga la E/S en
máquinas con memoria de gran curso durante la copia de seguridad, lo
tamaño que genera mejoras impresionantes en
el rendimiento de la copia de
seguridad para bases de datos
pequeñas y medianas. Hemos visto
una mejora 100 veces mayor cuando
se realizan copias de seguridad de base
de datos del sistema en una máquina
de 2 TB. Esta mejora del rendimiento
se va percibiendo cada vez menos a
medida que aumenta el tamaño de la
base de datos, ya que las páginas de
las que hay que hacer una copia de
seguridad y la E/S de la copia de
seguridad tardan más tiempo en
comparación con la iteración del grupo
de búferes. Este cambio ayudará a
aumentar el rendimiento de copia de
seguridad para los clientes que
hospedan varias bases de datos
pequeñas en servidores grandes de
alta gama con gran cantidad de
memoria.

Compatibilidad de compresión de SQL Server 2016 SP2 agrega


copia de seguridad de VDI para bases compatibilidad de VDI para permitir
de datos habilitadas para usar TDE que las soluciones de copia de
seguridad de VDI usen la compresión
para las bases de datos habilitadas
para usar TDE. Con esta mejora, se
introdujo un nuevo formato de copia
de seguridad para admitir la
compresión de copia de seguridad
para las bases de datos habilitadas
para usar TDE. El motor de SQL Server
controlará de manera transparente los
formatos nuevos y antiguos de copias
de seguridad para restaurarlas.
C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Carga dinámica de parámetros de Esta nueva mejora permite que los


perfil de agente de replicación parámetros de agentes de replicación
se carguen de manera dinámica sin
tener que reiniciar el agente. Este
cambio solo se aplica a los parámetros
de perfil de agente más usados
habitualmente.

Compatibilidad de la opción MAXDOP Esta mejora permite especificar la KB4041809


para la creación o actualización de opción MAXDOP para una instrucción
estadísticas CREATE/UPDATE de estadísticas, así
como garantizar que se use la
configuración MAXDOP correcta
cuando se actualicen las estadísticas
como parte de la creación o la
recompilación de todos los tipos de
índices (si existe la opción MAXDOP).

Actualización automática de En determinados escenarios, cuando se


estadísticas mejorada para las generaban diversos cambios de datos
estadísticas incrementales en varias particiones de una tabla de
manera que el contador de
modificaciones totales de las
estadísticas incrementadas supera el
umbral de las actualizaciones
automáticas, pero ninguna de las
particiones individuales supera este
umbral, la actualización de las
estadísticas podía retrasarse hasta que
se generaran muchas otras
modificaciones en la tabla. Este
comportamiento se corrigió en la
marca de seguimiento 11024.

Mejoras relacionadas con la compatibilidad y el diagnóstico incluidas en SQL Server 2016 SP2.

C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Compatibilidad total de DTC con las Las transacciones entre varias bases de
bases de datos de un grupo de datos que no forman parte de un
disponibilidad grupo de disponibilidad no se admiten
por el momento en SQL Server 2016.
Con SQL Server 2016 SP2,
introducimos la compatibilidad total de
transacciones distribuidas con las
bases de datos de grupos de
disponibilidad.
C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Actualización a la columna El valor de la columna


is_encrypted de sys.databases para is_encryptedcolumn en sys.databases
reflejar con precisión el estado de es 1 para TempDB, incluso después de
cifrado de TempDB desactivar el cifrado para todas las
bases de datos de usuario y reiniciar
SQL Server. El comportamiento
esperado sería que el valor de este
parámetro fuese 0, porque TempDB ya
no está cifrado en esta situación. A
partir de SQL Server 2016 SP2,
sys.databases.is_encrypted ahora
refleja con precisión el estado de
cifrado de TempDB.

Nuevas opciones de DBCC Con SQL Server 2016 SP2, DBCC


CLONEDATABASE para generar una CLONEDATABASE permite dos
copia de seguridad y un clon opciones nuevas: generar un clon
comprobado comprobado o un clon de copia de
seguridad. Cuando se crea una base de
datos de clonación con la opción WITH
VERIFY_CLONEDB, se crea un clon de
base de datos coherente y se
comprueba que Microsoft lo admitirá
para su uso en el entorno de
producción. Se ha introducido una
propiedad nueva para validar si el clon
es del tipo SELECT
DATABASEPROPERTYEX("clone_databas
e_name", "IsVerifiedClone")
comprobado. Cuando se crea un clon
con la opción BACKUP_CLONEDB, se
genera una copia de seguridad en la
misma carpeta en que está el archivo
de datos para facilitar que los clientes
muevan el clon a un servidor distinto o
lo envíen a Soporte al cliente de
Microsoft (CSS) para la solución de
problemas.

Compatibilidad de Service Broker (SSB) Comando DBCC CLONEDATABASE


con DBCC CLONEDATABASE mejorado para permitir el scripting de
objetos SSB.

Nueva DMV para supervisar el uso del En SQL Server 2016 SP2 se introduce
espacio de almacenamiento de una nueva DMV de
versiones de TempDB sys.dm_tran_version_store_space_usag
e para permitir la supervisión de
TempDB para el uso del
almacenamiento de versiones. Los
administradores de base de datos
ahora pueden planear de manera
proactiva el tamaño de TempDB en
función del requisito de uso de
almacenamiento de versiones por base
de datos, sin ninguna sobrecarga de
rendimiento cuando se ejecuta en los
servidores de producción.
C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Compatibilidad de volcados de En este momento, si los agentes de


memoria completos con los agentes replicación detectan una excepción no
de replicación controlada, la configuración
predeterminada es crear un
minivolcado de los síntomas de la
excepción. Esto dificulta mucho
solucionar los problemas de
excepciones no controladas. Con este
cambio, estamos incorporando una
nueva clave del Registro, la que
permitiría crear un volcado completo
para los agentes de replicación.

Mejora de los eventos extendidos para Antes, el xEvent read_only_rout_fail se


el error de enrutamiento de lectura de desencadenada si había una lista de
un grupo de disponibilidad enrutamiento, pero ninguno de los
servidores de esta lista estaba
disponible para las conexiones. SQL
Server 2016 SP2 incluye información
adicional para ayudar a solucionar el
problema y además se expande en los
puntos de código donde se
desencadena este xEvent.

Nueva DMV para supervisar el registro Se ha agregado una nueva DMV


de transacciones sys.dm_db_log_stats que devuelve
atributos de nivel de resumen e
información sobre los archivos de
registro de transacciones de bases de
datos.

Nueva DMV para supervisar la Una nueva DMV, sys.dm_db_log_info,


información de VLF se incluye en SQL Server 2016 SP2
para exponer la información de VLF
similar a DBCC LOGINFO para
supervisar, notificar y prevenir posibles
problemas de registro de transacciones
experimentados por los clientes.

Información del procesador en Se agregaron nuevas columnas a la


sys.dm_os_sys_info DMV sys.dm_os_sys_info para exponer
la información relacionada con el
procesador, como socket_count y
cores_per_numa.

Información modificada de extensiones Se agregó una nueva columna a


en sys.dm_db_file_space_usage sys.dm_db_file_space_usage para llevar
un seguimiento del número de
extensiones modificadas desde la
última copia de seguridad completa.

Información de segmentos en Se agregaron nuevas columnas a KB4051358


sys.dm_exec_query_stats sys.dm_exec_query_stats para llevar un
seguimiento del número de segmentos
del almacén de columnas que se
omitieron y leyeron, como
total_columnstore_segment_reads y
total_columnstore_segment_skips.
C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Establecimiento del nivel de Después de la instalación de Service


compatibilidad correcto para la base Pack, el nivel de compatibilidad de la
de datos de distribución base de datos de distribución cambia a
90. Esto se debe a una ruta de acceso
de código en el procedimiento
almacenado sp_vupgrade_replication.
Ahora el SP se ha modificado para
establecer el nivel de compatibilidad
correcto para la base de datos de
distribución.

Exposición de la última información de Se agregó una nueva opción de base


DBCC CHECKDB correcta conocida de datos para devolver mediante
programación la fecha de la última
ejecución correcta de DBCC CHECKDB.
Los usuarios ahora pueden consultar
DATABASEPROPERTYEX([base de
datos], "lastgoodcheckdbtime") para
obtener un valor único que represente
la fecha y hora de la última ejecución
correcta de DBCC CHECKDB en la base
de datos especificada.

Mejoras del XML del plan de Información sobre las estadísticas que
presentación se usaron para compilar el plan de
consulta, incluido el nombre de la
estadística, el contador de
modificaciones, el porcentaje de
muestreo y la última vez que se
actualizaron las estadísticas. Tenga en
cuenta que esto solo se agregó para
los modelos CE 120 y posteriores. Por
ejemplo, no es compatible con CE 70.

Se ha agregado un nuevo atributo,


EstimateRowsWithoutRowgoal, al XML
del plan de presentación si el
optimizador de consultas usa la lógica
de "objetivo de filas".

Nuevos atributos de runtime,


UdfCpuTime y UdfElapsedTime, en el
XLM del plan de presentación real para
llevar un seguimiento del tiempo
empleado en las funciones escalares
definidas por el usuario (UDF).

Se ha agregado el tipo de espera


CXPACKET a la lista de las 10
principales esperas posibles en el XML
del plan de presentación real: la
ejecución de consultas en paralelo
habitualmente implica esperas de
CXPACKET, pero este tipo de espera no
se informó en el XML del plan de
presentación real.
C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Se extendió la advertencia de
desbordamiento en el runtime para
informar el número de páginas escritas
en TempDB durante un
desbordamiento del operador de
paralelismo.

Compatibilidad de la replicación con La replicación ahora es compatible en


bases de datos con intercalaciones de las bases de datos que usan la
caracteres complementarios intercalación de caracteres
complementarios.

Control adecuado de Service Broker En la implementación actual, cuando


con conmutación por error del grupo Service Broker está habilitado en bases
de disponibilidad de datos de un grupo de
disponibilidad, durante una
conmutación por error del grupo de
disponibilidad se dejan abiertas todas
las conexiones de Service Broker
originadas en la réplica principal. Esta
mejora apunta a cerrar todas estas
conexiones abiertas durante una
conmutación por error del grupo de
disponibilidad.

Mejora en la solución de problemas mediante la incorporación de una


para las esperas de paralelismo nueva espera CXCONSUMER.

Coherencia mejorada entre las DMV La DMV


para la misma información sys.dm_exec_session_wait_stats ahora
lleva un seguimiento de las esperas
CXPACKET y CXCONSUMER de
manera coherente con la DMV
sys.dm_os_wait_stats.

Mejora en la solución de problemas de Un nuevo evento extendido


los interbloqueos de paralelismo entre exchange_spill para informar el número
consultas de páginas escritas en TempDB
durante un desbordamiento del
operador de paralelismo, en el nombre
del campo worktable_physical_writes
del xEvent.

Las columnas de desbordamiento en


las DMV sys.dm_exec_query_stats,
sys.dm_exec_procedure_stats y
sys.dm_exec_trigger_stats (such as
total_spills) ahora también incluyen los
datos desbordados por los operadores
de paralelismo.

Se mejoró el gráfico de interbloqueo


de XML para los escenarios de
interbloqueo de paralelismo, donde se
agregaron más atributos al recurso
exchangeEvent.
C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Se mejoró el gráfico de interbloqueo


de XML para los interbloqueos que
implican los operadores de modo por
lotes, con más atributos agregados al
recurso SyncPoint.

Recarga dinámica de algunos En la implementación actual de los


parámetros de perfil de agente de agentes de replicación, cualquier
replicación cambio en el parámetro del perfil del
agente requiere que se detenga y
reinicie el agente. Esta mejora permite
que los parámetros se recarguen de
manera dinámica sin tener que reiniciar
el agente de replicación.

SQL Server 2016 Service Pack 1 (SP1)


SQL Server 2016 SP1 incluye todas las actualizaciones acumulativas hasta SQL Server 2016 RTM CU3,
incluida la actualización de seguridad MS16-136. Contiene una acumulación de soluciones proporcionadas en
las actualizaciones acumulativas de SQL Server 2016 e incluye la actualización acumulativa más reciente (CU3)
y la actualización de seguridad MS16-136, publicada el 8 de noviembre de 2016.
Están disponibles las siguientes características en las ediciones Standard, Web, Express y Base de datos local de
SQL Server SP1 (salvo que se indique lo contrario):
Always Encrypted
Captura de datos modificada (no disponible en Express)
columnstore
Compresión
Enmascaramiento de datos dinámicos
Auditoría específica
OLTP en memoria (no disponible en Base de datos local)
Varios contenedores de secuencias de archivos (no disponibles en Base de datos local)
Creación de particiones
PolyBase
Seguridad de nivel de fila
En la siguiente tabla se resumen las mejoras principales proporcionadas en SQL Server 2016 SP1.

C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Inserción masiva en montones con La marca de seguimiento 715 permite Migrating SAP workloads to SQL
TABLOCK automático en TF 715 el bloqueo de tabla para operaciones Server just got 2.5x faster (La
de carga masiva en un montón sin migración de las cargas de trabajo de
índices no agrupados. SAP a SQL Server ahora es 2,5 veces
más rápida)

CREATE OR ALTER Implementación de objetos (por Blog del Motor de base de datos de
ejemplo, procedimientos almacenados, SQL Server
desencadenadores, funciones definidas
por el usuario o vistas).
C A RA C T ERÍST IC A DESC RIP C IÓ N M Á S IN F O RM A C IÓ N

Compatibilidad con DROP TABLE para Compatibilidad con DROP TABLE DDL KB 3170123
la replicación para la replicación para que se puedan
quitar artículos de replicación.

Firma del controlador FileStream RsFx El controlador Filestream RsFx se firma Migrating SAP workloads to SQL
y se certifica mediante el portal del Server just got 2.5x faster (La
panel del centro de desarrolladores de migración de las cargas de trabajo de
hardware de Windows (portal de SAP a SQL Server ahora es 2,5 veces
desarrollo), que permite instalar el más rápida)
controlador Filestream RsFx de SQL
Server 2016 SP1 en Windows Server
2016 o en Windows 10 sin ningún
problema.

LPIM en una cuenta de servicio SQL: Permite a los DBA identificar mediante Developers Choice: Programmatically
identificación mediante programación programación si el privilegio Bloquear identify LPIM and IFI privileges in SQL
páginas en la memoria (LPIM) está en Server (Elección de los desarrolladores:
vigor en el momento de iniciar el identificar mediante programación
servicio. privilegios LPIM e IFI en SQL Server)

Limpieza de seguimiento de cambios El nuevo procedimiento almacenado KB 3173157


manual limpia la tabla interna de seguimiento
de cambios a petición.

Cambios del operador INSERT..SELECT Nuevo operador INSERT paralelo en Equipo de asesoramiento al cliente de
paralelo en las tablas temporales operaciones INSERT..SELECT. SQL Server
locales

Showplan XML Se ha ampliado el diagnóstico, que KB 3190761


incluye la advertencia de concesiones y
la memoria máxima habilitada para
una consulta, marcas de seguimiento
habilitadas y la exposición de otros
datos de diagnóstico.

Memoria de la clase de Mejore el procesamiento de Blog del Motor de base de datos de


almacenamiento transacciones usando la memoria de la SQL Server
clase de almacenamiento en Windows
Server 2016, lo que permite acelerar
los tiempos de confirmación de
transacciones por órdenes de la
magnitud.

USE HINT Use la opción de consulta Developers Choice: USE HINT query
OPTION(USE HINT('<option>')) para hints (Elección de los desarrolladores:
modificar el comportamiento del sugerencias de consulta USE HINT)
optimizador de consultas usando
sugerencias de nivel de consulta
admitidas. A diferencia de
QUERYTRACEON, la opción USE HINT
no requiere ningún privilegio de
administrador del sistema.

Adiciones de XEvent Las nuevas capacidades de diagnóstico Eventos extendidos


de rendimiento y de XEvents mejoran
la resolución de problemas de latencia.

Además, tenga en cuenta las revisiones siguientes:


A partir de los comentarios de los DBA y de la comunidad de SQL, a partir de SQL 2016 SP1, lo mensajes de
registro de Hekaton se han reducido al mínimo.
Revise las nuevas marcas de seguimiento.
Las versiones completas de las bases de datos de ejemplo de WideWorldImporters ya funcionan con las
ediciones Standard y Express a partir de SQL Server 2016 SP1 y están disponibles en Github. En el ejemplo
no es necesario efectuar ningún cambio. Las copias de seguridad de base de datos creadas en RTM para la
edición Enterprise funcionan con las ediciones Standard y Express en SP1.
La instalación de SQL Server 2016 SP1 puede requerir el reinicio después de la instalación. Como
procedimiento recomendado, se aconseja planear y llevar a cabo un reinicio después de la instalación de SQL
Server 2016 SP1.
Páginas de descarga y más información
Descargar Service Pack 1 para Microsoft SQL Server 2016
SQL Server 2016 Service Pack 1 (SP1) publicado
Información de lanzamiento de SQL Server 2016 Service Pack 1
Centro de actualización de SQL Server para obtener vínculos e información de todas las versiones
compatibles, incluidos los Service Packs de SQL Server

SQL Server 2016 Release: Disponibilidad general


Motor de base de datos (disponibilidad general)
Stretch Database (disponibilidad general)
Almacén de consultas (disponibilidad general)
Documentación del producto (disponibilidad general)

Requisito de instalación de revisión (GA )


Problema e impacto en el cliente: Microsoft ha identificado un problema que afecta a los archivos binarios
del Runtime de Microsoft VC++ 2013 que SQL Server 2016 instala como requisito previo. Hay disponible una
actualización para corregir este problema. Si esta actualización de los archivos binarios en tiempo de ejecución
de VC++ no se instala, puede que SQL Server 2016 experimente problemas de estabilidad en determinados
escenarios. Antes de instalar SQL Server 2016, compruebe si el equipo necesita la revisión descrita en KB
3164398. La revisión también está incluida en el paquete de actualizaciones acumulativas 1 (CU1) para SQL
Server 2016 RTM.
Resolución: Pruebe una de estas soluciones:
Instale la actualización de Visual C++ 2013 y del paquete redistribuible de Visual C++ (KB 3138367). KB
es el método preferido. Puede instalarla antes o después de instalar SQL Server 2016.
Si SQL Server 2016 ya está instalado, haga lo siguiente en este orden:
1. Descargue el archivo vcredist_*exe que proceda.
2. Detenga el servicio SQL Server de todas las instancias del motor de base de datos.
3. Instale KB 3138367 .
4. Reinicie el equipo.
Instale la actualización crítica para requisitos previos de MSVCRT de SQL Server 2016 (KB 3164398).
Si se decanta por KB 3164398 , puede instalar durante la instalación de SQL Server, a través de Microsoft
Update o desde el Centro de descarga de Microsoft.
Durante la instalación de SQL Ser ver 2016: Si el equipo donde se ejecuta el programa de
instalación de SQL Server tiene acceso a Internet, el programa de instalación de SQL Server busca
la actualización como parte de la instalación global de SQL Server. Si acepta la actualización, el
programa de instalación descarga y actualiza los archivos binarios durante la instalación.
Microsoft Update: La actualización está disponible en Microsoft Update como una actualización
crítica de SQL Server 2016 no de seguridad. Si la instalación se realiza a través de Microsoft
Update (esto es, después de SQL Server 2016), es necesario reiniciar el servidor después de
actualizar.
Centro de descarga: Por último, la actualización está disponible en el Centro de descarga de
Microsoft. Puede descargar el software correspondiente a la actualización e instalarlo en los
servidores cuando tengan instalado SQL Server 2016.
Stretch Database
Problema con un carácter específico de un nombre de tabla o de base de datos
Problema e impacto en el cliente: Al intentar habilitar Stretch Database en una base de datos o una tabla se
produce un error. El problema se produce cuando el nombre del objeto incluye un carácter que se trata como
otro distinto al convertir de minúsculas a mayúsculas. Un ejemplo de un carácter que provoca este problema es
"ƒ" (combinación de teclas: ALT+159).
Solución alternativa: Si quiere habilitar Stretch Database en la base de datos o en la tabla, la única opción es
cambiar el nombre del objeto y quitar el carácter problemático.
Problema con un índice en el que se usa la palabra clave INCLUDE
Problema e impacto en el cliente: Se produce un error al intentar habilitar Stretch Database en una tabla
que tiene un índice en el que se usa la palabra clave INCLUDE para incluir más columnas.
Solución alternativa: Quite el índice en el que se usa la palabra clave INCLUDE, habilite Stretch Database en la
tabla y luego vuelva a crear el índice. Si lo hace, procure respetar las prácticas y directivas de mantenimiento de
su organización para evitar o minimizar cualquier impacto en los usuarios de la tabla afectada.
Query Store
Problema con la limpieza automática de los datos en las ediciones distintas de Enterprise y Developer
Problema e impacto en el cliente: Error de la limpieza automática de datos en las ediciones distintas a
Enterprise y Developer. Por lo tanto, si los datos no se purgan de forma manual, el espacio usado por el Almacén
de consultas crece con el tiempo hasta que se alcanza el límite configurado. Si no se soluciona, este problema
también rellena el espacio en disco asignado a los registros de errores, ya que cada intento de ejecutar una
limpieza crea un archivo de volcado. El período de activación de limpieza depende de la frecuencia de la carga
de trabajo, pero no es superior a 15 minutos.
Solución alternativa: Si tiene previsto usar Almacén de consultas en ediciones distintas a Enterprise y
Developer, tiene que desactivar expresamente las directivas de limpieza. Esto se puede hacer desde SQL Server
Management Studio (página Propiedades de la base de datos) o a través de este script de Transact-SQL:
ALTER DATABASE <database name> SET QUERY_STORE (OPERATION_MODE = READ_WRITE, CLEANUP_POLICY =
(STALE_QUERY_THRESHOLD_DAYS = 0), SIZE_BASED_CLEANUP_MODE = OFF)

Considere también las opciones de limpieza manual para impedir que el almacén de consultas pase a modo de
solo lectura. Por ejemplo, ejecute la siguiente consulta para limpiar periódicamente el espacio de datos
completo:
ALTER DATABASE <database name> SET QUERY_STORE CLEAR

De igual modo, ejecute regularmente los siguientes procedimientos almacenados de almacén de consultas para
limpiar las estadísticas de tiempo de ejecución o consultas o planes específicos:
sp_query_store_reset_exec_stats
sp_query_store_remove_plan

sp_query_store_remove_query

Documentación del producto (disponibilidad general)


Problema e impacto en el cliente: Aún no hay disponible ninguna versión descargable de la documentación
de SQL Server 2016. Cuando use el Administrador de bibliotecas de ayuda para intentar instalar contenido
desde Internet , verá la documentación de SQL Server 2012 y SQL Server 2014, pero ninguna opción para la
documentación de SQL Server 2016.
Solución alternativa: Pruebe una de las siguientes soluciones:

Elegir Ayuda en línea o local para configurar la ayuda para "Quiero usar la Ayuda en línea".
Instalar contenido desde Internet y descargar el contenido de SQL Server 2014.
Ayuda F1: Por diseño, cuando se presiona F1 en SQL Server Management Studio, la versión en línea del
artículo de F1 Ayuda se muestra en el explorador. El problema es que aparece la ayuda basada en el explorador
incluso si se ha configurado e instalado la ayuda local.
Actualización de contenido: En SQL Server Management Studio y Visual Studio, la aplicación Visor de Ayuda
puede dejar de responder mientras se agrega la documentación. Para solucionar este problema, realice los
siguientes pasos. Para obtener más información sobre este problema, vea Visual Studio Help Viewer freezes(El
Visor de Ayuda de Visual Studio se bloquea).
Abra el archivo %LOCALAPPDATA%\Microsoft\HelpViewer2.2\HlpViewer_SSMS16_en-US.settings |
HlpViewer_VisualStudio14_en-US.settings en el Bloc de notas y cambie la fecha en el siguiente código a una
fecha en el futuro.

Cache LastRefreshed="12/31/2017 00:00:00"

Información adicional
Instalación de SQL Server 2016
Vínculos e información del Centro de actualizaciones de SQL Server sobre todas las versiones compatibles

Obtener ayuda
UserVoice: ¿Tiene sugerencias para mejorar SQL Server?
Preguntas y respuestas de Microsoft (SQL Server)
Stack Exchange de DBA (etiqueta sql-server): Preguntas sobre SQL Server
Stack Overflow (etiqueta sql-server): Respuestas a preguntas de desarrollo de SQL
Reddit: Debate general sobre SQL Server
Información y términos de licencia de Microsoft SQL Server
Opciones de soporte técnico para usuarios profesionales
Contacto con Microsoft
Comentarios y ayuda adicional sobre SQL Server

Contribuya a la documentación de SQL


¿Sabía que puede editar el contenido de SQL usted mismo? Si lo hace, no solo contribuirá a mejorar la
documentación, sino que también se le reconocerá como colaborador de la página.
Para más información, vea Cómo colaborar en la documentación de SQL Server.
SQL Server 2014 Release Notes
14/07/2021 • 22 minutes to read

SE APLICA A: SQL Server Azure SQL Database Azure Synapse Analytics Almacenamiento de
datos paralelos
En este artículo se describen problemas conocidos relacionados con las versiones de SQL Server 2014 (12.x),
incluidos los Service Packs relacionados.

SQL Server 2014 Service Pack 2 (SP2)


SQL Server 2014 SP2 contiene acumulaciones de las revisiones publicadas de SQL Server 2014 SP1 CU7.
Contiene mejoras que se centran en el rendimiento, la escalabilidad y el diagnóstico, basadas en los comentarios
de los clientes y de la comunidad de SQL.
Mejoras de rendimiento y de escalabilidad en SP2
C A RA C T ERÍST IC A DESC RIP C IÓ N PA RA O BT EN ER M Á S IN F O RM A C IÓ N

Particionamiento automático de Soft Puede configurar automáticamente Soft-NUMA (SQL Server)


NUMA Soft NUMA en los sistemas que
notifican ocho o más CPU por nodo
NUMA.

Buffer Pool Extension Permite al grupo de búferes de SQL Extensión del grupo de búferes
Server escalar más allá de 8 TB.

Escalado de objetos de memoria Particiones dinámicas de objeto de Escalado de objetos de memoria


dinámica memoria según el número de nodos y dinámica
de núcleos. Esta mejora elimina la
necesidad de la marca de seguimiento
8048 después de SQL 2014 SP2.

Sugerencia MAXDOP para los Esta mejora es útil para ejecutar DBCC Sugerencias (Transact-SQL): consulta
comandos DBCC CHECK* CHECKDB con una opción MAXDOP
que no sea el valor sp_configure.

Mejora en el bloqueo por subproceso Elimina la necesidad de efectuar un SOS_RWLock Redesign


de SOS_RWLock bloqueo por subproceso en
SOS_RWLock y aplica técnicas similares
a OLTP en memoria.

Implementación nativa espacial Mejora significativa en el rendimiento Mejoras en el rendimiento espacial en


de las consultas espaciales. SQL Server 2012 y 2014

Mejoras de compatibilidad y diagnóstico en SP2


C A RA C T ERÍST IC A DESC RIP C IÓ N PA RA O BT EN ER M Á S IN F O RM A C IÓ N
C A RA C T ERÍST IC A DESC RIP C IÓ N PA RA O BT EN ER M Á S IN F O RM A C IÓ N

Registro del tiempo de espera de Se ha incorporado una nueva Diagnóstico mejorado del tiempo de
AlwaysON capacidad de registro para los espera de concesión de los grupos de
mensajes de tiempo de espera de disponibilidad AlwaysOn
concesión para que se registre el
tiempo actual y los tiempos de
renovación previstos.

XEvents y contadores de rendimiento Nuevos contadores de rendimiento y KB 3107172 y KB 3107400


AlwaysOn XEvents AlwaysOn para mejorar el
diagnóstico al solucionar problemas de
latencia con AlwaysOn.

Limpieza de seguimiento de cambios Un nuevo procedimiento almacenado KB 3173157


sp_flush_CT_internal_table_on_demand
limpia las tablas internas de
seguimiento de cambios a petición.

Clonación de bases de datos Puede usar el nuevo comando DBCC KB 3177838


para solucionar problemas de bases de
datos de producción existentes
clonando el esquema, los metadatos y
las estadísticas, pero sin los datos. Las
bases de datos clonadas no están
diseñadas para usarse en entornos de
producción.

Adiciones de DMF La nueva DMF KB 3170114


sys.dm_db_incremental_stats_propertie
s expone información por cada
partición para las estadísticas
incrementales.

DMF para recuperar el búfer de Ahora está disponible una nueva DMF sys.dm_exec_input_buffer
entrada en SQL Server para recuperar el búfer de entrada de
una sesión o solicitud
(sys.dm_exec_input_buffer). Es
funcionalmente equivalente a DBCC
INPUTBUFFER.

Compatibilidad con DROP DDL para la Permite quitar de la base de datos y de KB 3170123
replicación la publicación una tabla que se incluye
como un artículo en una publicación
de replicación transaccional.

Privilegio de IFI en la cuenta de Determina si la inicialización Inicialización de archivos de base de


servicio de SQL instantánea de archivos (IFI) está en datos
vigor al iniciar el servicio SQL Server.

Concesiones de memoria: gestión de Puede aprovechar las sugerencias de KB 3107401


problemas diagnóstico durante la ejecución de
consultas restringiendo sus
concesiones de memoria para evitar la
contención de la memoria.
C A RA C T ERÍST IC A DESC RIP C IÓ N PA RA O BT EN ER M Á S IN F O RM A C IÓ N

Generación de perfiles ligera por cada Optimiza la recopilación de estadísticas Developers Choice: Query progress -
operador en la ejecución de consultas de ejecución de consultas por cada anytime, anywhere (Elección de los
operador (por ejemplo, el número real desarrolladores: progreso de la
de filas). consulta, en cualquier momento y en
cualquier lugar)

Diagnóstico de la ejecución de El número real de filas leídas ahora se KB 3107397


consultas notifica en los planes de ejecución de
consultas para mejorar la resolución de
problemas del rendimiento de las
consultas.

Diagnóstico de la ejecución de Las advertencias hash y las Mejora del diagnóstico del
consultas para el desbordamiento de advertencias de ordenación ahora desbordamiento de temptdb
tempdb tienen más columnas para realizar el
seguimiento de estadísticas de E/S
física, la memoria usada y las filas
afectadas.

Compatibilidad con tempdb Puede usar un nuevo mensaje de KB 2963384


registro de errores para el número de
archivos de tempdb y los cambios del
archivo de datos de tempdb al iniciar el
servidor.

Además, tenga en cuenta las revisiones siguientes:


La pila de llamadas de XEvent ahora incluye nombres de módulos y desplazamientos en lugar de direcciones
absolutas.
Mejor correlación entre DMV y XE de diagnóstico: query_hash y query_plan_hash se usan para identificar
una consulta de forma exclusiva. DMV los define como varbinary (8), mientras que XEvent los define como
UINT64. Puesto que SQL Server no tiene "bigint sin signo", la conversión no siempre funciona. Esta mejora
presenta nuevas columnas de filtro o acción XEvent equivalentes a query_hash y query_plan_hash, salvo si se
definen como INT64. Esta revisión permite correlacionar las consultas entre XE y las DMV.
Compatibilidad con UTF-8 en BULK INSERT y BCP: se ha incorporado compatibilidad con la exportación e
importación de datos codificados en el juego de caracteres UTF-8 en BULK INSERT y BCP.
Páginas de descarga y más información para SP2
Descargar Service Pack 2 para Microsoft SQL Server 2014
SQL Server 2014 Service Pack 2 ya está disponible
SQL Server 2012 SP2 Express
Feature Pack de SQL Server 2014 SP2
Generador de informes de SQL Server 2014 SP2
Complemento de SQL Server 2014 SP2 Reporting Services para Microsoft Sharepoint
Estadísticas de lenguaje semántico de SQL Server 2014 SP2
Información de lanzamiento de SQL Server 2014 Service Pack 2

SQL Server 2014 Service Pack 1 (SP1)


SQL Server 2014 SP1 contiene revisiones proporcionadas en SQL Server 2014 CU 1 hasta CU 5 (incluido), así
como una acumulación de revisiones enviadas a SQL Server 2012 SP2.
NOTE
Si su instancia de SQL Server tiene habilitado el catálogo de SSISDB y recibe un error de instalación al actualizar a SP1,
siga las instrucciones descritas para este problema en Error 912 o 3417 al instalar SQL Server 2014 SP1.

Páginas de descarga y más información para SP1


Descargar Service Pack 1 para Microsoft SQL Server 2014
Se ha publicado SQL Server 2014 Service Pack 1: actualización
Microsoft SQL Server 2014 SP1 Express
Feature Pack de Microsoft SQL Server 2014 SP1

Antes de instalar SQL Server 2014 RTM


Limitaciones y restricciones de SQL Server 2014 RTM
1. NO se admite la actualización de SQL Server 2014 CTP 1 a SQL Server 2014 RTM.
2. NO se admite la instalación de SQL Server 2014 CTP 1 en paralelo con SQL Server 2014 RTM.
3. NO se admite adjuntar o restaurar una base de datos de SQL Server 2014 CTP 1 a SQL Server 2014 RTM.
Solución alternativa: Ninguno.
Actualizar de SQL Server 2014 CTP 2 a SQL Server RTM
La actualización es totalmente compatible. En concreto, puede:
1. Adjuntar una base de datos de SQL Server 2014 CTP 2 a una instancia de SQL Server 2014 RTM.
2. Restaurar una copia de seguridad de una base de datos realizada en SQL Server 2014 CTP 2 en una instancia
de SQL Server 2014 RTM.
3. Actualizar en contexto a SQL Server 2014 RTM.
4. Realizar una actualización gradual a SQL Server 2014 RTM. Es necesario cambiar al modo de conmutación
por error manual antes de iniciar la actualización gradual. Vea Actualizar servidores de un grupo de
disponibilidad con una pérdida de datos y un tiempo de inactividad mínimos para obtener más detalles.
5. Los datos recopilados por los conjuntos de recopilación de rendimiento de transacción instalados en SQL
Server 2014 CTP 2 no se pueden ver mediante SQL Server Management Studio en SQL Server 2014 RTM y
viceversa.
Degradar de SQL Server 2014 RTM a SQL Server 2014 CTP 2
No se admite esta acción.
Solución alternativa: no hay ninguna solución alternativa para la degradación. Se recomienda hacer una
copia de seguridad de la base de datos antes de actualizarse a SQL Server 2014 RTM.
Versión incorrecta del cliente StreamInsight en SQL Server 2014 media/ISO/CAB
En la ruta de acceso de siguiente de SQL Server media/ISO/CAB (StreamInsight\<Architecture>\<Language
ID>) se encuentra la versión incorrecta de StreamInsight.msi y StreamInsightClient.msi.
Solución alternativa: descargue e instale la versión correcta del paquete de descarga de SQL Server 2014
Feature Pack.
Documentación del producto RTM
El contenido del Generador de informes y de PowerPivot no está disponible en algunos idiomas.
Problema: el contenido del Generador de informes no está disponible en los idiomas siguientes:
Griego (el-GR)
Noruego (Bokmal) (nb-NO)
Finés (fi-FI)
Danés (DA-DK)
En SQL Server 2012 (11.x), este contenido estaba disponible en un archivo CHM que se incluía con el producto y
estaba disponible en estos idiomas. Los archivos CHM ya no se incluyen con el producto y el contenido del
Generador de informes solo está disponible en MSDN. MSDN no admite estos idiomas. El Generador de
informes también se quitó de TechNet y ya no está disponible en esos idiomas admitidos.
Solución alternativa: Ninguno.
Problema: el contenido de Power Pivot no está disponible en los idiomas siguientes:
Griego (el-GR)
Noruego (Bokmal) (nb-NO)
Finés (fi-FI)
Danés (DA-DK)
Checo (cs-CZ)
Húngaro (hu-HU)
Holandés (Países Bajos) (nl-NL)
Polaco (pl-PL)
Sueco (sv-SE)
Turco (tr-TR)
Portugués (Portugal) (pt-PT)
En SQL Server 2012 (11.x), este contenido estaba disponible en TechNet y en estos idiomas. Este contenido se
quitó de TechNet y ya no está disponible en estos idiomas admitidos.
Solución alternativa: Ninguno.
Motor de base de datos (RTM )
Cambios realizados en la edición Standard de SQL Server 2014 RTM
SQL Server 2014 Standard incluye los cambios siguientes:
La característica de extensión del grupo de búferes permite usar el tamaño máximo de hasta 4 veces la
memoria configurada.
La memoria máxima se ha ampliado de 64 a 128 GB.
El Asesor de optimización para memoria marca las restricciones DEFAULT como incompatibles
Problema: el Asesor de optimización para memoria de SQL Server Management Studio marca todas las
restricciones DEFAULT como incompatibles. En una tabla optimizada para memoria no se admiten todas las
restricciones DEFAULT; el asesor no distingue entre los tipos admitidos y no admitidos de las restricciones
DEFAULT. Entre las restricciones DEFAULT admitidas se incluyen todas las constantes, expresiones y funciones
integradas que se admiten dentro de los procedimientos almacenados compilados de forma nativa. Para ver la
lista de funciones admitidas en los procedimientos almacenados compilados de forma nativa, vea
Construcciones admitidas en procedimientos almacenados compilados de forma nativa.
Solución alternativa: si quiere usar el asesor para identificar bloqueadores, omita las restricciones DEFAULT
compatibles. Para usar el Asesor de optimización para memoria con el fin de migrar tablas que tienen
restricciones DEFAULT compatibles, pero no otros bloqueadores, siga estos pasos:
1. Quite la restricción DEFAULT de la definición de tabla.
2. Use el asesor para generar un script de migración en la tabla.
3. Vuelva a agregar las restricciones DEFAULT al script de migración.
4. Ejecute el script de migración.
El mensaje informativo "acceso a archivo denegado" se ha notificado incorrectamente como un error en el registro de errores de
SQL Server 2014
Problema: al reiniciar un servidor que tiene bases de datos que contienen tablas optimizadas para memoria,
podría ver el siguiente tipo de mensajes de error en el registro de errores de SQL Server 2014:

[ERROR]Unable to delete file C:\Program Files\Microsoft SQL


Server\....old.dll. This error may be due to a previous failure to unload
memory-optimized table DLLs.

Este mensaje es solo informativo y no se requiere ninguna acción por parte del usuario.
Solución alternativa: Ninguno. Este mensaje es meramente informativo.
Los detalles de índices que faltan indican incorrectamente columnas incluidas para la tabla optimizada para memoria
Problema: si SQL Server 2014 detecta que falta un índice para una consulta en una tabla optimizada para
memoria, notificará un índice que falta en SHOWPLAN_XML, así como en las DMV de índices que faltan, como
sys.dm_db_missing_index_details. En algunos casos, los detalles de los índices que faltan contendrán columnas
incluidas. Como todas las columnas se incluyen implícitamente con todos los índices de las tablas optimizadas
para memoria, no se permite especificar explícitamente columnas incluidas con índices optimizados para
memoria.
Solución alternativa: no especifique la cláusula INCLUDE con índices en tablas optimizadas para memoria.
Los detalles de índices que faltan omiten índices que faltan si un índice hash existe pero no es adecuado para la consulta
Problema: si tiene un índice HASH en columnas de una tabla optimizada para memoria a la que se hace
referencia en una consulta, pero el índice no se puede usar para la consulta, SQL Server 2014 no notificará
siempre un índice que falta en SHOWPLAN_XML y en la DMV sys.dm_db_missing_index_details.
En concreto, si una consulta contiene predicados de igualdad que implican un subconjunto de las columnas de
clave de índice o si contiene predicados de desigualdad que implican las columnas de clave de índice, el índice
HASH no se puede usar tal cual y se necesitaría otro índice para ejecutar la consulta de forma eficaz.
Solución alternativa: en caso de que esté usando índices hash, inspeccione las consultas y los planes de
consulta para determinar si las consultas pueden beneficiarse de operaciones Index Seek en un subconjunto de
la clave de índice, o de operaciones Index Seek en predicados de desigualdad. Si necesita buscar en un
subconjunto de la clave de índice, use un índice NO CLÚSTER, o use un índice HASH solamente en las columnas
en las que necesita buscar. Si necesita buscar en un predicado de desigualdad, use un índice NO CLÚSTER en
lugar de HASH.
Error al usar una tabla optimizada para memoria y una variable de tabla optimizada para memoria en la misma consulta, si la
opción de base de datos READ_COMMITTED_SNAPSHOT está establecida en ON
Problema: si la opción de base de datos READ_COMMITTED_SNAPSHOT está establecida en ON, y tiene acceso
a una tabla optimizada para memoria y a una variable de tabla optimizada para memoria en la misma
instrucción en un contexto que no sea de transacción de usuario, puede aparecer este mensaje de error:

Msg 41359
A query that accesses memory optimized tables using the READ COMMITTED
isolation level, cannot access disk based tables when the database option
READ_COMMITTED_SNAPSHOT is set to ON. Provide a supported isolation level
for the memory optimized table using a table hint, such as WITH (SNAPSHOT).

Solución alternativa: use la sugerencia de tabla WITH (SNAPSHOT) con la variable de tabla, o establezca la
opción de base de datos MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT en ON, con la siguiente instrucción:

ALTER DATABASE CURRENT


SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON
Las estadísticas de ejecución de procedimientos y consultas para los procedimientos almacenados compilados de forma nativa
registran el tiempo de trabajo en múltiplos de 1.000
Problema: después de habilitar la recopilación de estadísticas de ejecución de procedimientos o de consultas
para los procedimientos almacenados compilados de forma nativa mediante sp_xtp_control_proc_exec_stats o
sp_xtp_control_query_exec_stats, verá que *_worker_time se muestra en múltiplos de 1000 en las DMV
sys.dm_exec_procedure_stats y sys.dm_exec_query_stats. Las ejecuciones de consultas que tienen un tiempo de
trabajo inferior a 500 microsegundos se notificarán con un valor de worker_time de 0.
Solución alternativa: Ninguno. No se fie del valor de worker_time notificado en las DMV de estadísticas de
ejecución para las consultas de ejecución breve en procedimientos almacenados compilados de forma nativa.
Error con SHOWPLAN_XML para los procedimientos almacenados compilados de forma nativa que contienen expresiones largas
Problema: si un procedimiento almacenado compilado de forma nativa contiene una expresión larga, al
obtener SHOWPLAN_XML para el procedimiento, ya sea con la opción T-SQL establecida en SET
SHOWPLAN_XML ON o mediante la opción "Mostrar plan de ejecución estimado" de Management Studio,
puede aparecer el error siguiente:

Msg 41322. MAT/PIT export/import encountered a failure for memory


optimized table or natively compiled stored procedure with object ID
278292051 in database ID 6. The error code was
0xc00cee81.

Solución alternativa: Hay dos soluciones alternativas:


1. Agregar paréntesis a la expresión, de manera similar al ejemplo siguiente:
En lugar de:

SELECT @v0 + @v1 + @v2 + ... + @v199

Escritura:

SELECT((@v0 + ... + @v49) + (@v50 + ... + @v99)) + ((@v100 + ... + @v149) + (@v150 + ... + @v199))

2. Crear un segundo procedimiento con una expresión ligeramente simplificada, para el plan de
presentación: la forma general del plan debe ser al misma. Por ejemplo, en lugar de:

SELECT @v0 +@v1 +@v2 +...+@v199

Escritura:

SELECT @v0 +@v1

El uso de un parámetro o una variable de cadena con DATEPART y funciones relacionadas en un procedimiento almacenado
compilado de forma nativa produce un error
Problema: al usar un procedimiento almacenado que se ha compilado de forma nativa y que usa un parámetro
de cadena o una variable con las funciones integradas DATEPART, DAY, MONTH y YEAR, se muestra un mensaje
de error que indica que no se admite datetimeoffset con procedimientos almacenados que se han compilado de
forma nativa.
Solución alternativa: asigne el parámetro o la variable de cadena a una nueva variable de tipo datetime2 y
use esa variable en la función DATEPART, DAY, MONTH o YEAR. Por ejemplo:
DECLARE @d datetime2 = @string
DATEPART(weekday, @d)

El Asistente de compilación nativa marca incorrectamente las cláusulas DELETE FROM


Problema: el Asistente de compilación nativo marca incorrectamente las cláusulas DELETE FROM dentro de un
procedimiento almacenado como incompatibles.
Solución alternativa: Ninguno.
el registro mediante SSMS agrega metadatos de DAC con identificadores de instancia no coincidentes
Problema: al registrar o eliminar un paquete de aplicación de capa de datos (.dacpac) mediante SQL Server
Management Studio, las tablas sysdac* no se actualizan correctamente para que un usuario pueda consultar el
historial de dacpac de la base de datos. Los valores de instance_id en sysdac_history_internal y
sysdac_instances_internal no coinciden para permitir una combinación.
Solución alternativa: este problema se corrige con la redistribución del Feature Pack de Data-Tier Application
Framework. Una vez aplicada la actualización, todas las nuevas entradas del historial usarán el valor mostrado
para instance_id en la tabla sysdac_instances_internal.
Si ya tiene el problema con valores no coincidentes de instance_id, la única manera de corregir los valores no
coincidentes es conectarse al servidor como un usuario con privilegios para escribir en la base de datos MSDB y
actualizar los valores de instance_id para que coincidan. Si recibe varios eventos de registro y anulación de
registro de la misma base de datos, puede que necesite ver la fecha y hora para ver qué registros coinciden con
el valor actual de instance_id.
1. Conéctese al servidor en SQL Server Management Studio con un inicio de sesión que tenga permisos de
actualización en MSDB.
2. Abra una consulta nueva usando la base de datos MSDB.
3. Ejecute esta consulta para ver todas las instancias dac activas. Busque la instancia que quiere corregir y
anote el valor de instance_id:
select * from sysdac_instances_internal
4. Ejecute esta consulta para ver todas las entradas del historial:
select * from sysdac_history_internal
5. Identifique las filas que deben corresponder a la instancia que está corrigiendo.
6. Actualice el valor de sysdac_history_internal.instance_id al valor que anotó en el paso 3 (de la tabla
sysdac_instances_internal):
updatesysdac_history_internal set instance_id = "<value from step 3>" where <expression that
matches the rows you want to update>
Reporting Services (RTM )
El servidor de informes en modo nativo de SQL Server 2012 Reporting Services no puede ejecutarse en paralelo con los
componentes de SharePoint de SQL Server 2014 Reporting Services
Problema: el servicio de Windows de Reporting Services en modo nativo "SQL Server Reporting Services"
(ReportingServicesService.exe) no se puede iniciar si hay componentes de SharePoint de SQL Server 2014
(12.x) Reporting Services instalados en el mismo servidor.
Solución alternativa: desinstale los componentes de SharePoint de SQL Server 2014 (12.x) Reporting
Services y reinicie el servicio de Windows Microsoft SQL Server 2012 Reporting Services.
Más información:
SQL Server 2012 (11.x) Reporting Services en modo nativo no se puede ejecutar en paralelo bajo ninguna de
las siguientes condiciones:
Complemento de SQL Server 2014 (12.x) Reporting Services para productos de SharePoint
Servicio compartido de SharePoint de SQL Server 2014 (12.x) Reporting Services
La instalación en paralelo impide el inicio del servicio de Windows en modo nativo SQL Server 2012 (11.x)
Reporting Services. Aparecerán mensajes de error, similares a los que se muestran aquí, en el registro de
eventos de Windows:

Log Name: Application


Source: Report Server (<SQL instance ID>)
Event ID: 117
Task Category: Startup/Shutdown
Level: Error
Keywords: Classic
Description: The report server database is an invalid version.

Log Name: Application


Source: Report Server (<SQL instance ID>)
Event ID: 107
Task Category: Management
Level: Error
Keywords: Classic
Description: Report Server (DENALI) cannot connect to the report server database.

Para obtener más información, vea Sugerencias, trucos y solución de problemas de SQL Server 2014 Reporting
Services.
Orden necesario para actualizar una granja de servidores de SharePoint de varios nodos a SQL Server 2014 Reporting Services
Problema: se produce un error en la representación de informes en una granja de varios nodos si las instancias
del servicio compartido de SharePoint de Reporting Services se actualizan antes que todas las instancias del
Complemento de Reporting Services para productos de SharePoint.
Solución alternativa: en una granja de SharePoint de varios nodos:
1. Actualice primero todas las instancias del Complemento de Reporting Services para productos de
SharePoint.
2. Actualice después todas las instancias del servicio compartido de SharePoint de Reporting Services .
Para obtener más información, vea Sugerencias, trucos y solución de problemas de SQL Server 2014 Reporting
Services.
SQL Server 2014 RTM en máquinas virtuales de Azure
El Asistente para agregar réplicas de Azure devuelve un error al configurar un agente de escucha del grupo de disponibilidad en
Azure
Problema: Si un grupo de disponibilidad tiene un agente de escucha, el Asistente para crear réplicas de Azure
devolverá un error al intentar configurar el agente de escucha en Azure.
Este problema se debe a que los agentes de escucha de los grupos de disponibilidad necesitan que se asigne
una dirección IP a cada subred que hospede réplicas de grupos de disponibilidad, incluida la subred de Azure.
Solución alternativa:
1. En la página Agente de escucha, asigne una dirección IP estática disponible en la subred de Azure que
hospedará la réplica del grupo de disponibilidad al Agente de escucha del grupo de disponibilidad.
Esta solución alternativa permitirá que el asistente agregue la réplica a Azure.
2. Cuando se complete el asistente, necesitará finalizar la configuración del agente de escucha en Azure
como se describe en Configuración del agente de escucha de los Grupos de disponibilidad AlwaysOn en
Azure.
Analysis Services (RTM )
Se debe descargar, instalar y registrar MSOLAP.5 para una nueva granja de SharePoint 2010 configurada con SQL Server 2014
Problema:
En SharePoint 2010 se debe descargar, instalar y registrar MSOLAP.5 para una nueva granja de SharePoint
2013 configurada con SQL Server 2014, configurada con una implementación de SQL Server 2014 RTM,
libros PowerPivot no se pueden conectar a los modelos de datos porque el proveedor al que se hace
referencia en la cadena de conexión no está instalado.
Solución alternativa:
1. Descargue el proveedor MSOLAP.5 desde SQL Server 2012 SP1 (11.0.3x) Feature Pack. Instale el
proveedor en los servidores de aplicaciones que ejecutan Excel Services. Para obtener más información,
vea la sección "Proveedor OLE DB de Microsoft Analysis Services para Microsoft SQL Server 2012 SP1"
de Microsoft SQL Server 2012 SP1 Feature Pack.
2. Registre MSOLAP.5 como proveedor de confianza con Servicios de Excel de SharePoint. Para obtener más
información, vea Agregar MSOLAP.5 como proveedor de datos de confianza en Excel Services.
Más información:
SQL Server 2014 (12.x) incluye MSOLAP.6. SQL Server 2012 (11.x) y SQL Server 2014 (12.x)Power Pivot
usan MSOLAP.5. Si MSOLAP.5 no está instalado en el equipo en el que se ejecuta Servicios de Excel, Servicios
de Excel no puede cargar los modelos de datos.
Se debe descargar, instalar y registrar MSOLAP.5 para una nueva granja de SharePoint 2013 configurada con SQL Server 2014
Problema:
En una granja de SharePoint 2013 configurada con una implementación de SQL Server 2014 (12.x) , libros
de Excel que hacen referencia al proveedor MSOLAP.5 no se pueden conectar a los modelos de datos
tabulares porque el proveedor al que se hace referencia en la cadena de conexión no está instalado.
Solución alternativa:
1. Descargue el proveedor MSOLAP.5 desde SQL Server 2012 SP1 (11.0.3x) Feature Pack. Instale el
proveedor en los servidores de aplicaciones que ejecutan Excel Services. Para obtener más información,
vea la sección "Proveedor OLE DB de Microsoft Analysis Services para Microsoft SQL Server 2012 SP1"
de Microsoft SQL Server 2012 SP1 Feature Pack.
2. Registre MSOLAP.5 como proveedor de confianza con Servicios de Excel de SharePoint. Para obtener más
información, vea Agregar MSOLAP.5 como proveedor de datos de confianza en Excel Services.
Más información:
SQL Server 2014 (12.x) incluye MSOLAP.6. Pero los libros PowerPivot de SQL Server 2014 usan MSOLAP.5.
Si MSOLAP.5 no está instalado en el equipo en el que se ejecuta Servicios de Excel, Servicios de Excel no
puede cargar los modelos de datos.
Programaciones de actualización de datos dañadas (RTM)
Problema:
Actualiza una programación de actualización y la programación resulta dañada y no se puede usar.
Solución alternativa:
1. En Microsoft Excel, desactive las propiedades avanzadas personalizadas. Vea la sección "Solución alternativa"
del siguiente artículo KB 2927748 de Knowledge Base.
Más información:
Si la longitud serializada de la programación de actualización es menor que la de la programación original, al
actualizar una programación de actualización de datos para un libro, el tamaño de búfer no se actualiza
correctamente y la nueva información de programación se combina con la información de programación
anterior, dando lugar a una programación dañada.
Data Quality Services (RTM )
No hay compatibilidad entre versiones con Data Quality Services de Master Data Services
Problema: Los siguientes escenarios no se admiten:
Master Data Services 2012 hospedado en una base de datos de motor de base de datos de SQL Server
en SQL Server 2012 con Data Quality Services 2012 instalado.
Master Data Services 2012 hospedado en una base de datos de motor de base de datos de SQL Server
en SQL Server 2014 con Data Quality Services 2014 instalado.
Solución alternativa: use la misma versión de Master Data Services que la base de datos del motor de base
de datos y Data Quality Services.
Problemas del Asesor de actualizaciones (RTM )
El Asesor de actualizaciones de SQL Server 2014 notifica problemas irrelevantes de actualización de SQL Server Reporting Services
Problema: el Asesor de actualizaciones de SQL Server (SSUA) incluido con SQL Server 2014 notifica
incorrectamente varios errores al analizar el servidor de SQL Server Reporting Services.
Solución alternativa: este problema se ha corregido en el Asesor de actualizaciones de SQL Server incluido
en el SQL Server 2014 Feature Pack para SSUA.
El Asesor de actualizaciones de SQL Server 2014 notifica un error al analizar el servidor de SQL Server Integration Services
Problema: el Asesor de actualizaciones de SQL Server (SSUA) incluido con SQL Server 2014 notifica un error al
analizar el servidor de SQL Server Integration Services. El error que se muestra al usuario es:

The installed version of Integration Services does not support Upgrade Advisor.
The assembly information is "Microsoft.SqlServer.ManagedDTS, Version=11.0.0.0,
Culture=neutral, PublicKeyToken=89845dcd8080cc91

Solución alternativa: este problema se ha corregido en el Asesor de actualizaciones de SQL Server incluido
en el SQL Server 2014 Feature Pack para SSUA.

Obtener ayuda
UserVoice: ¿Tiene sugerencias para mejorar SQL Server?
Preguntas y respuestas de Microsoft (SQL Server)
Stack Exchange de DBA (etiqueta sql-server): Preguntas sobre SQL Server
Stack Overflow (etiqueta sql-server): Respuestas a preguntas de desarrollo de SQL
Reddit: Debate general sobre SQL Server
Información y términos de licencia de Microsoft SQL Server
Opciones de soporte técnico para usuarios profesionales
Contacto con Microsoft
Comentarios y ayuda adicional sobre SQL Server
Problemas conocidos de Python y R en Machine
Learning Services de SQL Server
14/07/2021 • 36 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?

En este artículo se describen las limitaciones o los problemas conocidos de los componentes de Python y R que
se proporcionan en SQL Server Machine Learning Services y SQL Server 2016 R Services.

Problemas de instalación y configuración


Para ver una descripción de los procesos relacionados con la instalación y la configuración iniciales, consulte
Instalación de SQL Server Machine Learning Services. Contiene información sobre las actualizaciones, la
instalación en paralelo y la instalación de nuevos componentes de R o Python.
1. Resultados incoherentes en los cálculos de MKL debido a la falta de una variable de entorno
Se aplica a: Binarios de R_SERVER 9.0, 9.1, 9.2 o 9.3.
R_SERVER usa la biblioteca Intel Math Kernel Library (MKL). En el caso de los cálculos que involucran a MKL,
pueden producirse resultados incoherentes si el sistema no tiene una variable de entorno.
Establezca la variable de entorno 'MKL_CBWR'=AUTO para garantizar la reproducibilidad numérica condicional en
R_SERVER. Para obtener más información, consulte Introduction to Conditional Numerical Reproducibility (CNR)
[Introducción a la reproducibilidad numérica condicional (CNR)].
Solución alternativa
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 "Valor de la variable" en "AUTO".
3. Reinicie R_SERVER. En SQL Server, puede reiniciar el servicio SQL Server Launchpad.

NOTE
Si está ejecutando SQL Server 2019 en Linux, edite o cree .bash_profile en el directorio principal de usuario y agregue la
línea export MKL_CBWR="AUTO" . Ejecute este archivo escribiendo source .bash_profile en un símbolo del sistema de
Bash. Para reiniciar R_SERVER, escriba Sys.getenv() en el símbolo del sistema de R.

2. Error de tiempo de ejecución del script de R (regresión de SQL Server 2017 CU5-CU7)
En el caso de SQL Server 2017, en las actualizaciones acumulativas de la 5 a la 7, hay una regresión en el
archivo rlauncher.config en que la ruta de acceso del archivo de directorio temporal incluye un espacio. Esta
regresión se ha corregido en CU8.
El error que verá al ejecutar el script de R incluye los siguientes mensajes:

No se puede comunicar con el tiempo de ejecución para el script "R". Compruebe los requisitos del tiempo
de ejecución "R".
Mensaje(s) STDERR del script externo:
Error irrecuperable: no se puede crear "R_TempDir"

Solución alternativa
Instale CU8 cuando esté disponible. Como alternativa, puede volver a crear rlauncher.config si ejecuta
registerrext con uninstall/install en un símbolo del sistema con privilegios elevados.

<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /uninstall /sqlbinnpath:


<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>

<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /install /sqlbinnpath:


<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>

En el ejemplo siguiente se muestran los comandos con la instancia predeterminada "MSSQL14.MSSQLSERVER"


instalada en "C:\Archivos de programa\Microsoft SQL Server":

"C:\Program Files\Microsoft SQL


Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /uninstall
/sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0
/instance:MSSQLSERVER

"C:\Program Files\Microsoft SQL


Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /install
/sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0
/instance:MSSQLSERVER

3. No se pueden instalar las características de aprendizaje automático de SQL Server en un controlador de


dominio
Si intenta instalar SQL Server 2016 R Services o SQL Server Machine Learning Services en un controlador de
dominio, se producirán los siguientes errores en la instalación:

Error durante el proceso de instalación de la característica


Cannot find group with identity (No se encuentra el grupo con la identidad)
Component error code: 0x80131509 (Código de error del componente: 0x80131509)

El error se produce porque, en un controlador de dominio, el servicio no puede crear las 20 cuentas locales
necesarias para ejecutar el aprendizaje automático. Como regla general, no se recomienda instalar SQL Server
en un controlador de dominio. Para obtener más información, vea el boletín de soporte técnico 2032911.
4. Instalar la versión de servicio más reciente para garantizar la compatibilidad con Microsoft R Client
Si instala la versión más reciente de Microsoft R Client y la usa para ejecutar R en SQL Server en un contexto de
proceso remoto, podría aparecer un error como el siguiente:

You are running version 9.x.x of Microsoft R Client on your computer, which is incompatible with Microsoft R
Server version 8.x.x. Download and install a compatible version. (Está ejecutando la versión 9.0.0 del Cliente
de Microsoft R en el equipo, que es incompatible con Microsoft R Server versión 8.0.3. Descargue e instale
una versión compatible).

SQL Server 2016 requiere que las bibliotecas de R del cliente coincidan exactamente con las bibliotecas de R del
servidor. La restricción se ha quitado para versiones posteriores a R Server 9.0.1. No obstante, si se encuentra
con este error, compruebe la versión de las bibliotecas de R que usan el cliente y el servidor; si es necesario,
actualice el cliente para que coincida con la versión del servidor.
La versión de R que se instala con SQL Server R Services se actualiza siempre que se instala una versión del
servicio SQL Server. Para garantizar que siempre tenga las versiones más actualizadas de los componentes de R,
asegúrese de instalar todos los Service Pack.
Para garantizar la compatibilidad con Microsoft R Client 9.0.0, instale las actualizaciones que se describen en
este artículo de soporte técnico.
Para evitar problemas con los paquetes de R, también puede actualizar la versión de las bibliotecas de R que
están instaladas en el servidor si cambia el contrato de servicio para que use la directiva de soporte técnico del
ciclo de vida moderno, como se describe en la siguiente sección. Cuando lo haga, la versión de R que se instala
con SQL Server se actualiza en la misma programación que se usa para las actualizaciones de Machine Learning
Server (anteriormente Microsoft R Server).
Se aplica a: SQL Server 2016 R Services, con la versión 9.0.0 o anterior de R Server
5. Faltan componentes de R en la configuración de CU3
Un número limitado de máquinas virtuales de Azure se ha aprovisionado sin los archivos de instalación de R
que deben incluirse con SQL Server. El problema se presenta en las máquinas virtuales aprovisionadas en el
período comprendido entre el 05-01-2018 y el 23-01-2018. Este problema también podría afectar a las
instalaciones locales si ha aplicado la actualización de CU3 para SQL Server 2017 durante el período del 05-01-
2018 al 23-01-2018.
Se ha proporcionado una versión de servicio que incluye la versión correcta de los archivos de instalación de R.
Paquete de actualización acumulativa 3 para SQL Server 2017 KB4052987.
Para instalar los componentes y reparar SQL Server 2017 CU3, debe desinstalar CU3 y reinstalar la versión
actualizada:
1. Descargue el archivo de instalación de CU3 actualizado, que incluye los instaladores de R.
2. Desinstale CU3. En el panel de control, busque Desinstalar una actualización y después seleccione
"Revisión 3015 para SQL Server 2017 (KB4052987) (64 bits)". Continúe con los pasos de desinstalación.
3. Reinstale la actualización de CU3; para ello, haga doble clic en la actualización de KB4052987 que acaba de
descargar: SQLServer2017-KB4052987-x64.exe . Siga las instrucciones de instalación.
6. No se pueden instalar los componentes de Python en instalaciones sin conexión de
SQL Server 2017 CTP 2.0 o versiones posteriores
Si instala una versión preliminar de SQL Server 2017 en un equipo sin acceso a Internet, es posible que el
instalador no muestre la página que solicita la ubicación de los componentes de Python descargados. En tal
caso, puede instalar la característica Machine Learning Services, pero no los componentes de Python.
Este problema se ha corregido en la versión de lanzamiento. Además, esta limitación no afecta a los
componentes de R.
Se aplica a: SQL Server 2017 con Python
Advertencia de versión incompatible al conectarse a una versión anterior de SQL Server R Services desde un
cliente mediante SQL Server 2017 (14.x)
Al ejecutar el código de R en un contexto de proceso de SQL Server 2016, es posible que vea el siguiente error:
You are running version 9.0.0 of Microsoft R Client on your computer, which is incompatible with the
Microsoft R Server version 8.0.3. Download and install a compatible version. (Está ejecutando la versión
9.0.0 del Cliente de Microsoft R en el equipo, que es incompatible con Microsoft R Server versión 8.0.3.
Descargue e instale una versión compatible).

Este mensaje se muestra si alguna de las dos indicaciones siguientes es verdadera:


Ha instalado R Server (independiente) en un equipo cliente mediante el asistente para la instalación de SQL
Server 2017 (14.x).
Ha instalado Microsoft R Server mediante el instalador de Windows independiente.
Para asegurarse de que el servidor y el cliente usan la misma versión, es posible que tenga que usar un enlace,
compatible con Microsoft R Server 9.0 y versiones posteriores, para actualizar los componentes de R en
instancias de SQL Server 2016. Para determinar si la compatibilidad con las actualizaciones está disponible para
su versión de R Services, consulte Actualización de una instancia de R Services con SqlBindR.exe.
Se aplica a: SQL Server 2016 R Services, con la versión 9.0.0 o anterior de R Server
7. La instalación de las versiones de servicio de SQL Server 2016 podrían producir un error al instalar
versiones más recientes de los componentes de R
Al instalar una actualización acumulativa o un Service Pack para SQL Server 2016 en un equipo que no está
conectado a Internet, el asistente para la instalación podría no mostrar el mensaje que le permite actualizar los
componentes de R mediante los archivos CAB descargados. Este error suele ocurrir si se han instalado varios
componentes con el motor de base de datos.
Como solución alternativa, puede instalar la versión de servicio mediante la línea de comandos. Para ello,
especifique el argumento MRCACHEDIRECTORY tal como se muestra en este ejemplo, en el que se instalan
actualizaciones de CU1:
C:\<path to installation media>\SQLServer2016-KB3164674-x64.exe /Action=Patch /IACCEPTROPENLICENSETERMS
/MRCACHEDIRECTORY=<path to CU1 CAB files>

Para obtener los instaladores más recientes, consulte Instalación de componentes de aprendizaje automático sin
acceso a Internet.
Se aplica a: SQL Server 2016 R Services, con la versión 9.0.0 o anterior de R Server
8. No se puede iniciar el servicio Launchpad si la versión es diferente de la versión de R
Si instala SQL Server R Services independientemente del motor de base de datos y las versiones de compilación
son diferentes, es posible que vea el siguiente error en el registro de eventos del sistema:

El servicio SQL Server Launchpad no pudo iniciarse debido al siguiente error: El servicio no respondió a la
petición de inicio o control de manera oportuna.

Por ejemplo, este error podría producirse si instala el motor de base de datos mediante la versión de
lanzamiento, aplica una revisión para actualizar el motor de base de datos y, después, agrega la característica R
Services mediante la versión de lanzamiento.
Para evitar este problema, use una utilidad como el administrador de archivos para comparar las versiones de
Launchpad.exe con la versión de los archivos binarios de SQL, como sqldk.dll. Todos los componentes deben
tener el mismo número de versión. Si actualiza un componente, asegúrese de aplicar la misma actualización a
los demás componentes instalados.
Busque Launchpad en la carpeta Binn de la instancia. Por ejemplo, en una instalación predeterminada de
SQL Server 2016, la ruta de acceso podría ser
C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn .
9. Un firewall bloquea los contextos de proceso remoto en instancias de SQL Server que se ejecutan en
máquinas virtuales de Azure
Si ha instalado SQL Server en una máquina virtual de Azure, es posible que no pueda usar contextos de proceso
que requieran el uso del área de trabajo de la máquina virtual. El motivo es que, de forma predeterminada, el
firewall de las máquinas virtuales de Azure incluye una regla que bloquea el acceso a la red de las cuentas de
usuario locales de R.
Como alternativa, en la máquina virtual de Azure, abra Firewall de Windows con seguridad avanzada ,
seleccione Reglas de salida y deshabilite la regla siguiente: Block network access for R local user
accounts in SQL Ser ver instance MSSQLSERVER (Bloquear el acceso a la red de las cuentas de usuario
locales de R en la instancia de SQL Server MSSQLSERVER). También puede dejar la regla habilitada, pero
cambiar la propiedad de seguridad a Allow if secure (Permitir si es seguro).
10. Autenticación implícita en SQLEXPRESS
Al ejecutar trabajos de R desde una estación de trabajo de ciencia de datos remota mediante la autenticación
integrada de Windows, SQL Server usa la autenticación implícita para generar las llamadas ODBC locales que
solicite el script. Pero esta característica no funcionaba en la compilación RTM de SQL Server Express Edition.
Para corregir el problema, se recomienda que actualice a una versión de servicio posterior.
Si no puede actualizar, use un inicio de sesión de SQL como solución alternativa para ejecutar los trabajos de R
remotos que requieran llamadas ODBC insertadas.
Se aplica a: SQL Server 2016 R Services Express Edition
11. Límites de rendimiento cuando se llama a bibliotecas que usa SQL Server desde otras herramientas
Es posible llamar a las bibliotecas de aprendizaje automático que están instaladas para SQL Server desde una
aplicación externa, como RGui. Esta puede ser la manera más cómoda de realizar ciertas tareas, como instalar
nuevos paquetes o ejecutar pruebas ad hoc en ejemplos de código muy cortos. No obstante, fuera de
SQL Server, el rendimiento podría ser limitado.
Por ejemplo, incluso si usa SQL Server Enterprise Edition, R se ejecuta en modo de subproceso único si ejecuta
el código de R mediante herramientas externas. Para conseguir las ventajas de rendimiento en SQL Server, inicie
una conexión de SQL Server y use sp_execute_external_script para llamar al tiempo de ejecución del script
externo.
Como regla general, evite llamar a las bibliotecas de aprendizaje automático que usa SQL Server desde
herramientas externas. Si necesita depurar código de R o Python, suele ser más fácil hacerlo fuera de
SQL Server. Para obtener las mismas bibliotecas que están en SQL Server, puede instalar Microsoft R Client o
SQL Server 2017 Machine Learning Server (independiente).
12. SQL Server Data Tools no admite los permisos que requieren los scripts externos
Al usar Visual Studio o SQL Server Data Tools para publicar un proyecto de base de datos, si alguna entidad de
seguridad tiene permisos específicos para la ejecución de scripts externos, podría recibir un error similar al
siguiente:

TSQL Model: Error detected when reverse engineering the database. The permission was not recognized and
was not imported (Modelo TSQL: Error detectado al usar técnicas de ingeniería inversa en la base de datos.
El permiso no se ha reconocido y no se ha importado).

Actualmente, el modelo DACPAC no admite los permisos que usan R Services o Machine Learning Services,
como GRANT ANY EXTERNAL SCRIPT o EXECUTE ANY EXTERNAL SCRIPT. Este problema se corregirá en una
versión posterior.
Como solución alternativa, ejecute las instrucciones GRANT adicionales en un script posterior a la
implementación.
13. La ejecución de scripts externos está limitada debido a los valores predeterminados de gobernanza de
recursos
En Enterprise Edition, puede usar grupos de recursos para administrar procesos de script externos. En algunas
compilaciones anteriores, la memoria máxima que se podía asignar a los procesos de R era del 20 %. Por lo
tanto, si el servidor tenía 32 GB de RAM, los ejecutables de R (RTerm.exe y BxlServer.exe) podían usar un máximo
de 6,4 GB en una única solicitud.
Si encuentra limitaciones de recursos, compruebe el valor predeterminado actual. Si el 20 % no es suficiente,
consulte la documentación de SQL Server para informarse sobre cómo cambiar este valor.
Se aplica a: SQL Server 2016 R Services, Enterprise Edition
14. Error al usar sp_execute_external_script sin libc++.so en Linux
En un equipo Linux limpio que no tiene libc++.so instalado, se produce un error al ejecutar una consulta
sp_execute_external_script (SPEES) con Java o un lenguaje externo porque commonlauncher.so no puede cargar
libc++.so .

Por ejemplo:

EXECUTE sp_execute_external_script @language = N'Java'


, @script = N'JavaTestPackage.PassThrough'
, @parallel = 0
, @input_data_1 = N'select 1'
WITH RESULT SETS((col1 INT NOT NULL))
GO

Se produce un error con un mensaje similar al siguiente:

Msg 39012, Level 16, State 14, Line 0

Unable to communicate with the runtime for 'Java' script for request id: 94257840-1704-45E8-83D2-
2F74AEB46CF7. Please check the requirements of 'Java' runtime.

Los registros de mssql-launchpadd mostrarán un mensaje de error similar al siguiente:

Oct 18 14:03:21 sqlextmls launchpadd[57471]: [launchpad] 2019/10/18 14:03:21 WARNING: PopulateLauncher


failed: Library /opt/mssql-extensibility/lib/commonlauncher.so not loaded. Error: libc++.so.1: cannot open
shared object file: No such file or directory

Solución alternativa
Puede usar una de las siguientes opciones:
1. Copie libc++* de /opt/mssql/lib a la ruta de acceso predeterminada del sistema /lib64 .
2. Agregue las siguientes entradas a /var/opt/mssql/mssql.conf para exponer la ruta de acceso:

[extensibility]
readabledirectories = /opt/mssql

Se aplica a: SQL Server 2019 en Linux


15. Error de instalación o actualización en los servidores habilitados para FIPS
Si instala SQL Server 2019 con la característica Machine Learning Ser vices y extensiones de lenguaje o
actualiza la instancia de SQL Server en un servidor habilitado para el estándar federal de procesamiento de
información (FIPS), recibirá el siguiente error:
Error al instalar la característica de extensibilidad con el siguiente mensaje de error: AppContainer Creation
Failed with error message NONE, state This implementation is not part of the Windows Platform FIPS
validated cryptographic algorithms. (No se pudo crear AppContainer con el mensaje de error: NINGUNO;
estado: Esta implementación no forma parte de los algoritmos criptográficos validados por Windows
Platform FIPS).

Solución alternativa
Deshabilite FIPS antes de instalar SQL Server 2019 con la característica Microsoft Machine Learning
Ser vices y extensiones de lenguaje o la actualización de la instancia de SQL Server. Una vez completada la
instalación o la actualización, puede volver a habilitar FIPS.
Se aplica a: SQL Server 2019

Problemas con la ejecución del script de R


En esta sección se incluyen problemas conocidos que son específicos de la ejecución de R en SQL Server, así
como algunos problemas relacionados con las bibliotecas y herramientas de R publicadas por Microsoft,
incluida RevoScaleR.
Para consultar otros problemas conocidos que pueden afectar a las soluciones de R, vea el sitio de Machine
Learning Server.
1. Advertencia de acceso denegado al ejecutar scripts de R en SQL Server en una ubicación no
predeterminada
Si la instancia de SQL Server se ha instalado en una ubicación no predeterminada, como fuera de la carpeta
Program Files , se genera la advertencia ACCESS_DENIED al intentar ejecutar scripts que instalan un paquete.
Por ejemplo:

En normalizePath(path.expand(path), winslash, mustWork) : path[2]="~ExternalLibraries/R/8/1": Acceso


denegado

El motivo es que una función de R intenta leer la ruta de acceso y produce un error si el grupo de usuarios
integrado SQLRUserGroup no tiene acceso de lectura. La advertencia que se genera no bloquea la ejecución
del script de R actual, pero la advertencia puede repetirse de forma reiterada siempre que el usuario ejecute
cualquier otro script de R.
Si ha instalado SQL Server en la ubicación predeterminada, este error no se produce porque todos los usuarios
de Windows tienen permisos de lectura en la carpeta Program Files .
Este problema se soluciona en una próxima versión de servicio. Como solución alternativa, proporcione al
grupo SQLRUserGroup acceso de lectura para todas las carpetas principales de ExternalLibraries .
2. Error de serialización entre versiones anteriores y nuevas de RevoScaleR
Al pasar un modelo con un formato serializado a una instancia de SQL Server remota, puede obtener el error:

Error in memDecompress(data, type = decompress) internal error -3 in memDecompress(2). [Error en


memDecompress(data, type = decompress); error interno -3 en memDecompress(2)].

Este error se produce si ha guardado el modelo con una versión reciente de la función de serialización
rxSerializeModel, pero la instancia de SQL Server donde se deserializa el modelo tiene una versión anterior de
las API de RevoScaleR, de SQL Server 2017 CU2 o versiones anteriores.
Como solución alternativa, puede actualizar la instancia de SQL Server 2017 a CU3 o una versión posterior.
El error no aparece si la versión de la API es la misma ni tampoco si va a mover un modelo guardado con una
función de serialización anterior a un servidor que usa una versión más reciente de la API de serialización.
En otras palabras, use la misma versión de RevoScaleR para las operaciones de serialización y deserialización.
3. La puntuación en tiempo real no controla correctamente el parámetro learningRate en los modelos de
árbol y bosque
Si crea un modelo mediante un método de árbol de decisión o de bosque de decisión y especifica la velocidad
de aprendizaje, podría ver resultados incoherentes al usar sp_rxpredict o la función PREDICT de SQL, en
comparación con el uso de rxPredict .
La causa es un error en la API que procesa modelos serializados y se limita al parámetro learningRate : por
ejemplo, en rxBTrees.
Este problema se soluciona en una próxima versión de servicio.
4. Limitaciones de la afinidad del procesador para trabajos de R
En la compilación de versión inicial de SQL Server 2016, se podía establecer la afinidad del procesador
únicamente para las CPU del primer grupo K. Por ejemplo, si el servidor es una máquina de dos sockets con dos
grupos K, solo se usan los procesadores del primer grupo K para los procesos de R. La misma limitación se
aplica al configurar la gobernanza de recursos para trabajos del script de R.
Este problema está corregido en SQL Server 2016 Service Pack 1. Se recomienda que actualice a la versión de
servicio más reciente.
Se aplica a: Versión RTM de SQL Server 2016 R Services
5. No se pueden realizar cambios en los tipos de columna al leer datos en un contexto de proceso de SQL
Server
Si el contexto de proceso está establecido en la instancia de SQL Server, no puede usar el argumento colClasses
(u otros argumentos similares) para cambiar el tipo de datos de las columnas en el código de R.
Por ejemplo, la instrucción siguiente producirá un error si la columna CRSDepTimeStr no es ya un entero:

data <- RxSqlServerData(


sqlQuery = "SELECT CRSDepTimeStr, ArrDelay FROM AirlineDemoSmall",
connectionString = connectionString,
colClasses = c(CRSDepTimeStr = "integer"))

Como solución alternativa, puede volver a escribir la consulta SQL para usar CAST o CONVERT y presentar los
datos a R con el tipo de datos correcto. En general, el rendimiento es mejor si trabaja con los datos mediante
SQL, en lugar de cambiar los datos en el código de R.
Se aplica a: SQL Server 2016 R Services
6. Límites en el tamaño de los modelos serializados
Al guardar un modelo en una tabla de SQL Server, debe serializar el modelo y guardarlo en un formato binario.
Teóricamente, el tamaño máximo de un modelo que se puede almacenar con este método es de 2 GB, que es el
tamaño máximo de las columnas varbinary en SQL Server.
Si necesita usar modelos de mayor tamaño, hay disponibles las siguientes soluciones alternativas:
Tome medidas para reducir el tamaño del modelo. Algunos paquetes de R de código abierto incluyen una
gran cantidad de información en el objeto de modelo y gran parte de esta información se puede quitar
para su implementación.
Use la selección de características para quitar columnas innecesarias.
Si usa un algoritmo de código abierto, considere la posibilidad de llevar a cabo una implementación
similar con el algoritmo correspondiente en MicrosoftML o RevoScaleR. Estos paquetes se han
optimizado para escenarios de implementación.
Después de racionalizar el modelo y reducir el tamaño con los pasos anteriores, vea si se puede usar la
función memCompress en base R para reducir el tamaño del modelo antes de pasarlo a SQL Server. Esta
opción es mejor si el modelo está cerca del límite de 2 GB.
En el caso de modelos de mayor tamaño, puede usar la característica FileTable de SQL Server para
almacenar los modelos, en lugar de usar una columna varbinary.
Para usar FileTable, debe agregar una excepción de firewall, ya que los datos almacenados en FileTable se
administran mediante el controlador de sistema de archivos de FileStream en SQL Server y las reglas de
Firewall predeterminadas bloquean el acceso a archivos de red. Para obtener más información, vea
Habilitar los requisitos previos de FileTable.
Después de haber habilitado FileTable, para escribir el modelo, obtendrá una ruta de acceso de SQL
mediante la API de FileTable y después escribirá el modelo en esa ubicación desde el código. Cuando
tenga que leer el modelo, obtenga la ruta de acceso de SQL y después llame al modelo mediante la ruta
de acceso del script. Para obtener más información, vea Obtener acceso a FileTables con API de entrada-
salida de archivo.
7. Evitar borrar áreas de trabajo al ejecutar código de R en un contexto de proceso de SQL Server
Si usa un comando de R para borrar los objetos del área de trabajo mientras se ejecuta código de R en un
contexto de proceso de SQL Server, o bien si borra el área de trabajo como parte de un script de R llamado
mediante sp_execute_external_script, podría recibir este error: workspace object 'revoScriptConnection' not
found (No se ha encontrado el objeto del área de trabajo "revoScriptConnection").
revoScriptConnection es un objeto del área de trabajo de R que contiene información sobre una sesión de R a la
que se llama desde SQL Server. Pero si su código de R incluye un comando para borrar el área de trabajo (como
rm(list=ls())) , también se borrarán toda la información sobre la sesión y otros objetos del área de trabajo de
R.
Como solución alternativa, evite borrar indiscriminadamente las variables y otros objetos mientras ejecuta R en
SQL Server. Aunque es habitual borrar el área de trabajo cuando se trabaja en la consola de R, puede tener
consecuencias no deseadas.
Para eliminar variables específicas, use la función remove de R: por ejemplo, remove('name1', 'name2', ...) .
Si quiere eliminar varias variables, guarde los nombres de las variables temporales en una lista y realice
periódicamente la recolección de elementos no utilizados.
8. Restricciones en los datos que se pueden proporcionar como entrada para un script de R
No puede usar un script de R en los siguientes tipos de resultados de consulta:
Datos de una consulta de Transact-SQL que haga referencia a columnas AlwaysEncrypted.
Datos de una consulta de Transact-SQL que haga referencia a columnas enmascaradas.
Si necesita usar datos enmascaradas en un script de R, una posible solución alternativa es realizar una
copia de los datos en una tabla temporal y usar esos datos en su lugar.
9. El uso de cadenas como factores puede provocar una degradación del rendimiento
El uso de variables de tipo de cadena como factores puede aumentar considerablemente la cantidad de
memoria que se usa para las operaciones de R. Se trata de un problema conocido en R en general y hay muchos
artículos sobre el tema. Por ejemplo, vea Factors are not first-class citizens in R (Los factores no son de primera
clase en R) de John Mount en R-bloggers o stringsAsFactors: An unauthorized biography (stringsAsFactors: una
biografía no autorizada) de Roger Peng.
Aunque el problema no es específico de SQL Server, puede afectar en gran medida al rendimiento de la
ejecución de código de R en SQL Server. Normalmente, las cadenas se almacenan como varchar o nvarchar y, si
una columna de datos de cadena tiene muchos valores únicos, el proceso de que R las convierta internamente
en enteros y de nuevo en cadenas puede incluso provocar errores de asignación de memoria.
Si no necesita en absoluto un tipo de datos de cadena para otras operaciones, la asignación de los valores de
cadena a un tipo de datos numérico (entero) como parte de la preparación de datos resultaría beneficiosa desde
una perspectiva del rendimiento y la escala.
Para obtener una explicación de este problema y otras sugerencias, vea Rendimiento de R Services: optimización
de datos.
10. Los argumentos varsToKeep y varsToDrop no se admiten en los orígenes de datos de SQL Server
Si usa la función rxDataStep para escribir los resultados en una tabla, utilizar los argumentos varsToKeep y
varsToDrop es una forma cómoda de especificar las columnas que se van a incluir o excluir como parte de la
operación. En cambio, estos argumentos no se admiten en los orígenes de datos de SQL Server.
11. Compatibilidad limitada con los tipos de datos SQL en sp_execute_external_script
No todos los tipos de datos que se admiten en SQL pueden usarse en R. Como solución alternativa, considere la
posibilidad de convertir el tipo de datos no admitido en un tipo de datos compatible antes de pasar los datos a
sp_execute_external_script.
Para obtener más información, consulte Bibliotecas de R y tipos de datos.
12. Posibles daños en las cadenas al usar cadenas Unicode en columnas varchar
El paso de datos Unicode en columnas varchar de SQL Server a R o Python puede producir daños en las
cadenas. Esto se debe a que la codificación de estas cadenas Unicode en las intercalaciones de SQL Server
puede no coincidir con la codificación UTF-8 predeterminada que se usa en R o Python.
Para enviar datos de cadena no ASCII de SQL Server a R o Python, use la codificación UTF-8 (disponible en SQL
Server 2019 (15.x)) o el tipo nvarchar.
13. Solo se puede devolver un valor de tipo raw desde sp_execute_external_script

Cuando se devuelve desde R un tipo de datos binarios (el tipo de datos raw de R), el valor debe enviarse en la
trama de datos de salida.
Con tipos de datos que no sean raw , puede devolver valores de parámetro con los resultados del procedimiento
almacenado si agrega la palabra clave OUTPUT. Para obtener más información, vea Parámetros.
Si quiere usar varios conjuntos de salida que incluyan valores de tipo raw , una posible solución alternativa es
realizar varias llamadas del procedimiento almacenado o enviar los conjuntos de resultados a SQL Server
mediante ODBC.
14. Pérdida de precisión
Dado que Transact-SQL y R admiten varios tipos de datos, los tipos de datos numéricos pueden perder precisión
durante la conversión.
Para obtener más información sobre la conversión implícita de tipos de datos, vea Bibliotecas de R y tipos de
datos.
15. Error de ámbito de variable al usar el parámetro transformFunc
Para transformar datos durante el modelado, puede pasar un argumento transfomFunc en una función como
rxLinmod o rxLogit . No obstante, las llamadas a funciones anidadas pueden provocar errores de ámbito en el
contexto de proceso de SQL Server, incluso si las llamadas funcionan correctamente en el contexto de proceso
local.
El conjunto de datos de ejemplo del análisis no tiene variables

Por ejemplo, supongamos que ha definido dos funciones f y g en su entorno global local, y que g llama a
f . En las llamadas remotas o distribuidas en las que participa g , la llamada a g podría generar un error
porque no se encuentra f , incluso si ha pasado f y g a la llamada remota.
Si se produce este problema, puede solucionarlo insertando la definición de f en la definición de g , en
cualquier lugar antes de que g llame a f .
Por ejemplo:

f <- function(x) { 2*x * 3 }


g <- function(y) {
a <- 10 * y
f(a)
}

Para evitar el error, vuelva a escribir la definición de la siguiente manera:

g <- function(y){
f <- function(x) { 2*x +3}
a <- 10 * y
f(a)
}

16. Importación de datos y manipulación con RevoScaleR


Al leer columnas varchar desde una base de datos, se eliminan los espacios en blanco. Para evitarlo, ponga las
cadenas entre caracteres que no sean espacios en blanco.
Al usar funciones como rxDataStep para crear tablas de base de datos con columnas varchar , el ancho de
columna se calcula en función de una muestra de los datos. Si el ancho varía, puede que sea necesario rellenar
todas las cadenas con una longitud común.
El uso de una transformación para cambiar el tipo de datos de una variable no se admite cuando se usan
llamadas repetidas a rxImport o rxTextToXdf para importar y anexar filas combinando varios archivos de
entrada en un solo archivo .xdf.
17. Compatibilidad limitada con rxExec
En SQL Server 2016, la función rxExec que proporciona el paquete RevoScaleR solo se puede usar en el modo
de un solo subproceso.
18. Aumento del tamaño máximo de parámetro para admitir rxGetVarInfo
Si usa conjuntos de datos con números de variables muy grandes (por ejemplo, más de 40 000), establezca la
marca max-ppsize al iniciar R para poder usar funciones como rxGetVarInfo . La marca max-ppsize especifica
el tamaño máximo de la pila de protección del puntero.
Si usa la consola de R (por ejemplo, en RGui.exe o RTerm.exe), puede establecer el valor de max-ppsize en
500000. Para ello, escriba lo siguiente:

R --max-ppsize=500000

19. Problemas con la función rxDTree


La función rxDTree no admite actualmente transformaciones en la fórmula. En particular, no se admite el uso
de la sintaxis F() para crear factores sobre la marcha. En cambio, los datos numéricos se discretizan
automáticamente.
Los factores ordenados se tratan igual que los factores de todas las funciones de análisis RevoScaleR, excepto
rxDTree .

20. Data.table como OutputDataSet en R


No se admite el uso de data.table como OutputDataSet en R en la actualización acumulativa 13 (CU13) de
SQL Server 2017 y versiones anteriores. Puede aparecer el siguiente mensaje:

Msg 39004, Level 16, State 20, Line 2


A 'R' script error occurred during execution of
'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 2, Line 2
An external script error occurred:
Error in alloc.col(newx) :
Internal error: length of names (0) is not length of dt (11)
Calls: data.frame ... as.data.frame -> as.data.frame.data.table -> copy -> alloc.col

Error in execution. Check the output for more information.


Error in eval(expr, envir, enclos) :
Error in execution. Check the output for more information.
Calls: source -> withVisible -> eval -> eval -> .Call
Execution halted

No se admite data.table como OutputDataSet en R en la actualización acumulativa 14 (CU14) de


SQL Server 2017 y versiones posteriores.
21. Se produce un error al ejecutar un script largo durante la instalación de una biblioteca
Si se ejecuta una sesión de script externo de larga duración y se tiene el DBO en paralelo intentando instalar una
biblioteca en otra base de datos, es posible que se finalice el script.
Por ejemplo, al ejecutar este script externo en la base de datos maestra:

USE MASTER
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(max) = N'Sys.sleep(100)'
DECLARE @input_data_1 nvarchar(max) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1 with
result sets none
go

Mientras que DBO en paralelo instala una biblioteca en LibraryManagementFunctional:

USE [LibraryManagementFunctional]
go

CREATE EXTERNAL LIBRARY [RODBC] FROM (CONTENT = N'/home/ani/var/opt/mssql/data/RODBC_1.3-16.tar.gz') WITH


(LANGUAGE = 'R')
go

DECLARE @language nvarchar(1) = N'R'


DECLARE @script nvarchar(14) = N'library(RODBC)'
DECLARE @input_data_1 nvarchar(8) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1
go

El script externo de larga duración anterior en la base de datos maestra finalizará con el siguiente mensaje de
error:
Error de script 'R' durante la ejecución de 'sp_execute_external_script' con HRESULT 0x800704d4.

Solución alternativa
No ejecute la instalación de la biblioteca en paralelo a la consulta de larga duración. También puede volver a
ejecutar la consulta de larga duración una vez completada la instalación.
Se aplica a: SQL Server 2019 solo en clústeres de macrodatos y en Linux.
22. SQL Server deja de responder al ejecutar scripts de R que contienen la ejecución en paralelo
SQL Server 2019 contiene una regresión que afecta a los scripts de R que usan la ejecución en paralelo. Entre
los ejemplos se incluye el uso de rxExec con contexto de cálculo RxLocalPar y scripts que usan el paquete
paralelo. Este problema se debe a errores que el paquete paralelo encuentra al escribir en el dispositivo nulo
mientras se ejecuta en SQL Server.
Se aplica a: SQL Server 2019.
23. Pérdida de precisión en los tipos de datos Money/Numeric/decimal/BigInt
Si ejecuta un script de R con sp_execute_external_script se permiten los tipos de datos Money, Numeric,
Decimal y BigInt como datos de entrada. Pero, dado que se convierten al tipo numérico de R, sufren una pérdida
de precisión con valores muy altos o con valores de separador decimal.
Money : A veces, los valores de céntimos podrían ser imprecisos y, en este caso, se emitiría una advertencia:
Advertencia: No se pueden representar con precisión los valores de céntimos.
Numeric/Decimal : sp_execute_external_script con un script de R no admite el rango completo de esos
tipos de datos y modificaría los últimos dígitos decimales, especialmente aquellos con fracción.
BigInt : R solo admite enteros de 53 bits y, posteriormente, empezará a tener una pérdida de precisión.

Problemas con la ejecución del script de Python


En esta sección se incluyen problemas conocidos que son específicos de la ejecución de Python en SQL Server,
así como algunos problemas relacionados con los paquetes de Python publicados por Microsoft, incluidos
revoscalepy y microsoftml.
1. Se produce un error en la llamada a un modelo entrenado previamente si la ruta de acceso al modelo es
demasiado larga
Si ha instalado los modelos entrenados previamente en una versión anterior de SQL Server 2017, la ruta de
acceso completa al archivo de modelo entrenado podría ser demasiado larga para que Python la lea. Esta
limitación se corrige en una versión de servicio posterior.
Hay varias soluciones posibles:
Al instalar los modelos entrenados previamente, elija una ubicación personalizada.
Si es posible, instale la instancia de SQL Server en una ruta de instalación personalizada con una ruta de
acceso más corta, como C:\SQL\MSSQL14.MSSQLSERVER.
Use la utilidad de Windows Fsutil para crear un vínculo físico que asigne el archivo de modelo a una ruta de
acceso más corta.
Actualice a la versión de servicio más reciente.
2. Error al guardar el modelo serializado en SQL Server
Al pasar un modelo a una instancia de SQL Server remota e intentar leer el modelo binario con la función
rx_unserialize en revoscalepy, puede obtener el error:

NameError: name 'rx_unserialize_model' is not defined (NameError: no se ha definido el nombre


"rx_unserialize_model")
Este error se produce si ha guardado el modelo con una versión reciente de la función de serialización, pero la
instancia de SQL Server donde se deserializa el modelo no reconoce la API de deserialización.
Para solucionar el problema, actualice la instancia de SQL Server 2017 a CU3 o una versión posterior.
3. Si no se puede inicializar una variable varbinary, se produce un error en BxlServer
Si ejecuta código de Python en SQL Server mediante sp_execute_external_script y el código tiene variables de
salida de tipo varbinary(max), varchar(max) o tipos similares, la variable se debe inicializar o establecer como
parte del script. De lo contrario, el componente de intercambio de datos BxlServer genera un error y deja de
funcionar.
Esta limitación se solucionará en una próxima versión de servicio. Como solución alternativa, asegúrese de que
la variable se inicializa dentro del script de Python. Se puede usar cualquier valor válido, como en los ejemplos
siguientes:

declare @b varbinary(max);
exec sp_execute_external_script
@language = N'Python'
, @script = N'b = 0x0'
, @params = N'@b varbinary(max) OUTPUT'
, @b = @b OUTPUT;
go

declare @b varchar(30);
exec sp_execute_external_script
@language = N'Python'
, @script = N' b = "" '
, @params = N'@b varchar(30) OUTPUT'
, @b = @b OUTPUT;
go

4. Advertencia de telemetría en una ejecución correcta del código de Python


A partir de SQL Server 2017 CU2, puede aparecer el siguiente mensaje aunque el código de Python se ejecute
correctamente:

STDERR message(s) from external script: ~PYTHON_SERVICES\lib\site-


packages\revoscalepy\utils\RxTelemetryLogger SyntaxWarning: telemetry_state is used prior to global
declaration (Mensaje(s) STDERR del script externo: ~PYTHON_SERVICES\lib\site-
packages\revoscalepy\utils\RxTelemetryLogger SyntaxWarning: telemetry_state se ha usado antes de la
declaración global)

Este problema se ha corregido en la actualización acumulativa 3 (CU3) de SQL Server 2017.


5. Tipos de datos numéricos, decimales y monetarios no admitidos
A partir de la actualización acumulativa 12 (CU12) de SQL Server 2017, los tipos de datos numéricos, decimales
y monetarios de WITH RESULT SETS no se admiten si se usa Python con sp_execute_external_script . Pueden
aparecer los siguientes mensajes:

[Código: 39004, estado de SQL: S1000] Error de script 'Python' durante la ejecución de
'sp_execute_external_script' con HRESULT 0x80004004.
[Código: 39019, estado de SQL: S1000] Error en el script externo:
SqlSatelliteCall error: Unsupported type in output schema. Supported types: bit, smallint, int, datetime,
smallmoney, real and float. char, varchar are partially supported. (Error de SqlSatelliteCall: tipo no
compatible en el esquema de salida. Tipos compatibles: bit, smallint, int, datetime, smallmoney, real y float.
char y varchar se admiten parcialmente)

Esto se ha corregido en la actualización acumulativa 14 (CU14) de SQL Server 2017.


6. Error de intérprete incorrecto al instalar paquetes de Python con pip en Linux
En SQL Server 2019, si intenta usar pip . Por ejemplo:

/opt/mssql/mlservices/runtime/python/bin/pip -h

Recibirá este error:

bash: /opt/mssql/mlservices/runtime/python/bin/pip: /opt/microsoft/mlserver/9.4.7/bin/python/python:


bad interpreter: no se encontró el archivo o directorio,

Solución alternativa
Instale pip desde Python Package Authority (PyPA):

wget 'https://bootstrap.pypa.io/get-pip.py'
/opt/mssql/mlservices/bin/python/python ./get-pip.py

Recomendación
Vea Instalación de paquetes de Python con sqlmlutils.
Se aplica a: SQL Server 2019 en Linux
7. No se pueden instalar paquetes de Python con pip después de instalar SQL Server 2019 en Windows
Después de instalar SQL Server 2019 en Windows, se producirá un error al intentar instalar un paquete de
Python mediante pip desde una línea de comandos de DOS. Por ejemplo:

pip install quantfolio

Esto devolverá el siguiente error:

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. (pip
se ha configurado con ubicaciones que requieren TLS/SSL, pero el módulo SSL de Python no está
disponible).

Se trata de un problema específico del paquete Anaconda. Se solucionará en una próxima versión de servicio.
Solución alternativa
Copie los archivos siguientes:
libssl-1_1-x64.dll
libcrypto-1_1-x64.dll

de la carpeta
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin

a la carpeta
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs

Después, abra un nuevo símbolo del sistema del shell de comandos de DOS.
Se aplica a: SQL Server 2019 en Windows
8. Error al usar sp_execute_external_script sin libc++abo.so en Linux
En un equipo con Linux limpio que no tiene libc++abi.so instalado, la ejecución de una consulta
sp_execute_external_script (SPEES) produce el error "No se encontró el archivo o directorio".

Por ejemplo:

EXEC sp_execute_external_script
@language = N'Python'
, @script = N'
OutputDataSet = InputDataSet'
, @input_data_1 = N'select 1'
, @input_data_1_name = N'InputDataSet'
, @output_data_1_name = N'OutputDataSet'
WITH RESULT SETS (([output] int not null));
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Python' script for request id: 94257840-1704-45E8-83D2-
2F74AEB46CF7. Please check the requirements of 'Python' runtime.
STDERR message(s) from external script:

Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open


shared object file: No such file or directory.

SqlSatelliteCall error: Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error


libc++abi.so.1: cannot open shared object file: No such file or directory.
STDOUT message(s) from external script:
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/computecontext/RxInSqlServer.py", line 605,
in rx_sql_satellite_call
rx_native_call("SqlSatelliteCall", params)
File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/RxSerializable.py", line 375, in
rx_native_call
ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.
Total execution time: 00:01:00.387

Solución alternativa
Ejecute el siguiente comando:

sudo cp /opt/mssql/lib/libc++abi.so.1 /opt/mssql-extensibility/lib/

Se aplica a: SQL Server 2019 en Linux


9. No se puede instalar el paquete tensorflow con sqlmlutils
El paquete sqlmlutils se usa para instalar paquetes de Python en SQL Server 2019. Debe descargar, instalar y
actualizar Microsoft Visual C++ 2015-2019 Redistributable (x64). Pero no se puede instalar el paquete
tensorflow con sqlmlutils. El paquete tensorflow depende de una versión más reciente de NumPy que la
versión instalada en SQL Server, pero NumPy es un paquete de sistema preinstalado que sqlmlutils no puede
actualizar al intentar instalar tensorflow.
Solución alternativa
Con el símbolo del sistema en modo de administrador, ejecute el siguiente comando y reemplace
"MSSQLSERVER" por el nombre de la instancia de SQL:
"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe" -m pip install --
upgrade tensorflow

Si recibe un error de "TLS/SSL", consulte 7. No se pueden instalar paquetes de Python con pip, anteriormente en
este artículo.
Se aplica a: SQL Server 2019 en Windows

Revolution R Enterprise y Microsoft R Open


En esta sección se enumeran los problemas específicos de la conectividad, el desarrollo y las herramientas de
rendimiento de R que proporciona Revolution Analytics. Estas herramientas se han proporcionado en versiones
preliminares anteriores de SQL Server.
En general, se recomienda que desinstale estas versiones anteriores e instale la versión más reciente de
SQL Server o Microsoft R Server.
1. No se admite Revolution R Enterprise
No se admite la instalación en paralelo de Revolution R Enterprise con ninguna versión de R Services (en bases
de datos).
Si tiene una licencia existente para Revolution R Enterprise, debe colocarla en un equipo diferente de donde se
encuentran la instancia de SQL Server y las estaciones de trabajo que quiera usar para conectarse a la instancia
de SQL Server.
Algunas versiones preliminares de R Services (en bases de datos) incluyen un entorno de desarrollo de R para
Windows creado mediante Revolution Analytics. Esta herramienta ya no se proporciona y no es compatible.
Para asegurar la compatibilidad con R Services (en bases de datos), se recomienda instalar Microsoft R Client en
su lugar. Herramientas de R para Visual Studio y Visual Studio Code también admiten las soluciones de
Microsoft R.
2. Problemas de compatibilidad con el controlador ODBC de SQLite y RevoScaleR
La revisión 0.92 del controlador ODBC de SQLite no es compatible con RevoScaleR. Las revisiones 0.88 a 0.91 y
0.93, y las versiones posteriores son compatibles.

Pasos siguientes
Recopilación de datos para solucionar problemas de Machine Learning Services de SQL Server
Recopilación de datos para resolver problemas de
scripts de Python y R con Machine Learning
Services 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?

En este artículo se describe cómo recopilar los datos que necesita cuando intenta resolver problemas de
Machine Learning Services de SQL Server. Estos datos pueden ser útiles si está resolviendo problemas por su
cuenta o con la ayuda del servicio de atención al cliente de Microsoft.

Versión y edición de SQL Server


SQL Server 2016 R Services es la primera versión de SQL Server que incluye compatibilidad integrada con R.
SQL Server 2016 Service Pack 1 (SP1) incluye varias mejoras importantes, incluida la capacidad de ejecutar
scripts externos. Si usa SQL Server 2016, considere la posibilidad de instalar la versión SP1 o posterior.
SQL Server 2017 y las versiones posteriores tienen integración con el lenguaje Python. La integración de
características de Python no es posible en versiones anteriores.
Para obtener ayuda para conseguir una edición y una versión, vea este artículo, donde encontrará los números
de compilación de cada una de las versiones de SQL Server.
Según cuál sea la edición de SQL Server que use, es posible que algunas funciones de Machine Learning no
estén disponibles o estén limitadas.

Versiones de herramientas y lenguaje R


En general, la versión de Microsoft R que se instala al seleccionar la característica R Services o la característica
Machine Learning Services viene determinada por el número de compilación de SQL Server. Si aplica una
actualización o una revisión en SQL Server, deberá hacer lo propio también con sus componentes de R.
Para obtener una lista de las versiones y vínculos a las descargas de componentes de R, vea Instalación de
componentes de Machine Learning en equipos sin acceso a Internet. En los equipos con acceso a Internet, la
versión de R que se necesita se identifica e instala automáticamente.
Los componentes de R Server se pueden actualizar de forma independiente del motor de base de datos de
SQL Server, en un proceso conocido como enlace. Por lo tanto, la versión de R que use al ejecutar el código de R
en SQL Server podría variar en función de la versión instalada de SQL Server y, también, de si migró el servidor
a la versión más reciente de R.
Determinar la versión de R
La forma más fácil de determinar la versión de R es obtener las propiedades del runtime ejecutando una
instrucción como la siguiente:
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
# Transform R version properties to data.frame
OutputDataSet <- data.frame(
property_name = c("R.version", "Revo.version"),
property_value = c(R.Version()$version.string, Revo.version$version.string),
stringsAsFactors = FALSE)
# Retrieve properties like R.home, libPath & default packages
OutputDataSet <- rbind(OutputDataSet, data.frame(
property_name = c("R.home", "libPaths", "defaultPackages"),
property_value = c(R.home(), .libPaths(), paste(getOption("defaultPackages"), collapse=", ")),
stringsAsFactors = FALSE)
)
'
WITH RESULT SETS ((PropertyName nvarchar(100), PropertyValue nvarchar(4000)));

TIP
Si R Services no funciona, pruebe a ejecutar solo la parte del script de R desde RGui.

Como último recurso, puede abrir archivos en el servidor para determinar la versión instalada. Para ello, busque
el archivo rlauncher.config para obtener la ubicación del runtime de R y el directorio de trabajo actual. Se
recomienda crear y abrir una copia del archivo para no cambiar ninguna de las propiedades por error.
SQL Server 2016
C:\Program Files\Microsoft SQL Server\MSSQL13.<instance_name\MSSQL\Binn\rlauncher.config

SQL Server 2017


C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Binn\rlauncher.config

Para obtener la versión de R y las versiones de RevoScaleR, abra un símbolo del sistema de R o abra la RGui
asociada a la instancia.
SQL Server 2016
C:\Program Files\Microsoft SQL Server\MSSQL13.<instancename>\R_SERVICES\bin\x64\RGui.exe

SQL Server 2017


C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\R_SERVICES\bin\x64\RGui.exe

La consola de R muestra información de la versión en el inicio. Por ejemplo, la siguiente versión representa la
configuración predeterminada de SQL Server 2017:

*Microsoft R Open 3.3.3*

*The enhanced R distribution from Microsoft*

*Microsoft packages Copyright (C) 2017 Microsoft*

*Loading Microsoft R Server packages, version 9.1.0.*

Versiones de Python
Hay varias maneras de obtener la versión de Python. La más sencilla consiste en ejecutar esta instrucción desde
Management Studio o cualquier otra herramienta de consulta SQL:
-- Get Python runtime properties:
exec sp_execute_external_script
@language = N'Python'
, @script = N'
import sys
import pkg_resources
OutputDataSet = pandas.DataFrame(
{"property_name": ["Python.home", "Python.version", "Revo.version", "libpaths"],
"property_value": [sys.executable[:-10], sys.version,
pkg_resources.get_distribution("revoscalepy").version, str(sys.path)]}
)
'
with WITH RESULT SETS (SQL keywords) ((PropertyName nvarchar(100), PropertyValue nvarchar(4000)));

Si Machine Learning Services no se está ejecutando, puede determinar la versión de Python instalada
examinando el archivo pythonlauncher.config. Se recomienda crear y abrir una copia del archivo para no
cambiar ninguna de las propiedades por error.
1. Solo en SQL Server 2017:
C:\Program Files\Microsoft SQL Server\MSSQL14.
<instance_name>\MSSQL\Log\ExtensibilityLog\pythonlauncher.config
2. Obtenga el valor de PYTHONHOME .
3. Obtenga el valor del directorio de trabajo actual.

NOTE
Si ha instalado tanto Python como R en SQL Server 2017, el directorio de trabajo y el grupo de cuentas de trabajo serán
comunes a ambos lenguajes.

¿Existen varias instancias de R o de Python instaladas?


Compruebe si hay más de una copia de las bibliotecas de R instaladas en el equipo. Esta duplicación puede
producirse en los siguientes casos:
Durante la instalación, seleccionó R Services (en base de datos) y R Server (independiente).
Tiene instalado Microsoft R Client aparte de SQL Server.
Se ha instalado un conjunto de bibliotecas de R distinto mediante Herramientas de R para Visual Studio,
R Studio, Microsoft R Client u otro IDE de R.
El equipo hospeda varias instancias de SQL Server, y más de una instancia usa Machine Learning.
Estas condiciones son igualmente válidas para Python.
Si ve que hay varias bibliotecas o runtimes instalados, asegúrese de que obtiene solo los errores relativos a los
runtimes de Python o de R que la instancia de SQL Server usa.

Origen de los errores


Los errores que aparecen al intentar ejecutar código de R pueden provenir de cualquiera de los siguientes
orígenes:
Motor de base de datos de SQL Server, incluido el procedimiento almacenado sp_execute_external_script
SQL Server Trusted Launchpad
Otros componentes del marco de extensibilidad, incluidos los procesos satélite y los iniciadores de R y
Python
Proveedores como Microsoft Open Database Connectivity (ODBC)
Lenguaje R
Cuando se trabaja con el servicio por primera vez, puede resultar difícil saber qué mensajes proceden de qué
servicios. Se recomienda capturar no solo el texto exacto del mensaje, sino el contexto en el que el mensaje se
ha mostrado. Anote el software cliente que esté usando para ejecutar el código de Machine Learning:
¿Usa Management Studio? ¿Una aplicación externa?
¿Está ejecutando código R en un cliente remoto o directamente en un procedimiento almacenado?

Archivos de registro de SQL Server


Obtenga el registro de errores de SQL Server más reciente. El conjunto completo de registros de errores se
compone de los archivos del siguiente directorio de registro predeterminado:
SQL Server 2016
C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Log\ExtensibilityLog

SQL Server 2017


C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2016\MSSQL\Log\ExtensibilityLog

NOTE
El nombre exacto de la carpeta varía en función del nombre de la instancia.

Errores devueltos por sp_execute_external_script


Obtenga el texto completo de los errores que se devuelven (si los hay) al ejecutar el comando
sp_execute_external_script.
Para no tener en cuenta los problemas de R o Python, puede ejecutar este script, que inicia el runtime de R o
Python y pasa los datos, intercambiándolos.
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

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

Errores generados por el marco de extensibilidad


SQL Server genera registros aparte para los runtimes de lenguaje de scripts externos. Estos errores no proceden
de los lenguajes Python o R, sino que se generan a partir de los componentes de extensibilidad de SQL Server,
incluidos iniciadores específicos de lenguaje y sus procesos satélite.
Estos registros se pueden obtener de las siguientes ubicaciones predeterminadas:
SQL Server 2016
C:\Program Files\Microsoft SQL Server\MSSQL13.<instance_name>\MSSQL\Log\ExtensibilityLog

SQL Server 2017


C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Log\ExtensibilityLog

NOTE
El nombre exacto de la carpeta varía en función del nombre de la instancia. Según la configuración, la carpeta podría estar
en otra unidad.

Por ejemplo, los siguientes mensajes de registro tienen que ver con el marco de extensibilidad:
Error de LogonUser para el usuario MSSQLSERVER01
Podría indicar que las cuentas de trabajo que ejecutan scripts externos no pueden acceder a la instancia.
Error de InitializePhysicalUsersPool
Este mensaje podría significar que la configuración de seguridad impide que el programa de instalación
cree el grupo de cuentas de trabajo necesarias para ejecutar scripts externos.
Security Context Manager initialization failed (Error de inicialización del administrador de contextos de
seguridad)
Satellite Session Manager initialization failed (Error de inicialización del administrador de sesiones
satélite)

Eventos del sistema


1. Abra el Visor de eventos de Windows y busque en el registro de eventos del sistema mensajes que
incluyan la cadena Launchpad.
2. Abra el archivo ExtLaunchErrorlog y busque la cadena ErrorCode. Revise el mensaje asociado al código de
error.
Por ejemplo, los siguientes mensajes son errores del sistema comunes relacionados con el marco de
extensibilidad de SQL Server:
El servicio SQL Server Launchpad (MSSQLSERVER) no pudo iniciarse debido al siguiente error:
El servicio no respondió a tiempo a la solicitud de inicio o de control.
Se agotó el tiempo de espera (120000 milisegundos) para la conexión con el servicio SQL Server
Launchpad (MSSQLSERVER).

Archivos de volcado de memoria


Si posee conocimientos de depuración, puede usar los archivos de volcado de memoria para analizar un error
en Launchpad.
1. Busque la carpeta que contenga los registros de arranque del programa de instalación de SQL Server. Por
ejemplo, en SQL Server 2016, la ruta de acceso predeterminada es C:\Archivos de
programa\Microsoft SQL Server\130\Setup Bootstrap\Log.
2. Abra la subcarpeta de registros de arranque específica de la extensibilidad.
3. Si necesita enviar una solicitud de soporte técnico, agregue todo el contenido de esta carpeta a un archivo
comprimido. Por ejemplo, C:\Archivos de programa\Microsoft SQL Server\130\Setup
Bootstrap\Log\LOG\ExtensibilityLog.
La ubicación exacta podría diferir en el sistema y podría estar en una unidad distinta de la unidad C. Asegúrese
de obtener los registros de la instancia en la que Machine Learning está instalado.

Parámetros de configuración
En esta sección se enumeran otros componentes o proveedores que pueden ser origen de errores al ejecutar
scripts de R o Python.
¿Qué protocolos de red hay disponibles?
Machine Learning Services requiere los siguientes protocolos de red para la comunicación interna entre los
componentes de extensibilidad y para la comunicación con clientes de R o de Python externos.
Canalizaciones con nombre
TCP/IP
Abra el Administrador de configuración de SQL Server para saber si un protocolo está instalado y, si lo está,
para saber si está habilitado.
Permisos y configuración de seguridad
En cuentas de trabajo:
1. En el Panel de control, abra Usuarios y grupos y busque el grupo usado para ejecutar trabajos de script
externos. Ese grupo es SQLRUserGroup de forma predeterminada.
2. Compruebe que el grupo existe y que contiene al menos una cuenta de trabajo.
3. En SQL Server Management Studio, seleccione la instancia en la que se van a ejecutar trabajos de R o Python,
seleccione Seguridad y, después, determine si hay un inicio de sesión para SQLRUserGroup.
4. Revise los permisos del grupo de usuarios.
En cuentas de usuario individuales:
1. Determine si la instancia admite solo la autenticación de modo mixto, solo inicios de sesión de SQL o solo
la autenticación de Windows. Esta configuración afecta a los requisitos de código de R o de Python.
2. Por cada usuario que necesite ejecutar código de R, determine el nivel de permisos necesario en cada
base de datos donde se van a escribir objetos desde R, donde se va a acceder a los datos o donde se van
a crear objetos.
3. Para habilitar la ejecución de scripts, cree roles o agregue usuarios a los siguientes roles, según sea
necesario:
Todos excepto db_owner: se requiere EXECUTE ANY EXTERNAL SCRIPT.
db_datawriter: para escribir resultados de R o de Python.
db_ddladmin: para crear objetos.
db_datareader: para leer los datos que el código de R o de Python usa.
4. Tenga en cuenta si cambió alguna cuenta de inicio predeterminada al instalar SQL Server 2016.
5. Si un usuario necesita instalar nuevos paquetes de R o usar paquetes de R instalados por otros usuarios,
puede que tenga que habilitar la administración de paquetes en la instancia y, luego, asignar más
permisos.
¿Qué carpetas están sujetas a bloqueos del software antivirus?
El software antivirus puede bloquear carpetas, lo que impide que se instalen las características de Machine
Learning y los scripts se ejecuten correctamente. Determine si alguna carpeta del árbol de SQL Server está
sujeta a la detección de virus.
Cuando se instalan varios servicios o características en una instancia, puede resultar complicado enumerar
todas las carpetas posibles que esa instancia usa. Por ejemplo, cuando se agregan nuevas características, se
deben identificar y excluir las nuevas carpetas.
Además, algunas características crean carpetas dinámicamente en tiempo de ejecución. Es el caso de las tablas
OLTP en memoria, los procedimientos almacenados y las funciones: todos ellos crean directorios en tiempo de
ejecución. Estos nombres de carpeta suelen contener GUID y no se pueden predecir. SQL Server Trusted
Launchpad crea directorios de trabajo para los trabajos de script de R y de Python.
Dado que existe la posibilidad de que no se puedan excluir todas las carpetas que el proceso de SQL Server y
sus características necesitan, se recomienda excluir todo el árbol de directorio de instancias de SQL Server.
¿Está abierto el firewall para SQL Server? ¿Admite la instancia conexiones remotas?
1. Para saber si SQL Server admite conexiones remotas, vea Configurar conexiones de servidor remoto.
2. Averigüe si se ha creado una regla de firewall para SQL Server. Por motivos de seguridad, en una
instalación predeterminada es posible que el cliente de R o de Python remoto no pueda conectarse a la
instancia. Para más información, vea Solucionar problemas de conexión a SQL Server.

Consulte también
Solución de problemas de Machine Learning en SQL Server
Solución de problemas con el servicio Launchpad al
ejecutar scripts de Python y R en Machine Learning
Services de SQL Server
14/07/2021 • 11 minutes to read

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


En este artículo se proporcionan instrucciones para solucionar problemas relacionados con el servicio
SQL Server Launchpad utilizado con Machine Learning Services. El servicio Launchpad admite la ejecución de
scripts externos para R y Python. Hay varios problemas que pueden impedir que Launchpad se inicie, incluidos
los cambios o problemas de configuración, o la falta de protocolos de red.

Determinación de si Launchpad se está ejecutando


1. Abra el Administrador de configuración de SQL Server. En la línea de comandos, escriba
SQLSer verManager13.msc , SQLSer verManager14.msc o SQLSer verManager15.msc .
2. Tome nota de la cuenta de servicio en la que se ejecuta Launchpad. Cada instancia en la que R o Python
estén habilitados debe tener su propia instancia del servicio Launchpad. Por ejemplo, el servicio de una
instancia con nombre podría ser similar a MSSQLLaunchpad$NombreInstancia.
3. Si el servicio está detenido, reinícielo. Al reiniciarlo, si hay algún problema con la configuración, se
publica un mensaje en el registro de eventos del sistema y el servicio se vuelve a detener. Compruebe el
registro de eventos del sistema para obtener detalles sobre por qué se ha detenido el servicio.
4. Revise el contenido de RSetup.log y asegúrese de que no haya ningún error en la configuración. Por
ejemplo, el mensaje Saliendo con el código 0 indica un error en el inicio del servicio.
5. Para buscar otros errores, revise el contenido de rlauncher.log.

Comprobación de la cuenta del servicio Launchpad


La cuenta de servicio predeterminada podría ser "NT Service$SQL2016", "NT Service$SQL2017" o “NT
Service$SQL2019”. La última parte puede variar en función del nombre de la instancia de SQL.
El servicio Launchpad (Launchpad.exe) se ejecuta mediante una cuenta de servicio con pocos privilegios. En
cambio, para iniciar R y Python y comunicarse con la instancia de base de datos, la cuenta del servicio
Launchpad requiere los siguientes derechos de usuario:
Iniciar sesión como servicio (SeServiceLogonRight)
Reemplazar un token de nivel de proceso (SeAssignPrimaryTokenPrivilege)
Omitir la comprobación transversal (SeChangeNotifyPrivilege)
Ajuste de las cuotas de la memoria para un proceso (SeIncreaseQuotaSizePrivilege)
Para más información sobre estos derechos de usuario, vea la sección "Derechos y privilegios de Windows" en
Configurar los permisos y las cuentas de servicio de Windows.
TIP
Si está familiarizado con el uso de la herramienta Support Diagnostics Platform (SDP) para llevar a cabo diagnósticos de
SQL Server, puede usar SDP para revisar el archivo de salida denominado MachineName_UserRights.txt.

El grupo de usuarios de Launchpad no puede iniciar sesión


localmente
Durante la configuración de Machine Learning Services, SQL Server crea el grupo de usuarios de Windows
SQLRUserGroup y después lo aprovisiona con todos los derechos necesarios para que Launchpad se conecte
a SQL Server y ejecute trabajos de scripts externos. Si este grupo de usuarios está habilitado, también se usa
para ejecutar scripts de Python.
Pero en las organizaciones en las que se aplican directivas de seguridad más restrictivas, es posible que se
hayan quitado manualmente los derechos necesarios para este grupo o que la directiva los revoque
automáticamente. Si se han quitado los derechos, Launchpad ya no podrá conectarse a SQL Server y
SQL Server no podrá llamar al entorno de ejecución externo.
Para corregir el problema, asegúrese de que el grupo SQLRUserGroup tiene el derecho de sistema Permitir
el inicio de sesión local .
Para obtener más información, consulte Configurar los permisos y las cuentas de servicio de Windows.

Permisos para ejecutar scripts externos


Incluso si Launchpad está configurado correctamente, devuelve un error si el usuario no tiene permiso para
ejecutar scripts de R o Python.
Si ha instalado SQL Server como administrador de base de datos o si la base de datos le pertenece, se le
concederá automáticamente este permiso. En cambio, otros usuarios suelen tener permisos más limitados. Si
intentan ejecutar un script de R, recibirán un error de Launchpad.
Para corregir el problema, en SQL Server Management Studio, un administrador de seguridad puede modificar
el inicio de sesión de SQL o la cuenta de usuario de Windows al ejecutar el siguiente script:

GRANT EXECUTE ANY EXTERNAL SCRIPT TO <username>

Para más información, vea GRANT (Transact-SQL).

Errores comunes de Launchpad


En esta sección se enumeran los mensajes de error más comunes que devuelve Launchpad.

"No se puede iniciar el tiempo de ejecución para el script de R"


Si el grupo de Windows de usuarios de R (también usado para Python) no puede iniciar sesión en la instancia
que ejecuta R Services, podrían aparecer los siguientes errores:
Errores generados al intentar ejecutar scripts de R:
No se puede iniciar el tiempo de ejecución para el script 'R'. Compruebe la configuración del
tiempo de ejecución 'R'.
An external script error occurred. Unable to launch the runtime. (Error en el script externo. No se
puede iniciar el tiempo de ejecución).
Errores generados por el servicio SQL Server Launchpad:
Failed to initialize the launcher RLauncher.dll
No launcher dlls were registered!
Security logs indicate that the account NT SERVICE was unable to log on (Los registros de
seguridad indican que la cuenta NT SERVICE no pudo iniciar sesión)
Para más información sobre cómo asignar los permisos necesarios a este grupo de usuarios, vea Instalación de
SQL Server R Services.

NOTE
Esta limitación no se aplica si usa inicios de sesión de SQL para ejecutar scripts de R desde una estación de trabajo remota.

"Error de inicio de sesión: el usuario no tiene permisos para el tipo de


inicio de sesión solicitado"
De forma predeterminada, SQL Server Launchpad usa la siguiente cuenta durante el inicio:
NT Service\MSSQLLaunchpad . El programa de configuración de SQL Server ha configurado la cuenta para que
tenga todos los permisos necesarios.
Si asigna otra cuenta a Launchpad o si una directiva quita el derecho en el equipo de SQL Server, es posible que
la cuenta no tenga los permisos necesarios y que vea este error:

ERROR_LOGON_TYPE_NOT_GRANTED 1385 (0x569) Error de inicio de sesión: el usuario no tiene permisos


para el tipo de inicio de sesión solicitado en el equipo.

Para conceder los permisos necesarios a la nueva cuenta de servicio, use la aplicación de directiva de seguridad
local y actualice los permisos de la cuenta para que incluya los siguientes:
Ajustar las cuotas de memoria de un proceso (SeIncreaseQuotaPrivilege)
Omitir la comprobación transversal (SeChangeNotifyPrivilege)
Iniciar sesión como servicio (SeServiceLogonRight)
Reemplazar un token de nivel de proceso (SeAssignPrimaryTokenPrivilege)

"Unable to communicate with the Launchpad service" (No se puede


establecer la comunicación con el servicio Launchpad)
Si ha instalado y habilitado el aprendizaje automático, pero recibe este error al intentar ejecutar un script de R o
Python, es posible que el servicio Launchpad de la instancia haya dejado de ejecutarse.
1. Desde un símbolo del sistema de Windows, abra el Administrador de configuración de SQL Server. Para
obtener más información, vea SQL Server Configuration Manager.
2. Haga clic con el botón derecho en la instancia de SQL Server Launchpad y, después, seleccione
Propiedades .
3. Seleccione la pestaña Ser vicio y compruebe que se está ejecutando. Si no es así, cambie Modo de
inicio a Automático y luego seleccione Aplicar .
4. Al reiniciar el servicio se suele corregir el problema para que se puedan ejecutar los scripts de
aprendizaje automático. Si el reinicio no soluciona el problema, anote la ruta de acceso y los argumentos
de la propiedad Ruta de acceso binaria y haga lo siguiente:
a. Revise el archivo .config del iniciador y asegúrese de que el directorio de trabajo es válido.
b. Asegúrese de que el grupo de Windows que usa Launchpad puede conectarse a la instancia de
SQL Server.
c. Si cambia alguna de las propiedades del servicio, reinicie el servicio Launchpad.

"Fatal error creation of tmpFile failed" (Error irrecuperable: no se pudo


crear tmpFile)
En este escenario, ha instalado correctamente las características de aprendizaje automático y Launchpad se está
ejecutando. Intenta ejecutar algunos códigos sencillos de R o Python, pero Launchpad produce un error similar
al siguiente:

No se puede comunicar con el tiempo de ejecución para el script "R". Compruebe los requisitos del tiempo
de ejecución "R".

A la vez, el tiempo de ejecución del script externo escribe el siguiente mensaje como parte del mensaje de
STDERR:

Fatal error: creation of tmpfile failed. (Error irrecuperable: no se pudo crear tmpfile).

Este error indica que la cuenta que Launchpad intenta usar no tiene permiso para iniciar sesión en la base de
datos. Esta situación puede producirse si se implementan directivas de seguridad estrictas. Para determinar si
este es el caso, revise los registros de SQL Server y compruebe si se ha denegado la cuenta MSSQLSERVER01
durante el inicio de sesión. En los registros que son específicos de R_SERVICES o PYTHON_SERVICES se
proporciona la misma información. Busque ExtLaunchError.log.
De forma predeterminada, se configuran 20 cuentas que se asocian al proceso Launchpad.exe, con los nombres
MSSQLSERVER01 a MSSQLSERVER20. Si usa mucho R o Python, puede aumentar el número de cuentas.
Para resolver el problema, asegúrese de que el grupo tiene el permiso Permitir el inicio de sesión local en la
instancia local en la que se han instalado y habilitado las características de aprendizaje automático. En algunos
entornos, este nivel de permiso puede necesitar una excepción de GPO del administrador de red.

"Not enough quota to process this command" (Cuota insuficiente


para procesar este comando)
Este error puede tener varios significados:
Launchpad podría no tener suficientes usuarios externos para ejecutar la consulta externa. Por ejemplo, si
está ejecutando más de 20 consultas externas simultáneamente y solo hay 20 usuarios predeterminados,
puede producirse un error en una o varias consultas.
No hay memoria suficiente disponible para procesar la tarea de R. Este error se produce con mayor
frecuencia en un entorno predeterminado, donde SQL Server podría estar usando hasta el 70 % de los
recursos del equipo. Para más información sobre cómo modificar la configuración del servidor para que
R use más recursos, vea Operacionalización del código de R.

"Can't find package" (No se encuentra el paquete)


Si ejecuta código de R en SQL Server y recibe este mensaje, pero no ha recibido el mensaje al ejecutar el mismo
código fuera de SQL Server, esto indica que el paquete no se ha instalado en la ubicación de la biblioteca
predeterminada que usa SQL Server.
Este error puede producirse de varias maneras:
Ha instalado un nuevo paquete en el servidor, pero se ha denegado el acceso, por lo que R ha instalado el
paquete en una biblioteca de usuario.
Ha instalado R Services y, luego, otra herramienta o conjunto de bibliotecas de R, como RStudio.
Para determinar la ubicación de la biblioteca de paquetes de R que usa la instancia, abra SQL Server
Management Studio (o cualquier otra herramienta de consulta de base de datos), conéctese a la instancia y
luego ejecute el siguiente procedimiento almacenado:

EXEC sp_execute_external_script @language = N'R',


@script = N' print(normalizePath(R.home())); print(.libPaths());';

Ejemplo de resultados
Mensaje(s) STDOUT del script externo:
[1] "C:\Archivos de programa\Microsoft SQL Server\MSSQL13.SQL2016\R_SERVICES"
[1] "C:/Archivos de programa/Microsoft SQL Server/MSSQL13.SQL2016/R_SERVICES/library"
Para resolver el problema, debe reinstalar el paquete en la biblioteca de instancias de SQL Server.

NOTE
Si ha actualizado una instancia de SQL Server 2016 para usar la versión más reciente de Microsoft R, la ubicación
predeterminada de la biblioteca es diferente. Para más información, vea Uso de SqlBindR para actualizar una instancia de R
Services.

Launchpad se cierra debido a archivos DLL que no coinciden


Si instala el motor de base de datos con otras características, aplica un parche al servidor y, después, agrega la
característica Machine Learning mediante el soporte original, puede que se instale la versión incorrecta de los
componentes de Machine Learning. Si Launchpad detecta un error de coincidencia de versiones, se cierra y crea
un archivo de volcado de memoria.
Para evitar este problema, asegúrese de instalar todas las características nuevas en el mismo nivel de parche
que la instancia del servidor.
Forma incorrecta de actualizar :
1. Instale SQL Server 2016 sin R Services.
2. Instale la actualización acumulativa 2 de SQL Server 2016.
3. Instale R Services (en base de datos) mediante el soporte de RTM.
Forma correcta de actualizar :
1. Instale SQL Server 2016 sin R Services.
2. Actualice SQL Server 2016 al nivel de parche que quiera. Por ejemplo, instale el Service Pack 1 y, luego, la
actualización acumulativa 2.
3. Para agregar la característica en el nivel de parche correcto, vuelva a ejecutar el programa de instalación de
SP1 y CU2 y, después, elija R Services (en base de datos).

Launchpad no se inicia si se necesita una notación 8.3


NOTE
En sistemas más antiguos, puede que Launchpad no se inicie si se necesita una notación 8.3. Este requisito se ha quitado
en versiones posteriores. Los clientes de SQL Server 2016 R Services deben instalar una de las siguientes opciones:
SQL Server 2016 SP1 y CU1: actualización acumulativa 1 de SQL Server.
SQL Server 2016 RTM, actualización acumulativa 3 y esta revisión, que está disponible a petición.

Para mantener la compatibilidad con R, SQL Server 2016 R Services (en base de datos) requería la unidad en la
que se ha instalado la característica para permitir crear nombres de archivo cortos mediante la notación 8.3. Un
nombre de archivo 8.3 también se denomina nombre de archivo corto y se usa para que sea compatible con
versiones anteriores de Microsoft Windows o como una alternativa a los nombres de archivo largos.
Si el volumen donde está instalando R no admite los nombres de archivo cortos, los procesos que inicien R
desde SQL Server podrían no encontrar el ejecutable correcto y Launchpad no se iniciará.
Como solución alternativa, puede habilitar la notación 8.3 en el volumen donde estén instalados SQL Server y R
Services. Después, debe proporcionar el nombre corto del directorio de trabajo en el archivo de configuración
de R Services.
1. Para habilitar la notación 8.3, ejecute la utilidad fsutil con el argumento 8dot3name, como se muestra
aquí: fsutil 8dot3name.
2. Una vez que se haya habilitado la notación 8.3, abra el archivo RLauncher.config y apunte la propiedad de
WORKING_DIRECTORY . Para más información sobre cómo encontrar este archivo, vea Solución de problemas
de recopilación de datos para Machine Learning.
3. Use la utilidad fsutil con el argumento file para especificar una ruta de acceso del archivo corta para la
carpeta especificada en WORKING_DIRECTORY.
4. Edite el archivo de configuración para especificar el mismo directorio de trabajo que ha indicado en la
propiedad WORKING_DIRECTORY. También puede especificar otro directorio de trabajo y elegir una ruta
de acceso existente que sea compatible con la notación 8.3.

Pasos siguientes
Recopilación de datos para la solución de problemas de aprendizaje automático
Instalación de SQL Server Machine Learning Services
Solución de problemas de conexiones de motor de base de datos
Errores comunes de scripts de R en Machine
Learning Services de SQL Server
14/07/2021 • 5 minutes to read

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


En este artículo se documentan varios errores comunes de script cuando se ejecuta el script de R en Machine
Learning Services de SQL Server. Esta lista no está completa. Hay muchos paquetes y los errores pueden variar
entre las distintas versiones del mismo paquete.

Se produce un error en un script válido en T-SQL o en los


procedimientos almacenados
Antes de ajustar el código de R en un procedimiento almacenado, es una buena idea ejecutar el código de R en
un IDE externo o en una de las herramientas de R, como RTerm o RGui. Mediante el uso de estos métodos,
puede probar y depurar el código mediante los mensajes de error detallados devueltos por R.
Sin embargo, a veces es posible que un código que funciona perfectamente en un IDE o una utilidad externos no
se ejecute en un procedimiento almacenado o en un contexto de cálculo de SQL Server. Si esto ocurre, hay una
serie de problemas que hay que buscar antes de que pueda asumir que el paquete no funciona en SQL Server.
1. Compruebe si Launchpad se está ejecutando.
2. Revise los mensajes para ver si los datos de entrada o los datos de salida contienen columnas con tipos
de datos incompatibles o no admitidos. Por ejemplo, las consultas en una base de datos SQL suelen
devolver GUID o ROWGUID, y no se admiten. Para obtener más información, consulte Bibliotecas de R y
tipos de datos.
3. Revise las páginas de ayuda de las funciones individuales de R para determinar si se admiten todos los
parámetros para el contexto de cálculo de SQL Server. Para obtener ayuda sobre ScaleR, use los
comandos de ayuda de R en línea o consulte Referencia de paquete.
Si el tiempo de ejecución de R funciona pero el script devuelve errores, se recomienda que intente depurar el
script en un entorno de desarrollo de R dedicado, como Herramientas de R para Visual Studio.
También se recomienda revisar y reescribir ligeramente el script para corregir cualquier problema con los tipos
de datos que pueden surgir al trasladar datos entre R y el motor de base de datos. Para obtener más
información, consulte Bibliotecas de R y tipos de datos.
Además, puede usar el paquete sqlrutils para agrupar el script de R en un formato que se consuma más
fácilmente como un procedimiento almacenado. Para más información, consulte:
Paquete sqlrutils
Creación de un procedimiento almacenado mediante sqlrutils

El script devuelve resultados incoherentes


Los scripts de R pueden devolver valores diferentes en un contexto de SQL Server, por varias razones:
La conversión de tipos implícita se realiza automáticamente en algunos tipos de datos, cuando los datos
se pasan entre SQL Server y R. Para obtener más información, vea Bibliotecas de R y tipos de datos.
Determinación de si el valor de bits es un factor. Por ejemplo, a menudo hay diferencias en los resultados
de las operaciones matemáticas de las bibliotecas de punto flotante de 32 y 64 bits.
Determinación de si se han producido NaN en cualquier operación. Esto puede invalidar los resultados.
Se pueden amplificar pequeñas diferencias cuando se toma un valor recíproco de un número cercano a
cero.
Los errores de redondeo acumulados pueden provocar valores menores que cero en lugar de cero.

Autenticación implícita para la ejecución remota mediante ODBC


Si se conecta al equipo con SQL Server para ejecutar comandos de R mediante las funciones RevoScaleR ,
puede aparecer un error al usar llamadas ODBC que escriben datos en el servidor. Este error solo se produce
cuando se usa la autenticación de Windows.
La razón es que las cuentas de trabajo que se crean para R Services no tienen permiso para conectarse al
servidor. Por lo tanto, no se pueden ejecutar llamadas ODBC en su nombre. El problema no se produce con los
inicios de sesión de SQL porque, con los inicios de sesión de SQL, las credenciales se pasan explícitamente
desde el cliente de R a la instancia de SQL Server y, a continuación, a ODBC. Sin embargo, el uso de inicios de
sesión de SQL también es menos seguro que el uso de la autenticación de Windows.
Para permitir que las credenciales de Windows se pasen de forma segura desde un script que se inicia de forma
remota, SQL Server debe emular las credenciales. Este proceso se denomina autenticación implícita. Para
realizar este trabajo, las cuentas de trabajo que ejecutan scripts de R o Python en el equipo de SQL Server deben
tener los permisos correctos.
1. Abra SQL Server Management Studio como administrador en la instancia donde quiera ejecutar el
código de R.
2. Ejecute el siguiente script. Asegúrese de editar el nombre del grupo de usuarios, si ha cambiado el valor
predeterminado, y el nombre de equipo y de instancia.

USE [master]
GO

CREATE LOGIN [computername\\SQLRUserGroup] FROM WINDOWS WITH


DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[language]
GO

No borrado del área de trabajo mientras se ejecuta R en un contexto


de cálculo de SQL
Aunque es habitual borrar el área de trabajo cuando se trabaja en la consola de R, puede tener consecuencias no
deseadas en un contexto de cálculo de SQL.
revoScriptConnection es un objeto del área de trabajo de R que contiene información sobre una sesión de R a la
que se llama desde SQL Server. Pero si su código de R incluye un comando para borrar el área de trabajo (como
rm(list=ls()) ), también se borrarán toda la información sobre la sesión y otros objetos del área de trabajo de
R.
Como solución alternativa, evite borrar indiscriminadamente las variables y otros objetos mientras ejecuta R en
SQL Server. Elimine variables específicas mediante la función eliminar :

remove('name1', 'name2', ...)


Si quiere eliminar varias variables, se recomienda guardar los nombres de las variables temporales en una lista
y, a continuación, realizar periódicamente la recolección de elementos no utilizados en una lista.

Pasos siguientes
Recopilación de datos para la solución de problemas de Machine Learning Services de SQL Server
Instalación de SQL Server Machine Learning Services
Solución de problemas de conexiones de motor de base de datos

También podría gustarte