Использование ODBC для сохранения и загрузки объектов R в Службах машинного обучения SQL Server

Применимо к: даSQL Server 2016 (13.x); и более поздние версии

Узнайте, как использовать пакет RevoScaleR для хранения сериализованных объектов R в таблице и их загрузки из таблицы по мере необходимости с помощью Служб машинного обучения SQL Server. Эту возможность можно использовать при обучении и сохранении модели, которая затем применяется для оценки или анализа.

Пакет RevoScaleR

Пакет RevoScaleR включает функции сериализации и десериализации, которые могут передавать объекты R в SQL Server в компактной форме, а затем считывать их из таблицы. В общем случае каждый вызов функции использует простое хранилище значений ключей, в котором ключ является именем объекта, а значение, сопоставленное с этим ключом, является объектом R типа varbinary, перемещаемым в таблицу или из нее.

Чтобы сохранить объекты R напрямую в SQL Server непосредственно из среды R, нужно:

  • установить подключение к SQL Server с помощью источника данных RxOdbcData;
  • вызвать новые функции через подключение ODBC;
  • при необходимости указать, что объект не сериализуется, а затем выбрать новый алгоритм сжатия для использования вместо алгоритма по умолчанию.

По умолчанию любой объект, вызываемый из R для перемещения в SQL Server, сериализуется и сжимается. И наоборот, при загрузке объекта из таблицы SQL Server для использования в коде R объект десериализуется и распаковывается.

Список новых функций

  • rxWriteObject записывает объект R в SQL Server с помощью источника данных ODBC.

  • rxReadObject считывает объект R из базы данных SQL Server с помощью источника данных ODBC.

  • rxDeleteObject удаляет объект R из базы данных SQL Server, указанной в источнике данных ODBC. Если существует несколько объектов, на которые указывает сочетание ключа и версии, все они удаляются.

  • rxListKeys указывает все доступные объекты в виде пар "ключ — значение". Это помогает определить имена и версии объектов R.

Для получения подробных сведений о синтаксисе каждой функции воспользуйтесь справкой R. Позже подробные сведения также приведены в статье ScaleR reference (Справочник по ScaleR).

Сохранение объектов R в SQL Server с помощью ODBC

Эта процедура демонстрирует, как использовать новые функции для создания модели и ее сохранения в SQL Server.

  1. Настройте строку подключения для SQL Server.

    conStr <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
    
  2. Создайте объект источника данных rxOdbcData в R с помощью этой строки подключения.

    ds <- RxOdbcData(table="robjects", connectionString=conStr)
    
  3. Удалите таблицу, если она уже существует и не требуется отслеживать старые версии объектов.

    if(rxSqlServerTableExists(ds@table, ds@connectionString)) {
        rxSqlServerDropTable(ds@table, ds@connectionString)
        }
    
  4. Определите таблицу, которую можно использовать для хранения двоичных объектов.

    ddl <- paste(" CREATE TABLE [", ds@table, "] 
       (","  [id] varchar(200) NOT NULL,
        "," [value] varbinary(max),
        "," CONSTRAINT unique_id UNIQUE (id))", 
        sep = "") 
    
  5. Откройте подключение ODBC, чтобы создать таблицу, а после завершения инструкции DDL закройте его.

     rxOpen(ds, "w") 
     rxExecuteSQLDDL(ds, ddl) 
     rxClose(ds)
    
  6. Создайте объекты R, которые вы хотите сохранить.

    infertLogit <- rxLogit(case ~ age + parity + education + spontaneous + induced, 
      data = infert)
    
  7. Используйте созданный ранее объект RxOdbcData , чтобы сохранить модель в базе данных.

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

Считывание объектов R из SQL Server с помощью ODBC

Эта процедура демонстрирует, как использовать новые функции для загрузки модели из SQL Server.

  1. Настройте строку подключения для SQL Server.

    conStr2 <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
    
  2. Создайте объект источника данных rxOdbcData в R с помощью этой строки подключения.

    ds <- RxOdbcData(table="robjects", connectionString=conStr2)
    
  3. Считайте модель из таблицы, указав имя ее объекта R.

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

Дальнейшие действия