Configuración de un cliente de ciencia de datos para el desarrollo de R en SQL Server

Se aplica a: SQL Server 2016 (13.x), SQL Server 2017 (14.x) y SQL Server 2019 (15.x), SQL Server 2019 (15.x): Linux

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).

Nota:

Actualmente, este artículo se aplica a SQL Server 2016 (13.x), SQL Server 2017 (14.x), SQL Server 2019 (15.x) y SQL Server 2019 (15.x) solo para Linux.

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.

Componentes cliente-servidor

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.

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, seleccione 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 %ProgramFiles%\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 %ProgramFiles%\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 %ProgramFiles%\Microsoft\R Client\R_SERVER\bin\x64 y haga doble clic en RGui para empezar 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.

    Información de versión al cargar R

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 rxSummary 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 rxSummary 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.

    Gráfico de dispersión en RGUI

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 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. Busque %ProgramFiles%\Microsoft\R Client\R_SERVER\bin\x64.

  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.

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.

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. Seleccione R y seleccione Proyecto de R. En el cuadro Nombre, escriba dbtest y seleccione 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. Seleccione 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.