Inicio rápido: Ejecución de scripts de R sencillos con aprendizaje automático de SQL

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

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.

  • 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:

Entrada Descripció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.
@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:

Hola mundo
1

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

    Contenido de la tabla RTestData

  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

    Salida del script de R que devuelve datos de una tabla

  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.

    Sugerencia

    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

    Resultados de la consulta usando <span class=@script como entrada" />

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

Paquetes instalados en R

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: