Uso de ODBC para guardar y cargar objetos de R en SQL Server Machine Learning Services

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