Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Compruebe si Launchpad se está ejecutando.
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.
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:
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.
Abra SQL Server Management Studio como administrador en la instancia donde quiera ejecutar el código de R.
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