ODBC를 사용하여 SQL Server Machine Learning Services에서 R 개체 저장 및 로드

적용 대상: SQL Server 2016(13.x) 이상 버전

RevoScaleR 패키지를 사용하여 직렬화된 R 개체를 테이블에 저장한 다음, SQL Server Machine Learning Services를 통해 필요에 따라 테이블에서 개체를 로드하는 방법을 알아봅니다. 모델을 학습시키고 저장할 때 사용할 수 있으며 나중에 점수 매기기 또는 분석에 사용할 수 있습니다.

RevoScaleR 패키지

RevoScaleR 패키지에는 SQL Server에 R 개체를 간결하게 표시한 다음, 테이블에서 개체를 읽을 수 있는 serialization 및 deserialization 함수가 포함됩니다. 일반적으로 각 함수 호출은 간단한키 값 저장소를 사용합니다. 여기서 키는 개체의 이름이고 키와 관련된 값은 테이블 내부 또는 외부로 이동할 varbinary R 개체입니다.

R 환경에서 직접 SQL Server에 R 개체를 저장하려면 다음을 수행해야 합니다.

  • RxOdbcData 데이터 원본을 사용하여 SQL Server에 대한 연결을 설정했습니다.
  • ODBC 연결을 통해 새 함수 호출
  • 필요에 따라 개체가 직렬화되지 않도록 지정할 수 있습니다. 그런 다음, 기본 압축 알고리즘 대신 사용할 새 압축 알고리즘을 선택합니다.

기본적으로 SQL Server로 이동하기 위해 R에서 호출하는 모든 개체는 직렬화되고 압축됩니다. 반대로 R 코드에서 사용하기 위해 SQL Server 테이블에서 개체를 로드하는 경우 개체는 역직렬화되고 압축이 풀립니다.

새 함수 목록

  • rxWriteObject 는 ODBC 데이터 원본을 사용하여 SQL Server에 R 개체를 씁니다.

  • rxReadObject 는 ODBC 데이터 원본을 사용하여 SQL Server 데이터베이스에서 R 개체를 읽습니다.

  • rxDeleteObject 는 ODBC 데이터 원본에 지정된 SQL Server 데이터베이스에서 R 개체를 삭제합니다. 키/버전 조합으로 식별되는 개체가 여러 개 있을 경우 모두 삭제됩니다.

  • rxListKeys 는 사용 가능한 모든 개체를 키-값 쌍으로 나열합니다. 따라서 R 개체의 이름 및 버전을 확인하는 데 도움이 됩니다.

각 함수의 구문에 대한 자세한 도움말을 보려면 R 도움말을 사용하세요. 자세한 내용은 ScaleR 참조에서도 확인할 수 있습니다.

ODBC를 사용하여 SQL Server에 R 개체를 저장하는 방법

이 절차에서는 새 함수를 사용하여 모델을 만들고 SQL Server에 저장하는 방법을 보여 줍니다.

  1. SQL Server에 대한 연결 문자열을 설정합니다.

    conStr <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
    
  2. 연결 문자열을 사용하여 R에 rxOdbcData 데이터 원본 개체를 만듭니다.

    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)
    

ODBC를 사용하여 SQL Server에서 R 개체를 읽는 방법

이 절차에서는 새 함수를 사용하여 SQL Server에서 모델을 로드하는 방법을 보여 줍니다.

  1. SQL Server에 대한 연결 문자열을 설정합니다.

    conStr2 <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
    
  2. 연결 문자열을 사용하여 R에 rxOdbcData 데이터 원본 개체를 만듭니다.

    ds <- RxOdbcData(table="robjects", connectionString=conStr2)
    
  3. 해당 R 개체 이름을 지정하여 테이블에서 모델을 읽습니다.

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

다음 단계