Usar o ODBC para salvar e carregar objetos R nos Serviços de Machine Learning do SQL Server

Aplica-se a: simSQL Server 2016 (13.x) e posterior

Saiba como usar o pacote RevoScaleR para armazenar objetos R serializados em uma tabela e carregar o objeto da tabela conforme necessário com os Serviços de Machine Learning do SQL Server. Ele pode ser usado ao treinar e salvar um modelo e, depois, para pontuação ou análise.

Pacote RevoScaleR

O pacote RevoScaleR inclui funções de serialização e desserialização que podem carregar objetos R de modo compacto no SQL Server e ler os objetos da tabela. Em geral, as chamadas de função usam um repositório de valor de chave simples, no qual a chave é o nome do objeto e o valor associado com a chave é o objeto varbinary de R a ser movido para dentro ou para fora de uma tabela.

Para salvar objetos do R para SQL Server diretamente de um ambiente do R, você deve:

  • Estabelecer uma conexão com o SQL Server usando a fonte de dados RxOdbcData.
  • Chamar as novas funções na conexão ODBC
  • Opcionalmente, você pode especificar que o objeto não seja serializado. Em seguida, escolha um novo algoritmo de compactação para usar em vez do algoritmo de compactação padrão.

Por padrão, qualquer objeto que é chamado do R para ser movido para o SQL Server é serializado e compactado. Por outro lado, quando você carrega um objeto de uma tabela do SQL Server para usar em seu código de R, o objeto é desserializado e descompactado.

Listar as novas funções

  • ArxWriteObject grava um objeto de R no SQL Server usando a fonte de dados ODBC.

  • ArxReadObject lê um objeto de R de um banco de dados do SQL Server, usando uma fonte de dados ODBC

  • ArxDeleteObject exclui um objeto R do banco de dados do SQL Server especificado na fonte de dados ODBC. Se houver vários objetos identificados pela combinação de chave/versão, todos são excluídos.

  • ArxListKeys lista todos os objetos disponíveis como pares chave-valor. Isso ajuda a determinar os nomes e as versões dos objetos de R.

Para obter ajuda detalhada sobre a sintaxe de cada função, use a Ajuda de R. Os detalhes também estão disponíveis na Referência do ScaleR.

Como armazenar objetos de R no SQL Server usando o ODBC

Este procedimento demonstra como você pode usar as novas funções para criar um modelo e salvá-lo no SQL Server.

  1. Configure a cadeia de conexão para o SQL Server.

    conStr <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
    
  2. Crie um objeto de fonte de dados rxOdbcData em R usando a cadeia de conexão.

    ds <- RxOdbcData(table="robjects", connectionString=conStr)
    
  3. Exclua a tabela, se ela já existir e você não desejar controlar as versões antigas dos objetos.

    if(rxSqlServerTableExists(ds@table, ds@connectionString)) {
        rxSqlServerDropTable(ds@table, ds@connectionString)
        }
    
  4. Defina uma tabela que pode ser usada para armazenar objetos binários.

    ddl <- paste(" CREATE TABLE [", ds@table, "] 
       (","  [id] varchar(200) NOT NULL,
        "," [value] varbinary(max),
        "," CONSTRAINT unique_id UNIQUE (id))", 
        sep = "") 
    
  5. Abra a conexão ODBC para criar a tabela e, quando a instrução DDL for concluída, feche a conexão.

     rxOpen(ds, "w") 
     rxExecuteSQLDDL(ds, ddl) 
     rxClose(ds)
    
  6. Gere os objetos de R que você deseja armazenar.

    infertLogit <- rxLogit(case ~ age + parity + education + spontaneous + induced, 
      data = infert)
    
  7. Use o objeto RxOdbcData criado anteriormente, para salvar o modelo no banco de dados.

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

Como ler objetos de R do SQL Server usando o ODBC

Este procedimento demonstra como você pode usar as novas funções para carregar um modelo do SQL Server.

  1. Configure a cadeia de conexão para o SQL Server.

    conStr2 <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
    
  2. Crie um objeto de fonte de dados rxOdbcData em R usando a cadeia de conexão.

    ds <- RxOdbcData(table="robjects", connectionString=conStr2)
    
  3. Leia o modelo da tabela especificando seu nome de objeto R.

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

Próximas etapas