Usare ODBC per salvare e caricare oggetti R in SQL Server Machine Learning Services

Si applica a: SQL Server 2016 (13.x) e versioni successive

Informazioni su come usare il pacchetto RevoScaleR per archiviare oggetti R serializzati in una tabella e quindi caricare l'oggetto dalla tabella in base alle esigenze con SQL Server Machine Learning Services. Questo pacchetto può essere usato durante il training e il salvataggio di un modello e successivamente per l'assegnazione di punteggi o l'analisi.

Pacchetto RevoScaleR

Il pacchetto RevoScaleR include funzioni di serializzazione e deserializzazione che consentono di archiviare in modo compatto oggetti R in SQL Server e quindi di leggere gli oggetti dalla tabella. Ogni chiamata di funzione usa in genere un archivio di valori chiave semplice, in cui la chiave è il nome dell'oggetto e il valore associato alla chiave è l'oggetto R varbinary da spostare all'interno o all'esterno dalla tabella.

Per salvare gli oggetti R in SQL Server direttamente da un ambiente R, è necessario:

  • Stabilire una connessione a SQL Server tramite l'origine dati RxOdbcData.
  • Chiamare le nuove funzioni tramite la connessione ODBC
  • Facoltativamente, è possibile specificare che l'oggetto non deve essere serializzato. Scegliere quindi un nuovo algoritmo di compressione da usare al posto dell'algoritmo di compressione predefinito.

Per impostazione predefinita, qualsiasi oggetto chiamato da R per lo spostamento in SQL Server viene serializzato e compresso. Al contrario, quando si carica un oggetto da una tabella SQL Server da usare nel codice R, l'oggetto viene deserializzato e decompresso.

Elenco di nuove funzioni

  • rxWriteObject scrive un oggetto R in SQL Server usando l'origine dati ODBC.

  • rxReadObject legge un oggetto R da un database di SQL Server usando un'origine dati ODBC.

  • rxDeleteObject elimina un oggetto R dal database di SQL Server specificato nell'origine dati ODBC. Se sono presenti più oggetti identificati dalla combinazione chiave/versione, vengono eliminati tutti.

  • rxListKeys elenca tutti gli oggetti disponibili come coppie chiave-valore. Ciò consente di determinare i nomi e le versioni degli oggetti R.

Per informazioni dettagliate sulla sintassi di ogni funzione, usare la Guida di R. I dettagli sono disponibili anche nelle informazioni di riferimento per ScaleR.

Come archiviare gli oggetti R in SQL Server tramite ODBC

Questa procedura illustra come è possibile usare le nuove funzioni per creare un modello e salvarlo in SQL Server.

  1. Impostare la stringa di connessione per SQL Server.

    conStr <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
    
  2. Creare un oggetto origine dati rxOdbcData in R usando la stringa di connessione.

    ds <- RxOdbcData(table="robjects", connectionString=conStr)
    
  3. Eliminare la tabella se esiste già e non si vuole tenere traccia delle versioni precedenti degli oggetti.

    if(rxSqlServerTableExists(ds@table, ds@connectionString)) {
        rxSqlServerDropTable(ds@table, ds@connectionString)
        }
    
  4. Definire una tabella che può essere usata per archiviare oggetti binari.

    ddl <- paste(" CREATE TABLE [", ds@table, "] 
       (","  [id] varchar(200) NOT NULL,
        "," [value] varbinary(max),
        "," CONSTRAINT unique_id UNIQUE (id))", 
        sep = "") 
    
  5. Aprire la connessione ODBC per creare la tabella e quando l'istruzione DDL è stata completata, chiudere la connessione.

     rxOpen(ds, "w") 
     rxExecuteSQLDDL(ds, ddl) 
     rxClose(ds)
    
  6. Generare gli oggetti R che si vuole archiviare.

    infertLogit <- rxLogit(case ~ age + parity + education + spontaneous + induced, 
      data = infert)
    
  7. Usare l'oggetto RxOdbcData creato in precedenza per salvare il modello nel database.

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

Come leggere gli oggetti R da SQL Server tramite ODBC

Questa procedura illustra come è possibile usare le nuove funzioni per caricare un modello da SQL Server.

  1. Impostare la stringa di connessione per SQL Server.

    conStr2 <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
    
  2. Creare un oggetto origine dati rxOdbcData in R usando la stringa di connessione.

    ds <- RxOdbcData(table="robjects", connectionString=conStr2)
    
  3. Leggere il modello dalla tabella specificandone il nome di oggetto R.

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

Passaggi successivi